news 2026/1/3 9:57:49

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进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/23 17:26:06

【课程设计/毕业设计】基于SpringBoot的网球馆管理系统的设计与实现网球场地预订、课程报名【附源码、数据库、万字文档】

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

作者头像 李华
网站建设 2025/12/23 17:24:49

Open-AutoGLM插件选型难题终结者:3步判断哪个插件真正值得装

第一章&#xff1a;Open-AutoGLM需要安装插件在使用 Open-AutoGLM 框架前&#xff0c;必须正确安装其核心插件以启用自动化推理与模型调用功能。这些插件扩展了基础语言模型的能力&#xff0c;使其能够接入外部工具、执行代码并实现多步任务编排。环境准备 确保系统已安装 Pyth…

作者头像 李华
网站建设 2025/12/23 17:24:20

为什么顶尖团队都在用Open-AutoGLM?背后的技术优势终于曝光

第一章&#xff1a;Open-AutoGLM的起源与核心定位Open-AutoGLM 是一个开源的自动化通用语言模型&#xff08;General Language Model, GLM&#xff09;构建框架&#xff0c;旨在降低大模型开发门槛&#xff0c;提升从数据准备到模型部署的全流程效率。其诞生源于对现有NLP工具链…

作者头像 李华
网站建设 2025/12/23 17:23:37

爆肝整理!7 款渗透测试神器超详细教程,零基础入门到精通,收藏这一篇就够了

渗透测试工具是模拟对计算机系统、网络或 Web 应用程序的网络攻击的软件应用程序&#xff0c;它们的作用是在实际攻击者之前发现安全漏洞。它们可以作为系统的压力测试&#xff0c;揭示哪些区域可能会受到真正的威胁。 本文我将介绍七款最佳的渗透测试工具。 01 Kali Linux …

作者头像 李华
网站建设 2025/12/23 17:19:43

ISTA 1B标准深度解读:大件商品运输包装的“安全通行证”

做大件商品电商、工业设备外贸或大型家电供应链的朋友&#xff0c;大概率都踩过运输破损的坑——一台冰箱运输中磕碰掉漆&#xff0c;一台工业机床减震失效&#xff0c;轻则客户拒收索赔&#xff0c;重则直接造成几千上万元的损失。其实解决这个问题的关键&#xff0c;就是读懂…

作者头像 李华