在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
C++ CAD Arx二次开发用户交互 2、动态创建多段线的实现。 3、acedGetPoint函数中使用关键字。 三、具体内容 acedGetPoint:获取用户输入的点 acedGetInt:获取用户输入的整型 acedGetKword:获取用户输入的关键字 acedGetReal:获取用户输入的实数。 2、动态创建多段线:最基本的要求就是用户在图形窗口中按顺序拾取各个点,每次拾取一点都会将其加入到多段线的末端,最终按ENTER键或者ESC键就完成多段线的创建。 (1)拾取第一点; (2)拾取第二点,创建多段线。 (3)如果没有按ENTER或ESC键,则拾取下一点,并将拾取的点添加到多段线的末尾。 (4)如果用户按ENTER或ESC键,退出程序的执行,多段线创建完毕,否则执行步骤3。 3、动态创建多段线(简单版、升级版) static void YunyouMyGroupAddPolyBaic(void) { int index=2; AcGePoint3d ptStart; if (!CGetInputUtil::GetPoint(TEXT("\n please input first point:"),ptStart)) { return; } AcGePoint3d ptPrevious,ptCurrent; ptPrevious=ptStart; AcDbObjectId polyId; while (CGetInputUtil::GetPoint(ptPrevious,TEXT("\n please input NEXT point:"),ptCurrent)) { if (index==2) { polyId=CPolylineUtil::Add(CConvertUtil::ToPoint2d(ptPrevious),CConvertUtil::ToPoint2d(ptCurrent));
} else if(index>2) { AcDbPolyline *pPoly=NULL; if (acdbOpenObject(pPoly,polyId,AcDb::kForWrite)==Acad::eOk) { pPoly->addVertexAt(index-1,CConvertUtil::ToPoint2d(ptCurrent)); pPoly->close(); } } ptPrevious=ptCurrent; index++; } } static void YunyouMyGroupAddPoly(void) { int colorIndex=0; ads_real width=0; int index=2; AcGePoint3d ptStart; if (!CGetInputUtil::GetPoint(TEXT("\n please input first point:"),ptStart)) { return; } AcGePoint3d ptPrevious,ptCurrent; ptPrevious=ptStart; AcDbObjectId polyId; acedInitGet(NULL,TEXT("W C O")); int rc=CGetInputUtil::GetPointReturnCode(ptPrevious, TEXT("\n输入下一点[宽度(W)/颜色(C)<完成(O)>:"), ptCurrent); while (rc==RTNORM || rc==RTKWORD) { if (rc==RTKWORD) { ACHAR kword[20]; if (acedGetInput(kword)!=RTNORM) { return; } if (_tcscmp(kword,TEXT("W"))==0) { width=GetWidth(); } else if (_tcscmp(kword,TEXT("C"))==0) { colorIndex=GetColorIndex(); } else if (_tcscmp(kword,TEXT("O"))==0) { return; } else { acutPrintf(TEXT("\n输入了无效的关键字")); } } else if(rc==RTNORM) { if (index==2) { polyId=CPolylineUtil::Add(CConvertUtil::ToPoint2d(ptPrevious),CConvertUtil::ToPoint2d(ptCurrent)); AcDbPolyline *pPoly=NULL; if (acdbOpenObject(pPoly,polyId,AcDb::kForWrite)==Acad::eOk) { pPoly->setConstantWidth(width); pPoly->setColorIndex(colorIndex); pPoly->close(); } } else if(index>2) { AcDbPolyline *pPoly=NULL; if (acdbOpenObject(pPoly,polyId,AcDb::kForWrite)==Acad::eOk) { pPoly->addVertexAt(index-1,CConvertUtil::ToPoint2d(ptCurrent));
pPoly->setConstantWidth(width); pPoly->setColorIndex(colorIndex);
pPoly->close(); } } ptPrevious=ptCurrent; index++;
} // acedInitGet(NULL,TEXT("W C O")); rc=CGetInputUtil::GetPointReturnCode(ptPrevious,TEXT("\n输入下一点[宽度(W)/颜色(C)<完成(O)>:"),ptCurrent);// } } static void YunyouMyGroupGetPointKeyword(void) { int rc; ACHAR kword[20]; AcGePoint3d pt; acedInitGet(RSG_NONULL,TEXT("K W")); rc=CGetInputUtil::GetPointReturnCode(TEXT("\n输入一个点或[Keyword1/KeyWord2]:"),pt);
switch (rc) { case RTKWORD: if (acedGetInput(kword)!=RTNORM) { return; } if (_tcscmp(kword,TEXT("K"))==0) { acutPrintf(TEXT("\n 选择的关键字是Keyword1")); } else { acutPrintf(TEXT("\n 选择的关键字是Keyword2")); } break; case RTNORM: acutPrintf(TEXT("\n输入点的坐标是(%.2f,%.2f,%.2f)"),pt.x,pt.y,pt.z); break; default: break; } }
四、总结 acedGetPoint:获取用户输入的点 acedGetInt:获取用户输入的整型 acedGetKword:获取用户输入的关键字 acedGetReal:获取用户输入的实数 acedGetDist:获取用户输入的距离值 acedGetCorner:获取用户输入的角点 acedGetAngle:获取用户输入的角度 acedGetFileD:打开文件选择对话框获取用户输入的文件名 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论