找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2411|回复: 20

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

[复制链接]

已领礼包: 13个

财富等级: 恭喜发财

发表于 2016-10-24 16:11:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 LoveArx 于 2016-10-24 16:15 编辑
////将图形加载显示到CAD===================  
static AcDbObjectId LoadEntity(AcDbEntity* entity){  
        AcDbBlockTable* pBlockTable;  
        acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable,AcDb::kForRead);  
        AcDbBlockTableRecord* pBlockTableRecord;  
        pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite);  
        AcDbObjectId Id;  
        pBlockTableRecord->appendAcDbEntity(Id,entity);  
        pBlockTable->close();  
        pBlockTableRecord->close();  
        entity->close();  
        return Id;  
}  


////为图形添加标注  
static void AddOrdinate(AcGePoint3d ptStart,AcGePoint3d ptEnd,  
                                                CString text)
{  
        AcDbOrdinateDimension* pDim = new   
                AcDbOrdinateDimension(true,ptStart,ptEnd,text);  
        LoadEntity(pDim);  
}  

////画线====================  
static void TESTlineCmd()  
{  
        //acutPrintf(_T("\nHello"));  

        ads_point inputStart;  
        ads_point inputEnd;  

        AcGePoint3d ptStart;  
        AcGePoint3d ptEnd;  
        ////用户输入要画的坐标  
        if(acedGetPoint(NULL,_T("start point"),inputStart) != RTNORM){  
                return;  
        }  
        ptStart[X] = inputStart[X];  
        ptStart[Y] = inputStart[Y];  
        ptStart[Z] = inputStart[Z];  
        if(acedGetPoint(NULL,_T("end point"),inputEnd) != RTNORM){  
                return;  
        }  
        ptEnd[X] = inputEnd[X];  
        ptEnd[Y] = inputEnd[Y];  
        ptEnd[Z] = inputEnd[Z];  
        AcDbLine* pLine = new AcDbLine(ptStart,ptEnd);  
        pLine->setColorIndex(2);  
        LoadEntity(pLine);  
        AddOrdinate(ptStart,ptEnd,_T("hi"));  
        //AfxMessageBox(_T("命令画了一条线"));  
}  

////画圆形==========================  
static void TESTcirclecmd(){  
        ////垂直平面法向量  
        AcGeVector3d vec(0,0,1);  
        ////圆心  
        AcGePoint3d ptCenter(100,100,100);  
        AcDbCircle* pCircle = new AcDbCircle(ptCenter,vec,1000);  
        LoadEntity(pCircle);  
}  

////画圆弧================================  
static void TESTarccmd(){  
        AcGeVector3d vec(0,0,1);  
        AcGePoint3d ptCenter(500,500,500);  
        AcDbArc* pArc = new AcDbArc(ptCenter,vec,700,0,90);  
        LoadEntity(pArc);  
}  

////画多线段============================  
static void TESTpolycmd(){  
        ////构造多点数组  
        AcGePoint2dArray points;  
        AcGePoint2d pt1(1000, 1000);  
        AcGePoint2d pt2(2000, 1800);  
        AcGePoint2d pt3(500, 2000);  
        AcGePoint2d pt4(3000, 5000);  
        points.append(pt1);  
        points.append(pt2);  
        points.append(pt3);  
        points.append(pt4);  
        ////绘制多点线段  
        AcDbPolyline* pl = new AcDbPolyline(points.length());  
        for(int i = 0;i < points.length();i ++){  

                pl->addVertexAt(i,points.at(i),0,0.5,0.5);  
        }  
        LoadEntity(pl);  
}  

////绘制POLY3d线段====================  
static void TESTpoly3dcmd(){  
        ////构造多点数组  
        AcGePoint3dArray points;  
        AcGePoint3d pt1(10, 10,10);  
        AcGePoint3d pt2(20, 10,20);  
        AcGePoint3d pt3(20, 20,30);  
        points.append(pt1);  
        points.append(pt2);  
        points.append(pt3);  
        ////绘制多点线段  
        AcDb3dPolyline* pl = new AcDb3dPolyline(AcDb::Poly3dType::k3dSimplePoly,points);  
        LoadEntity(pl);  
}  

////绘制椭圆=========================  
static void TESTellipsecmd(){  
        ////椭圆焦点  
        /* AcGePoint2d p1(400,400); 
        AcGePoint2d p2(800,400);*/  

        ////中心点  
        AcGePoint3d ptCenter(600,400,0);  
        AcGeVector3d vecNormal(0,0,1);  
        ////长轴  
        AcGeVector3d majorAxis(1000,0,0);  
        ////通过曲率确定短轴长度  
        double ratio = 0.6;  
        AcDbEllipse* ae = new AcDbEllipse(/*AcGePoint3d::kOrigin*/ptCenter,vecNormal,majorAxis,  
                ratio);  
        LoadEntity(ae);  
}  

////创建样条曲线================  
static void TESTsplinecmd(){  
        AcGePoint3d p1(0,0,0),p2(200,600,0),p3(1200,1600,0),  
                p4(2000,2000,0);  
        AcGePoint3dArray points;  
        points.append(p1);  
        points.append(p2);  
        points.append(p3);  
        points.append(p4);  

        AcDbSpline* as = new AcDbSpline(points);  
        LoadEntity(as);  
}  

////创建面域(把用直线创建的闭合图形,生成一个图形的对象)  
static void TESTregioncmd(){  
        ads_name ss;  
        ////提示用户选择对象  
        int rt = acedSSGet(NULL,NULL,NULL,NULL,ss);  
        AcDbObjectIdArray ids;  

        if(rt == RTNORM){  
                long len;  
                ////获得对象个数  
                acedSSLength(ss,&len);  
                for(int i = 0;i < len;i ++){  
                        ////先从对象中得到名字  
                        ads_name ent;  
                        acedSSName(ss,i,ent);  

                        ////再从名字中取出ID  
                        AcDbObjectId objId;  
                        acdbGetObjectId(objId,ent);  
                        ids.append(objId);  
                }  

        }  
        acedSSFree(ss);  
        ////得到objId数组之后,开始画区域  
        CreateRegion(ids);  
}  

////绘制面域  
static AcDbObjectIdArray  CreateRegion(AcDbObjectIdArray ids){  
        AcDbObjectIdArray regionIds;  
        AcDbVoidPtrArray curves;  
        AcDbVoidPtrArray regions;  
        AcDbEntity* pEnt;  
        AcDbRegion* pRegion;  

        for(int i = 0;i < ids.length();i ++){  

                acdbOpenAcDbEntity(pEnt,ids.at(i),AcDb::kForRead);  

                if(pEnt->isKindOf(AcDbCurve::desc())){  

                        curves.append(static_cast<void*>(pEnt));  
                }  
        }  

        Acad::ErrorStatus es = AcDbRegion::createFromCurves(curves,regions);  
        if(es == Acad::eOk){  

                for(int i = 0;i < regions.length();i ++){  

                        pRegion = static_cast<AcDbRegion*>(regions[i]);  
                        pRegion->setDatabaseDefaults();  
                        AcDbObjectId regionId = LoadEntity(pRegion);  
                        regionIds.append(regionId);  
                }  
                CString tipStr ;  
                tipStr.Format(_T("\n已成功创建面域:%d个"),regions.length());  

                acutPrintf(tipStr);  
        }  
        else{  
                for(int i = 0;i < regions.length();i ++){  

                        delete (AcRxObject*)regions[i];  
                }  
        }  
        for(int i = 0;i < ids.length();i ++){  

                pEnt = static_cast<AcDbEntity*>(curves[i]);  
                pEnt->close();  
        }  
        return regionIds;  
}  

//绘制文字===================  
static void TESTtextcmd(){  

        AcGePoint3d ptInsert(0,400,0);  

        AcDbMText* pMText = new AcDbMText();  

        ////设置多行文字特性  

        pMText->setContents(_T("hello!!"));  
        pMText->setLocation(ptInsert);  
        pMText->setTextHeight(1000);  
        pMText->setWidth(1000);  
        pMText->setAttachment(AcDbMText::kBottomLeft);  

        LoadEntity(pMText);  
}  


[it618postdisplay>0]
////创建填充======================  
static void TESThatchcmd(){  

        ////提示用户选择填充边界  
        ads_name ss;  
        int rt = acedSSGet(NULL,NULL,NULL,NULL,ss);  
        AcDbObjectIdArray objIds;  
        if(rt == RTNORM){  
                long len;  
                acedSSLength(ss,&len);  
                for(int i = 0;i < len;i ++){  
                        ads_name ent;  
                        acedSSName(ss,i,ent);  
                        AcDbObjectId objId;  
                        acdbGetObjectId(objId,ent);  
                        objIds.append(objId);  
                }  
        }  
        acedSSFree(ss);  
        ////选择完毕,绘制填充  
        Acad::ErrorStatus es;  
        AcDbHatch* pHatch = new AcDbHatch();  
        ////选择填充平面  
        AcGeVector3d normal(0,0,1);  
        pHatch->setNormal(normal);  
        pHatch->setElevation(0);  

        ////设置关联性  
        pHatch->setAssociative(true);  

        ////设置填充图案  
        pHatch->setPattern(AcDbHatch::kPreDefined,_T(/*"SOLID"*/"ANSI31"));  

        ////设置填充角度  
        pHatch->setPatternAngle(45);  
        ////设置填充边界  

        es=pHatch->appendLoop(AcDbHatch::kExternal,objIds);  

        ////显示填充对象  

        es=pHatch->evaluateHatch();  
        LoadEntity(pHatch);  
}  

[/it618postdisplay]

//获得一层的所有对象,变色===============  
static void TESTgetlayerobjcmd(){  
        AcDbLayerTable *pLayerTbl;  
        acdbHostApplicationServices()->workingDatabase()->getSymbolTable(  
                pLayerTbl,AcDb::kForRead);  
        if(!pLayerTbl->has(_T("测试"))){  
                acutPrintf(_T("\n当前图形未包含'测试'图层"));  
                pLayerTbl->close();  
                return;  
        }  
        AcDbObjectId layerId;  
        pLayerTbl->getAt(_T("测试"),layerId);  
        pLayerTbl->close();  

        ////获得当前数据库的块表  
        AcDbBlockTable* pBlkTbl;  
        acdbHostApplicationServices()->workingDatabase()->getBlockTable(  
                pBlkTbl,AcDb::kForRead);  
        ////获得模型空间的块表记录  
        AcDbBlockTableRecord* pBlkTblRcd;  
        pBlkTbl->getAt(ACDB_MODEL_SPACE,pBlkTblRcd,AcDb::kForRead);  
        pBlkTbl->close();  

        ////创建块表记录遍历器  
        AcDbBlockTableRecordIterator* pIter;  
        pBlkTblRcd->newIterator(pIter);  
        AcDbEntity* pEnt;  
        for(pIter->start();!pIter->done();pIter->step()){  

                pIter->getEntity(pEnt,AcDb::kForWrite);  
                if(pEnt->layerId() == layerId){  

                        /*AcDbLine* pLine = AcDbLine::cast(pEnt); 
                        if(pLine != NULL){*/  

                        pEnt->setColorIndex(1);  
                        //}  
                }  
                pEnt->close();  
        }  
        delete pIter;  
        pBlkTblRcd->close();  
}    

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 769个

财富等级: 财运亨通

发表于 2016-10-24 18:05:25 | 显示全部楼层
回的人少,我来小顶一下
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2016-11-28 17:21:24 | 显示全部楼层
正需要,支持楼主大人了!适合初学的内容,支持
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 187个

财富等级: 日进斗金

发表于 2016-12-6 16:01:05 | 显示全部楼层
努力学习代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2016-12-7 16:35:19 | 显示全部楼层
顶 好东西 灰常感谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2017-3-19 08:52:38 | 显示全部楼层
收藏备用 谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2017-9-6 14:48:09 | 显示全部楼层
非常感谢楼主
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2017-9-6 16:37:18 | 显示全部楼层
学习学习学习学习
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2409个

财富等级: 金玉满堂

发表于 2017-9-9 21:45:31 | 显示全部楼层
学习!!!!!!!!!!!!!!!!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

发表于 2017-9-15 14:16:42 | 显示全部楼层
非常感谢楼主
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2017-12-22 15:57:24 | 显示全部楼层
谢谢分享,会分享的人都好人啊 !!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 33个

财富等级: 招财进宝

发表于 2017-12-28 19:14:34 | 显示全部楼层
看看看看看看看看看看
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2018-1-1 19:48:59 | 显示全部楼层
学习学习,学习学习
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-1-11 08:46:49 | 显示全部楼层
常用的基本都在这了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2018-1-30 15:32:01 | 显示全部楼层
学习学习。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-5-29 15:01 , Processed in 0.425880 second(s), 55 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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