天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 154|回复: 0

[每日一码] ARX常用代码总结

[复制链接]
  • TA的每日心情
    开心
    半小时前
  • 签到天数: 20 天

    [LV.4]偶尔看看III

    115

    主题

    11

    回帖

    1393

    积分

    管理员

    积分
    1393
    QQ
    发表于 2024-3-14 20:52:09 | 显示全部楼层 |阅读模式
    1. ////将图形加载显示到CAD===================  
    2. static AcDbObjectId LoadEntity(AcDbEntity* entity){  
    3.         AcDbBlockTable* pBlockTable;  
    4.         acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable,AcDb::kForRead);  
    5.         AcDbBlockTableRecord* pBlockTableRecord;  
    6.         pBlockTable->getAt(ACDB采用MODEL采用SPACE,pBlockTableRecord,AcDb::kForWrite);  
    7.         AcDbObjectId Id;  
    8.         pBlockTableRecord->appendAcDbEntity(Id,entity);  
    9.         pBlockTable->close();  
    10.         pBlockTableRecord->close();  
    11.         entity->close();  
    12.         return Id;  
    13. }  
    14. ////为图形添加标注  
    15. static void AddOrdinate(AcGePoint3d ptStart,AcGePoint3d ptEnd,  
    16.                                                 CString text)
    17. {  
    18.         AcDbOrdinateDimension* pDim = new   
    19.                 AcDbOrdinateDimension(true,ptStart,ptEnd,text);  
    20.         LoadEntity(pDim);  
    21. }  
    22. ////画线====================  
    23. static void TESTlineCmd()  
    24. {  
    25.         //acutPrintf(采用T("\nHello"));  
    26.         ads采用point inputStart;  
    27.         ads采用point inputEnd;  
    28.         AcGePoint3d ptStart;  
    29.         AcGePoint3d ptEnd;  
    30.         ////用户输入要画的坐标  
    31.         if(acedGetPoint(NULL,采用T("start point"),inputStart) != RTNORM){  
    32.                 return;  
    33.         }  
    34.         ptStart[X] = inputStart[X];  
    35.         ptStart[Y] = inputStart[Y];  
    36.         ptStart[Z] = inputStart[Z];  
    37.         if(acedGetPoint(NULL,采用T("end point"),inputEnd) != RTNORM){  
    38.                 return;  
    39.         }  
    40.         ptEnd[X] = inputEnd[X];  
    41.         ptEnd[Y] = inputEnd[Y];  
    42.         ptEnd[Z] = inputEnd[Z];  
    43.         AcDbLine* pLine = new AcDbLine(ptStart,ptEnd);  
    44.         pLine->setColorIndex(2);  
    45.         LoadEntity(pLine);  
    46.         AddOrdinate(ptStart,ptEnd,采用T("hi"));  
    47.         //AfxMessageBox(采用T("命令画了一条线"));  
    48. }  
    49. ////画圆形==========================  
    50. static void TESTcirclecmd(){  
    51.         ////垂直平面法向量  
    52.         AcGeVector3d vec(0,0,1);  
    53.         ////圆心  
    54.         AcGePoint3d ptCenter(100,100,100);  
    55.         AcDbCircle* pCircle = new AcDbCircle(ptCenter,vec,1000);  
    56.         LoadEntity(pCircle);  
    57. }  
    58. ////画圆弧================================  
    59. static void TESTarccmd(){  
    60.         AcGeVector3d vec(0,0,1);  
    61.         AcGePoint3d ptCenter(500,500,500);  
    62.         AcDbArc* pArc = new AcDbArc(ptCenter,vec,700,0,90);  
    63.         LoadEntity(pArc);  
    64. }  
    65. ////画多线段============================  
    66. static void TESTpolycmd(){  
    67.         ////构造多点数组  
    68.         AcGePoint2dArray points;  
    69.         AcGePoint2d pt1(1000, 1000);  
    70.         AcGePoint2d pt2(2000, 1800);  
    71.         AcGePoint2d pt3(500, 2000);  
    72.         AcGePoint2d pt4(3000, 5000);  
    73.         points.append(pt1);  
    74.         points.append(pt2);  
    75.         points.append(pt3);  
    76.         points.append(pt4);  
    77.         ////绘制多点线段  
    78.         AcDbPolyline* pl = new AcDbPolyline(points.length());  
    79.         for(int i = 0;i < points.length();i ++){  
    80.                 pl->addVertexAt(i,points.at(i),0,0.5,0.5);  
    81.         }  
    82.         LoadEntity(pl);  
    83. }  
    84. ////绘制POLY3d线段====================  
    85. static void TESTpoly3dcmd(){  
    86.         ////构造多点数组  
    87.         AcGePoint3dArray points;  
    88.         AcGePoint3d pt1(10, 10,10);  
    89.         AcGePoint3d pt2(20, 10,20);  
    90.         AcGePoint3d pt3(20, 20,30);  
    91.         points.append(pt1);  
    92.         points.append(pt2);  
    93.         points.append(pt3);  
    94.         ////绘制多点线段  
    95.         AcDb3dPolyline* pl = new AcDb3dPolyline(AcDb::Poly3dType::k3dSimplePoly,points);  
    96.         LoadEntity(pl);  
    97. }  
    98. ////绘制椭圆=========================  
    99. static void TESTellipsecmd(){  
    100.         ////椭圆焦点  
    101.         /* AcGePoint2d p1(400,400);
    102.         AcGePoint2d p2(800,400);*/  
    103.         ////中心点  
    104.         AcGePoint3d ptCenter(600,400,0);  
    105.         AcGeVector3d vecNormal(0,0,1);  
    106.         ////长轴  
    107.         AcGeVector3d majorAxis(1000,0,0);  
    108.         ////通过曲率确定短轴长度  
    109.         double ratio = 0.6;  
    110.         AcDbEllipse* ae = new AcDbEllipse(/*AcGePoint3d::kOrigin*/ptCenter,vecNormal,majorAxis,  
    111.                 ratio);  
    112.         LoadEntity(ae);  
    113. }  
    114. ////创建样条曲线================  
    115. static void TESTsplinecmd(){  
    116.         AcGePoint3d p1(0,0,0),p2(200,600,0),p3(1200,1600,0),  
    117.                 p4(2000,2000,0);  
    118.         AcGePoint3dArray points;  
    119.         points.append(p1);  
    120.         points.append(p2);  
    121.         points.append(p3);  
    122.         points.append(p4);  
    123.         AcDbSpline* as = new AcDbSpline(points);  
    124.         LoadEntity(as);  
    125. }  
    126. ////创建面域(把用直线创建的闭合图形,生成一个图形的对象)  
    127. static void TESTregioncmd(){  
    128.         ads采用name ss;  
    129.         ////提示用户选择对象  
    130.         int rt = acedSSGet(NULL,NULL,NULL,NULL,ss);  
    131.         AcDbObjectIdArray ids;  
    132.         if(rt == RTNORM){  
    133.                 long len;  
    134.                 ////获得对象个数  
    135.                 acedSSLength(ss,&len);  
    136.                 for(int i = 0;i < len;i ++){  
    137.                         ////先从对象中得到名字  
    138.                         ads采用name ent;  
    139.                         acedSSName(ss,i,ent);  
    140.                         ////再从名字中取出ID  
    141.                         AcDbObjectId objId;  
    142.                         acdbGetObjectId(objId,ent);  
    143.                         ids.append(objId);  
    144.                 }  
    145.         }  
    146.         acedSSFree(ss);  
    147.         ////得到objId数组之后,开始画区域  
    148.         CreateRegion(ids);  
    149. }  
    150. ////绘制面域  
    151. static AcDbObjectIdArray  CreateRegion(AcDbObjectIdArray ids){  
    152.         AcDbObjectIdArray regionIds;  
    153.         AcDbVoidPtrArray curves;  
    154.         AcDbVoidPtrArray regions;  
    155.         AcDbEntity* pEnt;  
    156.         AcDbRegion* pRegion;  
    157.         for(int i = 0;i < ids.length();i ++){  
    158.                 acdbOpenAcDbEntity(pEnt,ids.at(i),AcDb::kForRead);  
    159.                 if(pEnt->isKindOf(AcDbCurve::desc())){  
    160.                         curves.append(static采用cast<void*>(pEnt));  
    161.                 }  
    162.         }  
    163.         Acad::ErrorStatus es = AcDbRegion::createFromCurves(curves,regions);  
    164.         if(es == Acad::eOk){  
    165.                 for(int i = 0;i < regions.length();i ++){  
    166.                         pRegion = static采用cast<AcDbRegion*>(regions[i]);  
    167.                         pRegion->setDatabaseDefaults();  
    168.                         AcDbObjectId regionId = LoadEntity(pRegion);  
    169.                         regionIds.append(regionId);  
    170.                 }  
    171.                 CString tipStr ;  
    172.                 tipStr.Format(采用T("\n已成功创建面域:%d个"),regions.length());  
    173.                 acutPrintf(tipStr);  
    174.         }  
    175.         else{  
    176.                 for(int i = 0;i < regions.length();i ++){  
    177.                         delete (AcRxObject*)regions[i];  
    178.                 }  
    179.         }  
    180.         for(int i = 0;i < ids.length();i ++){  
    181.                 pEnt = static采用cast<AcDbEntity*>(curves[i]);  
    182.                 pEnt->close();  
    183.         }  
    184.         return regionIds;  
    185. }  
    186. //绘制文字===================  
    187. static void TESTtextcmd(){  
    188.         AcGePoint3d ptInsert(0,400,0);  
    189.         AcDbMText* pMText = new AcDbMText();  
    190.         ////设置多行文字特性  
    191.         pMText->setContents(采用T("hello!!"));  
    192.         pMText->setLocation(ptInsert);  
    193.         pMText->setTextHeight(1000);  
    194.         pMText->setWidth(1000);  
    195.         pMText->setAttachment(AcDbMText::kBottomLeft);  
    196.         LoadEntity(pMText);  
    197. }  
    198. [it618postdisplay>0]
    199. ////创建填充======================  
    200. static void TESThatchcmd(){  
    201.         ////提示用户选择填充边界  
    202.         ads采用name ss;  
    203.         int rt = acedSSGet(NULL,NULL,NULL,NULL,ss);  
    204.         AcDbObjectIdArray objIds;  
    205.         if(rt == RTNORM){  
    206.                 long len;  
    207.                 acedSSLength(ss,&len);  
    208.                 for(int i = 0;i < len;i ++){  
    209.                         ads采用name ent;  
    210.                         acedSSName(ss,i,ent);  
    211.                         AcDbObjectId objId;  
    212.                         acdbGetObjectId(objId,ent);  
    213.                         objIds.append(objId);  
    214.                 }  
    215.         }  
    216.         acedSSFree(ss);  
    217.         ////选择完毕,绘制填充  
    218.         Acad::ErrorStatus es;  
    219.         AcDbHatch* pHatch = new AcDbHatch();  
    220.         ////选择填充平面  
    221.         AcGeVector3d normal(0,0,1);  
    222.         pHatch->setNormal(normal);  
    223.         pHatch->setElevation(0);  
    224.         ////设置关联性  
    225.         pHatch->setAssociative(true);  
    226.         ////设置填充图案  
    227.         pHatch->setPattern(AcDbHatch::kPreDefined,采用T(/*"SOLID"*/"ANSI31"));  
    228.         ////设置填充角度  
    229.         pHatch->setPatternAngle(45);  
    230.         ////设置填充边界  
    231.         es=pHatch->appendLoop(AcDbHatch::kExternal,objIds);  
    232.         ////显示填充对象  
    233.         es=pHatch->evaluateHatch();  
    234.         LoadEntity(pHatch);  
    235. }  
    236. [/it618postdisplay]
    237. //获得一层的所有对象,变色===============  
    238. static void TESTgetlayerobjcmd(){  
    239.         AcDbLayerTable *pLayerTbl;  
    240.         acdbHostApplicationServices()->workingDatabase()->getSymbolTable(  
    241.                 pLayerTbl,AcDb::kForRead);  
    242.         if(!pLayerTbl->has(采用T("测试"))){  
    243.                 acutPrintf(采用T("\n当前图形未包含'测试'图层"));  
    244.                 pLayerTbl->close();  
    245.                 return;  
    246.         }  
    247.         AcDbObjectId layerId;  
    248.         pLayerTbl->getAt(采用T("测试"),layerId);  
    249.         pLayerTbl->close();  
    250.         ////获得当前数据库的块表  
    251.         AcDbBlockTable* pBlkTbl;  
    252.         acdbHostApplicationServices()->workingDatabase()->getBlockTable(  
    253.                 pBlkTbl,AcDb::kForRead);  
    254.         ////获得模型空间的块表记录  
    255.         AcDbBlockTableRecord* pBlkTblRcd;  
    256.         pBlkTbl->getAt(ACDB采用MODEL采用SPACE,pBlkTblRcd,AcDb::kForRead);  
    257.         pBlkTbl->close();  
    258.         ////创建块表记录遍历器  
    259.         AcDbBlockTableRecordIterator* pIter;  
    260.         pBlkTblRcd->newIterator(pIter);  
    261.         AcDbEntity* pEnt;  
    262.         for(pIter->start();!pIter->done();pIter->step()){  
    263.                 pIter->getEntity(pEnt,AcDb::kForWrite);  
    264.                 if(pEnt->layerId() == layerId){  
    265.                         /*AcDbLine* pLine = AcDbLine::cast(pEnt);
    266.                         if(pLine != NULL){*/  
    267.                         pEnt->setColorIndex(1);  
    268.                         //}  
    269.                 }  
    270.                 pEnt->close();  
    271.         }  
    272.         delete pIter;  
    273.         pBlkTblRcd->close();  
    274. }   
    复制代码

     

     

     

     

    [每日一码] ARX常用代码总结
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

    GMT+8, 2024-11-5 06:12 , Processed in 0.124964 second(s), 25 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表