news 2026/4/17 18:19:23

CAD二次开发中直线的绘制、颜色、图层、线型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CAD二次开发中直线的绘制、颜色、图层、线型

Color.h

#pragma once class ModelSpace { public: //将实体添加到模型空间 static AcDbObjectId AddToModelSpace(AcDbEntity* pEnt); }; class CLine { public: //创建直线 static AcDbObjectId AddLine(const AcGePoint3d &ptStart, const AcGePoint3d &ptEnd); }; class Color { public: //改变对象颜色 static ErrorStatus ChangeColor(AcDbObjectId entId, Adesk::UInt16 colorIndex); }; class Layer { public: //改变对象图层 static void SetLayer(AcDbObjectId entId, const TCHAR* layerName); }; class LineType { public: //改变对象线型 static void SetLineType(AcDbObjectId entId, const TCHAR* linetype); }; class Demo { public: //加载、卸载和执行主函数 static void m_Init(); static void m_Unload(); static void m_Demo(); };

Color.cpp

#include "stdafx.h" #include "Color.h" #include <tchar.h> void Demo::m_Init() { acedRegCmds->addCommand(_T("g1"), _T("ChangeColor"), _T("测试"), ACRX_CMD_MODAL, Demo::m_Demo); } void Demo::m_Unload() { acedRegCmds->removeGroup(_T("g1")); } //将实体添加到模型空间 AcDbObjectId ModelSpace::AddToModelSpace(AcDbEntity* pEnt) { //检查输入参数的有效性 assert(pEnt); //获得当前图形数据库的块表 AcDbBlockTable* pBT1 = NULL; acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBT1, AcDb::kForRead); //获得模型空间对应的块表记录 AcDbBlockTableRecord* pBT1Rcd = NULL; pBT1->getAt(ACDB_MODEL_SPACE, pBT1Rcd, AcDb::kForWrite); pBT1->close(); //将实体添加到模型空间的快表记录中 AcDbObjectId lineId; Acad::ErrorStatus es = pBT1Rcd->appendAcDbEntity(lineId, pEnt); if (es != Acad::eOk) { pBT1Rcd->close(); delete pEnt; //添加失败时delete pEnt = NULL; return AcDbObjectId::kNull; } //关闭模型空间块表记录 pBT1Rcd->close(); pEnt->close(); return lineId; } AcDbObjectId CLine::AddLine(const AcGePoint3d& ptStart, const AcGePoint3d& ptEnd) { //创建直线实体 AcDbLine* pLine = new AcDbLine(ptStart, ptEnd); //将直线实体添加到模型空间中 return ModelSpace::AddToModelSpace(pLine); } //修改颜色,范围0~256 Acad::ErrorStatus Color::ChangeColor(AcDbObjectId entId, Adesk::UInt16 colorIndex) { //检测参数的有效性 assert(colorIndex >= 0 && colorIndex <= 256); AcDbEntity* pEntity; acdbOpenAcDbEntity(pEntity, entId, AcDb::kForWrite); pEntity->setColorIndex(colorIndex); pEntity->close(); return Acad::eOk; } //修改图层 void Layer::SetLayer(AcDbObjectId entId, const TCHAR* layerName) { AcDbEntity* pEnt = NULL; if (acdbOpenObject(pEnt, entId, AcDb::kForWrite) == Acad::eOk) { pEnt->setLayer(layerName); pEnt->close(); } } //修改线型 void LineType::SetLineType(AcDbObjectId entId, const TCHAR* linetype) { AcDbEntity* pEnt = NULL; if (acdbOpenObject(pEnt, entId, AcDb::kForWrite) == Acad::eOk) { pEnt->setLinetype(linetype); pEnt->close(); } } void Demo::m_Demo() { //创建直线 AcGePoint3d ptStart(0, 0, 0); AcGePoint3d ptEnd(100, 100, 0); AcDbObjectId lineId = CLine::AddLine(ptStart, ptEnd); //修改颜色为红色 Color::ChangeColor(lineId, 2); //修改实体的图层 Layer::SetLayer(lineId, TEXT("中心线")); //修改实体的线型 LineType::SetLineType(lineId, TEXT("HIDDEN")); }

仅供学习使用,还有很多不完善的地方,比如没有对返回值进行检查,未做兜底

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 7:36:13

Java毕设项目推荐-基于SpringBoot+vue的网球馆管理系统的设计与实现消费记录与储值余额查询【附源码+文档,调试定制服务】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/17 0:27:57

2025年智能运维平台选型指南:核心产品深度解析与对比

随着企业数字化转型进入深水区&#xff0c;业务架构日益复杂&#xff0c;云原生、信创国产化等趋势对IT运维提出了前所未有的挑战。传统的“烟囱式”运维工具各自为政&#xff0c;数据孤岛林立&#xff0c;已难以支撑业务的敏捷与稳定需求。一体化、平台化、数智化的运维平台&a…

作者头像 李华
网站建设 2026/4/17 5:00:49

必看!2026转行网络安全:薪资水平、工作内容与行业前景全解析

如果你计划在2026年转行到网络安全领域&#xff0c;以下是一些建议&#xff0c;可以帮助你顺利过渡并打下坚实的基础 1、薪资情况 初级职位&#xff08;0-3年经验&#xff09; 薪资范围&#xff1a;大约 8k-15k/月&#xff08;根据地区、公司规模和工作内容有所不同&#xff…

作者头像 李华
网站建设 2026/4/16 14:27:54

基于springboot的疫情期间高校人员管理系统论文

系统简介 计算机网络发展到现在已经好几十年了&#xff0c;在理论上面已经有了很丰富的基础&#xff0c;并且在现实生活中也到处都在使用&#xff0c;可以说&#xff0c;经过几十年的发展&#xff0c;互联网技术已经把地域信息的隔阂给消除了&#xff0c;让整个世界都可以即时…

作者头像 李华