📄 compublic.cpp
字号:
else {
ads_grdraw(pt1,pt2,col,0);
}
return PlineId;
}
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
//| 函数名: 绘制PLine线
//| MakePline()
//|
//| 输入参数: AcGePoint3dArray ptArr 坐标数组
//| char* lay 所在层
//| double wid 线宽
//| int col 颜色
//| struct resbuf *xData 附加扩展数据
//| BOOL draw 是否绘制
//|
//| 返回: AcDbObjectId
//| 说明: 指定层名,建立PLine线
//| 举例: 略
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
AcDbObjectId MakePline(AcGePoint3dArray ptArr,char* lay,double wid,
int col,struct resbuf *xData,BOOL draw)
{
int i;
AcDbObjectId PlineId;
if (draw) {
AcDb2dPolyline *pLine = new AcDb2dPolyline(AcDb::k2dSimplePoly,
ptArr,0.0,Adesk::kTrue,wid,wid);
AcDbBlockTable *pBlockTable;
if (acdbCurDwg()->
getBlockTable(pBlockTable,AcDb::kForRead) != Acad::eOk) {
ads_printf("\n错误:无法打开块表!\n");
pLine->close();
return 0;
}
AcDbBlockTableRecord *pBlockTableRecord;
if (pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord,
AcDb::kForWrite) != Acad::eOk) {
ads_printf("\n错误:无法获取符号表!\n");
pBlockTable->close();
pLine->close();
return 0;
}
if (pBlockTable->close() != Acad::eOk) {
ads_printf("\n错误:无法关闭块表!\n");
pBlockTableRecord->close();
pLine->close();
return 0;
}
pLine->setColorIndex(col);
if (pLine->makeOpen() != Acad::eOk) {
ads_printf("\n错误:无法编辑PLine线!\n");
pBlockTableRecord->close();
pLine->close();
return 0;
}
pLine->setLayer(lay);
//将对象添加到数据库中
if (pBlockTableRecord->appendAcDbEntity(PlineId,pLine) != Acad::eOk) {
ads_printf("\n错误:无法填加实体至数据库!\n");
pBlockTableRecord->close();
pLine->close();
return 0;
}
if (pBlockTableRecord->close() != Acad::eOk) {
ads_printf("\n错误:无法关闭符号表!\n");
pLine->close();
return 0;
}
//===========加扩展数据===========
pLine->upgradeOpen();
if (pLine->setXData(xData) != Acad::eOk){
ads_printf("\n警告: 实体(多义线 ID=%d)添加扩展数据时出错!\n",PlineId);
pLine->close();
return PlineId;
}
//================================
pLine->close();
}
else {
int n = ptArr.length();
ads_point poFrom,poTo;
for (i = 0; i < n - 1; i++) {
if (i < n - 1) {
Spoint(poFrom, ptArr[i][0], ptArr[i][1], 0.0);
Spoint(poTo, ptArr[i + 1][0],ptArr[i + 1][1], 0.0);
ads_grdraw(poFrom,poTo,col,0);
}
}
}
return PlineId;
}
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
//| 函数名: 绘制PLine线
//| MakePlineEx()
//|
//| 输入参数: int n 项点的各数
//| char* lay 所在层
//| ads_point pt[] 各项点坐标
//| double wid 线宽
//| int col 颜色
//| struct resbuf *xData 附加扩展数据
//| BOOL draw 是否绘制
//|
//| 返回: AcDbObjectId
//| 说明: 指定层名,建立PLine线
//| 举例: 略
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
AcDbObjectId MakePlineEx(int n,char* lay,ads_point pt[],double wid,
int col,struct resbuf *xData,BOOL draw)
{
int i;
AcDbObjectId PlineId;
AcGePoint3dArray ptArr;//定义三维坐标数组
ptArr.setLogicalLength(n);
for (i = 0;i < n ;i++)
ptArr[i].set(pt[i][0],pt[i][1],0.0); //转换坐标数组
if (draw) {
AcDb2dPolyline *pLine = new AcDb2dPolyline(AcDb::k2dSimplePoly,
ptArr,0.0,Adesk::kTrue,wid,wid);
AcDbBlockTable *pBlockTable;
if (acdbCurDwg()->
getBlockTable(pBlockTable,AcDb::kForRead) != Acad::eOk) {
ads_printf("\n错误:无法打开块表!\n");
pLine->close();
return 0;
}
AcDbBlockTableRecord *pBlockTableRecord;
if (pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord,
AcDb::kForWrite) != Acad::eOk) {
ads_printf("\n错误:无法获取符号表!\n");
pBlockTable->close();
pLine->close();
return 0;
}
if (pBlockTable->close() != Acad::eOk) {
ads_printf("\n错误:无法关闭块表!\n");
pBlockTableRecord->close();
pLine->close();
return 0;
}
pLine->setColorIndex(col);
if (pLine->makeOpen() != Acad::eOk) {
ads_printf("\n错误:无法编辑PLine线!\n");
pBlockTableRecord->close();
pLine->close();
return 0;
}
pLine->setLayer(lay);
//将对象添加到数据库中
if (pBlockTableRecord->appendAcDbEntity(PlineId,pLine) != Acad::eOk) {
ads_printf("\n错误:无法填加实体至数据库!\n");
pBlockTableRecord->close();
pLine->close();
return 0;
}
if (pBlockTableRecord->close() != Acad::eOk) {
ads_printf("\n错误:无法关闭符号表!\n");
pLine->close();
return 0;
}
//===========加扩展数据===========
pLine->upgradeOpen();
if (pLine->setXData(xData) != Acad::eOk){
ads_printf("\n警告: 实体(多义线 ID=%d)添加扩展数据时出错!\n",PlineId);
pLine->close();
return PlineId;
}
//================================
pLine->close();
}
else {
for (i = 0;i < n;i++) {
if (i < n - 1)
ads_grdraw(pt[i],pt[i + 1],col,0);
}
}
return PlineId;
}
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
//| 函数名: 绘制圆
//| MakeCircle()
//|
//| 输入参数: ads_point pt 圆心坐标
//| double r 半径
//| int col 颜色
//| char* layname 所在层名
//| struct resbuf *xData 附加扩展数据
//| BOOL draw 是否绘制
//|
//| 返回: AcDbObjectId
//| 说明: 指定层、圆心,半径、颜色、建立圆
//| 举例: 略
//|
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
AcDbObjectId MakeCircle(ads_point pt,double r,int col,char* layname,
struct resbuf *xData,BOOL draw)
{
AcDbObjectId circleId;
AcGePoint3d center(pt[0],pt[1],0.0);
if (draw) {
AcGeVector3d normal(0.0,0.0,1.0);
AcDbCircle *pCirc = new AcDbCircle(center,normal,r);
AcDbBlockTable *pBlockTable;
if (acdbCurDwg()->getBlockTable(pBlockTable,
AcDb::kForRead) != Acad::eOk) {
ads_printf("\n错误:无法打开块表!\n");
pCirc->close();
return 0;
}
AcDbBlockTableRecord *pBlockTableRecord;
if (pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord,
AcDb::kForWrite) != Acad::eOk) {
ads_printf("\n错误:无法获取符号表!\n");
pBlockTable->close();
pCirc->close();
return 0;
}
if (pBlockTable->close() != Acad::eOk) {
ads_printf("\n错误:无法关闭块表!\n");
pBlockTableRecord->close();
pCirc->close();
return 0;
}
if (pBlockTableRecord->appendAcDbEntity(circleId, pCirc) != Acad::eOk) {
ads_printf("\n错误:无法填加实体至数据库!\n");
pBlockTableRecord->close();
pCirc->close();
return 0;
}
pCirc->setColorIndex(col);
pCirc->setLayer(layname);
if (pBlockTableRecord->close() != Acad::eOk) {
ads_printf("\n错误:无法关闭符号表!\n");
pCirc->close();
return 0;
}
//===========加扩展数据===========
pCirc->upgradeOpen();
if (pCirc->setXData(xData) != Acad::eOk){
ads_printf("\n警告: 实体(圆 ID=%d)添加扩展数据时出错!\n",circleId);
pCirc->close();
return circleId;
}
//================================
pCirc->close();
}
else {
ads_point ptTemp1,ptTemp2;
for (int i = 0;i < 101;i ++) {
ads_polar(pt,2 * PI / 100 * i,r,ptTemp1);
if (i) ads_grdraw(ptTemp1,ptTemp2,col,0);
Cpoint(ptTemp2,ptTemp1);
}
}
return circleId;
}
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
//| 函数名: 绘制椭圆
//| MakeEllipse()
//|
//| 输入参数: ads_point ptCenter 圆心
//| ads_point ptNormal 椭圆法线
//| ads_point ptMajor 椭圆长轴
//| double rRatio 比率
//| double rStartParam 起始角度
//| double rEndParam 终止角度
//| int col 颜色
//| char* layname 所在层名
//| struct resbuf *xData 附加扩展数据
//| BOOL draw 是否绘制
//|
//| 返回: AcDbObjectId
//| 说明: 指定层、圆心,半径、颜色、建立椭圆
//| 举例: 略
//|
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
AcDbObjectId MakeEllipse(ads_point ptCenter,ads_point ptNormal,ads_point ptMajor,
double rRatio,double rStartParam,double rEndParam,int col,
char* layname,struct resbuf *xData,BOOL draw)
{
AcDbObjectId circleId;
AcGePoint3d Center(ptCenter[0],ptCenter[1],0.0);
if (draw) {
AcGeVector3d normal(0.0,0.0,1.0);
AcGeVector3d Major(100.0,58.0,100.0);
AcDbEllipse *pCirc = new AcDbEllipse(Center,normal,Major,
rRatio,rStartParam,rEndParam);
AcDbBlockTable *pBlockTable;
if (acdbCurDwg()->
getBlockTable(pBlockTable,AcDb::kForRead) != Acad::eOk) {
ads_printf("\n错误:无法打开块表!\n");
return 0;
}
AcDbBlockTableRecord *pBlockTableRecord;
if (pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord,
AcDb::kForWrite) != Acad::eOk) {
ads_printf("\n错误:无法获取符号表!\n");
pBlockTable->close();
return 0;
}
if (pBlockTable->close() != Acad::eOk) {
ads_printf("\n错误:无法关闭块表!\n");
pBlockTable->close();
return 0;
}
if (pBlockTableRecord->appendAcDbEntity(circleId, pCirc) != Acad::eOk) {
ads_printf("\n错误:无法填加实体至数据库!\n");
pBlockTableRecord->close();
pCirc->close();
return 0;
}
pCirc->setColorIndex(col);
pCirc->setLayer(layname);
if (pBlockTableRecord->close() != Acad::eOk) {
ads_printf("\n错误:无法关闭符号表!\n");
pCirc->close();
return 0;
}
//===========加扩展数据===========
pCirc->upgradeOpen();
if (pCirc->setXData(xData) != Acad::eOk){
ads_printf("\n警告: 实体(椭圆 ID=%d)添加扩展数据时出错!\n",circleId);
pCirc->close();
return circleId;
}
//================================
pCirc->close();
}
else {
}
return circleId;
}
AcDbObjectId MakeArc(ads_point pt,double r,double startAngle,double endAngle,
int col,char* layname,struct resbuf *xData,BOOL draw)
{
double i;
AcDbObjectId arcId;
AcGePoint3d center(pt[0],pt[1],0.0);
if (draw) {
AcGeVector3d normal(0,0,1);
AcDbArc *pArc = new AcDbArc(center, normal, r, startAngle, endAngle);
AcDbBlockTable *pBlockTable;
if (acdbCurDwg()->getBlockTable(pBlockTable,
AcDb::kForRead) != Acad::eOk) {
ads_printf("\n错误:无法打开块表!\n");
pArc->close();
return 0;
}
AcDbBlockTableRecord *pBlockTableRecord;
if (pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord,
AcDb::kForWrite) != Acad::eOk) {
ads_printf("\n错误:无法获取符号表!\n");
pBlockTable->close();
pArc->close();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -