AcGeVector3d是点阵的集合,通过等分点的差集得到。
新的点可以通过点与点阵相差得到。

大气象

public:

// - ArxProject2.partLine command (do not rename)
    static void ArxProject2partLine(void)
    {
        // Add your code for command ArxProject2.partLine here
        ads_name entName;
        ads_point pt;
        acedEntSel( _T("\n选择:"),entName,pt);//得到选中的实体

AcDbObjectId ObjId;//得到实体ID
        
        if( acdbGetObjectId(ObjId,entName) != Acad::eOk )//如果没有选中的实体则返回
        {
            acutPrintf( _T("\nno"));
            return;
        }

AcDbEntity* pEnt;//得到实体
        if( acdbOpenObject(pEnt,ObjId,AcDb::kForRead) == Acad::eOk)
        {
            acutPrintf( _T("\nok"));
            AcDbLine* pLine = (AcDbLine* )pEnt;//强制转换
            AcGePoint3d ptStart = pLine->startPoint();//得到起点
            AcGePoint3d ptEnd = pLine->endPoint();
            pEnt->close();

//根据点和线的方向生成点组,绘制线段
            int nPart = 5;//五等分
            AcGeVector3d Vect = (ptEnd - ptStart)/nPart;//矩阵,点与点的差集平分可得到
            for (int n=0; n<nPart; n++)
            {
                AcDbObjectId ObjIdNew;
                MakeLine(ptStart+n*Vect,ptStart+(n+1)*Vect,ObjIdNew);//等分线段的方法
            }

//将选中的线段删除,
            if( acdbOpenObject(pEnt,ObjId,AcDb::kForWrite) == Acad::eOk )
            {
                pEnt->erase();
                pEnt->close();
            }
        }
    }

//将实体添加到数据库
    //cad中的实体最终都要添加到数据库中才能被显示(图纸其实是一个数据库格式的),所以它的作用就是添加实体到数据库中
    static Acad::ErrorStatus AddToDb(AcDbEntity* ent, AcDbObjectId& objId)
    {    
        Acad::ErrorStatus      es;
        AcDbBlockTable*        pBlockTable;
        AcDbBlockTableRecord*  pSpaceRecord;

if ((es = acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable, AcDb::kForRead))
            != Acad::eOk) {
                return es;
        }

if ((es = pBlockTable->getAt(ACDB_MODEL_SPACE, 
            pSpaceRecord,
            AcDb::kForWrite)) != Acad::eOk) {
                return es;
        }

if ((es = pBlockTable->close()) != Acad::eOk) {
            return es;
        }
        if ((es = pSpaceRecord->appendAcDbEntity(objId, ent)) != Acad::eOk) {
            return es;
        }

return pSpaceRecord->close();

}
    private://画线函数
        static void MakeLine(AcGePoint3d ptStart,AcGePoint3d ptEnd,AcDbObjectId lineId)
        {
            AcDbLine *pLine = new AcDbLine(ptStart,ptEnd);
            if(AddToDb(pLine,lineId)!=Acad::eOk)//传入指针,传出id
                AfxMessageBox( _T("加入实体到数据库失败!"));
            pLine->close();
        }

另外是几个CAD用法:
1.移动命令的使用
输入m然后选择线段,或者线段的端点,就出现移动的辅助线。
2.ap可以加载也可以卸载,选中要卸载的。

转载于:https://www.cnblogs.com/greatverve/archive/2010/06/12/cad-study-4.html

CAD二次开发学习笔记四(得到选中的实体,修改实体,如等分线段)相关推荐

  1. 基于C#的中望CAD二次开发学习笔记(1)环境测试

    目录 前言 一.ZRXSDK的安装使用 二.创建项目 三.编写环境测试代码 四.在ZWCAD中测试 参考资料 总结 前言 作为一个设计院搬砖人,和各种CAD打交道是必不可少的.当然,其中最为正统的是A ...

  2. 引用:基于C#的中望CAD二次开发学习笔记

    目录 前言 一.ZRXSDK的安装使用 二.创建项目 三.编写环境测试代码 四.在ZWCAD中测试 参考资料 总结 前言 作为一个设计院搬砖人,和各种CAD打交道是必不可少的.当然,其中最为正统的是A ...

  3. C#进行CAD二次开发学习笔记--02

    目录 Editor 拖动类EntityJig 选择集 Editor 在C#进行CAD二次开发时,Editor类是一个特别有用的类.它提供了大量常用的接口函数,比如: // 拖动相关接口 public ...

  4. C#进行CAD二次开发学习笔记-01

    一些基础知识 需要引用CAD的库文件 常用接口和类 与C++ ---- ObjectArx库的一些区别 需要引用CAD的库文件 accoremad.dll acdbmgd.dll acmgd.dll ...

  5. CAD二次开发学习笔记五(在ObjectARX中使用MFC)

    要实现的功能是: 执行ArxModal命令,弹出如图所示对话框 选择点,则得到点坐标,选择角度则得到角度值. 步骤一: 新建基于MFC的ObjectArx项目, 参考:http://www.cnblo ...

  6. CAD二次开发学习笔记二(创建一个对话框)

    打开资源视图->右击->添加资源->Dialog 双击对话框,弹出MFC类向导,输入类名FirstClass, 确定,创建对话框类.FirstClass.h与FirstClass.c ...

  7. cad二次开发 java_基于.NET的CAD二次开发学习笔记一:CAD开发入门

    1.AutoCAD .NET API由不同的DLL文件组成,它们提供用于访问图形文件或AutoCAD应用程序的包含丰富的类.结构.方法和事件.每一个DLL文件都定义不同的使用基于功能的库组织组件的命名 ...

  8. Polyworks脚本开发学习笔记(四)-利用FILE IMPORT进行数据导入及对齐

    Polyworks脚本开发学习笔记(四)-利用FILE IMPORT进行数据导入及对齐 导入参考及数据 FILE IMPORT_REFERENCE导入参考的CAD文件如igs格式 括号内参数分别为(导 ...

  9. Revit二次开发学习笔记

    Revit二次开发学习笔记1 20220314: 概念:Application与Document 接口函数:IExternalCommand.ActiveView与Selection 20220316 ...

最新文章

  1. 布隆过滤器 redis_使用基于 Redis 的 Java 布隆过滤器
  2. eclipse 设定source folder
  3. R语言画图功能到底有多厉害,看看就知道了
  4. Oracle数据库的impdp导入操作以及dba_directories使用方法
  5. 导入Scrapy 项目报错:no module named scrapy
  6. Win7如何快速打开命令提示符
  7. 搞java不细心_Java 2 (基础总结)
  8. 有计算机信号专业吗,计算机医学图像及信号处理
  9. tomcat-maven插件热部署(简洁版)
  10. 如何整一个厉害的产品slogan?
  11. 【BZOJ3942】Censoring [KMP]
  12. 搭建自已的聊天服务器Rocket.Chat
  13. 隔离式DC-DC变换器市场现状及未来发展趋势
  14. Matlab绘制散点图(scatter函数)
  15. Python爬取某境外网站漫画,心血来潮,爬之
  16. linux操作系统原理与应用.第2版 陈莉君 pdf
  17. 个人开发者做一款Android App,android如何开发一款赚钱app
  18. 一个字等于几个字节,怎么确定机器是16/32/64位机器
  19. The environmenthvariable 'Path' seems to ave some paths containing characters (';', '' or ';;').
  20. 王晋康 - 终极爆炸 ▪ 王晋康科幻小说精选集3(2014年4月24日)

热门文章

  1. 经典排序算法之:堆排序
  2. 迅雷【任务配置文件错误,无法继续下载】解决方法
  3. MOD04_3K 产品使用方の法学习
  4. 再生龙备份linux文件多大,使用再生龙Clonezilla备份还原Linux系统
  5. 洛谷 P1129 矩阵游戏
  6. stm32 为什么有二个晶振
  7. 浙大计算机学硕453分,卷卷卷!2021计算机专业考研神仙打架:浙大最高分超450,人均400+?...
  8. oracle资产负债表重分类吗,​资产负债表一般是重分类还是不重分类
  9. AMD显卡无法安装驱动
  10. 数据防泄密产品实测对比