当前位置: 首页 > news >正文

C#如何获取CAD的对象并修改

活不多说,直接上代码!!!
1、获取所有对象

publicclassEntityGetter{publicstaticvoidGetAllEntities(){Documentdoc=Application.DocumentManager.MdiActiveDocument;Databasedb=doc.Database;Editored=doc.Editor;using(Transactiontrans=db.TransactionManager.StartTransaction()){try{// 获取模型空间BlockTablebt=trans.GetObject(db.BlockTableId,OpenMode.ForRead)asBlockTable;BlockTableRecordbtr=trans.GetObject(bt[BlockTableRecord.ModelSpace],OpenMode.ForRead)asBlockTableRecord;// 遍历所有实体foreach(ObjectIdobjIdinbtr){Entityent=trans.GetObject(objId,OpenMode.ForRead)asEntity;if(entisCircle){Circlecircle=entasCircle;ed.WriteMessage($"\n找到圆: 半径 ={circle.Radius}");}elseif(entisLine){Lineline=entasLine;ed.WriteMessage($"\n找到直线: 长度 ={line.Length}");}}}catch(Exceptionex){ed.WriteMessage($"\n错误:{ex.Message}");}trans.Commit();}}}

2、获取特定类型的对象

publicclassEntitySelector{// 获取圆形对象publicstaticList<Circle>GetCircles(){List<Circle>circles=newList<Circle>();Documentdoc=Application.DocumentManager.MdiActiveDocument;Databasedb=doc.Database;Editored=doc.Editor;// 创建类型过滤器TypedValue[]filterList=newTypedValue[]{newTypedValue((int)DxfCode.Start,"CIRCLE")};SelectionFilterfilter=newSelectionFilter(filterList);PromptSelectionResultselRes=ed.SelectAll(filter);if(selRes.Status==PromptStatus.OK){using(Transactiontrans=db.TransactionManager.StartTransaction()){SelectionSetss=selRes.Value;foreach(SelectedObjectselObjinss){Circlecircle=trans.GetObject(selObj.ObjectId,OpenMode.ForRead)asCircle;if(circle!=null){circles.Add(circle);}}trans.Commit();}}returncircles;}// 获取直线对象publicstaticList<Line>GetLines(){List<Line>lines=newList<Line>();Documentdoc=Application.DocumentManager.MdiActiveDocument;Databasedb=doc.Database;Editored=doc.Editor;TypedValue[]filterList=newTypedValue[]{newTypedValue((int)DxfCode.Start,"LINE")};SelectionFilterfilter=newSelectionFilter(filterList);PromptSelectionResultselRes=ed.SelectAll(filter);if(selRes.Status==PromptStatus.OK){using(Transactiontrans=db.TransactionManager.StartTransaction()){SelectionSetss=selRes.Value;foreach(SelectedObjectselObjinss){Lineline=trans.GetObject(selObj.ObjectId,OpenMode.ForRead)asLine;if(line!=null){lines.Add(line);}}trans.Commit();}}returnlines;}}

3、获取对象属性

publicclassEntityProperties{publicstaticvoidGetCircleProperties(Circlecircle){// 基本属性Point3dcenter=circle.Center;doubleradius=circle.Radius;doublearea=circle.Area;doublecircumference=circle.Circumference;// 图层信息stringlayer=circle.Layer;// 颜色信息Colorcolor=circle.Color;// 线型信息stringlineType=circle.Linetype;Documentdoc=Application.DocumentManager.MdiActiveDocument;Editored=doc.Editor;ed.WriteMessage($"\n圆的属性:");ed.WriteMessage($"\n中心点: X={center.X}, Y={center.Y}, Z={center.Z}");ed.WriteMessage($"\n半径:{radius}");ed.WriteMessage($"\n面积:{area}");ed.WriteMessage($"\n周长:{circumference}");ed.WriteMessage($"\n图层:{layer}");ed.WriteMessage($"\n颜色:{color.ToString()}");ed.WriteMessage($"\n线型:{lineType}");}publicstaticvoidGetLineProperties(Lineline){// 基本属性Point3dstartPoint=line.StartPoint;Point3dendPoint=line.EndPoint;doublelength=line.Length;Vector3ddirection=line.Delta;Documentdoc=Application.DocumentManager.MdiActiveDocument;Editored=doc.Editor;ed.WriteMessage($"\n直线的属性:");ed.WriteMessage($"\n起点: X={startPoint.X}, Y={startPoint.Y}, Z={startPoint.Z}");ed.WriteMessage($"\n终点: X={endPoint.X}, Y={endPoint.Y}, Z={endPoint.Z}");ed.WriteMessage($"\n长度:{length}");ed.WriteMessage($"\n方向: X={direction.X}, Y={direction.Y}, Z={direction.Z}");}}

4、修改对象属性

publicclassEntityModifier{publicstaticvoidModifyCircle(Circlecircle){Documentdoc=Application.DocumentManager.MdiActiveDocument;Databasedb=doc.Database;using(Transactiontrans=db.TransactionManager.StartTransaction()){try{// 打开对象进行写操作CirclecircleToModify=trans.GetObject(circle.ObjectId,OpenMode.ForWrite)asCircle;// 修改属性circleToModify.Radius*=2;// 双倍半径circleToModify.ColorIndex=1;// 改变颜色trans.Commit();}catch(Exceptionex){doc.Editor.WriteMessage($"\n错误:{ex.Message}");trans.Abort();}}}publicstaticvoidModifyLine(Lineline){Documentdoc=Application.DocumentManager.MdiActiveDocument;Databasedb=doc.Database;using(Transactiontrans=db.TransactionManager.StartTransaction()){try{LinelineToModify=trans.GetObject(line.ObjectId,OpenMode.ForWrite)asLine;// 延长直线lineToModify.EndPoint=newPoint3d(lineToModify.EndPoint.X*2,lineToModify.EndPoint.Y*2,lineToModify.EndPoint.Z);trans.Commit();}catch(Exceptionex){doc.Editor.WriteMessage($"\n错误:{ex.Message}");trans.Abort();}}}}

5、CAD基本对象

publicclassBasicEntities{// 2D基本图形publicstaticreadonlystring[]Basic2D={"Line",// 直线"Circle",// 圆"Arc",// 圆弧"Polyline",// 多段线"Ellipse",// 椭圆"Spline",// 样条曲线"Point",// 点"Ray",// 射线"XLine",// 构造线"Text",// 文字"MText",// 多行文字"Rectangle",// 矩形"Hatch",// 填充"Region"// 面域};// 3D基本图形publicstaticreadonlystring[]Basic3D={"Solid",// 3D实体"Surface",// 曲面"Mesh",// 网格"Body",// 体"Face",// 3D面"PolyFaceMesh",// 多面网格"SubDMesh"// 细分网格};}

6、CAD标注类对象

publicclassDimensionEntities{publicstaticreadonlystring[]Dimensions={"AlignedDimension",// 对齐标注"RotatedDimension",// 旋转标注"DiametricDimension",// 直径标注"RadialDimension",// 半径标注"Angular2LineDimension",// 角度标注"Angular3PointDimension",// 三点角度标注"OrdinateDimension",// 坐标标注"ArcDimension",// 弧长标注"Leader",// 引线"MLeader",// 多重引线"Tolerance"// 公差};}

7、块和参照

publicclassReferenceEntities{publicstaticreadonlystring[]References={"BlockReference",// 块参照"MInsertBlock",// 阵列块"ExternalReference",// 外部参照"RasterImage",// 光栅图像"OLE2Frame",// OLE对象"Viewport",// 视口"UnderlayReference"// 底图参照};}

8、表格和布局对象

publicclassTableEntities{publicstaticreadonlystring[]Tables={"Table",// 表格"Layout",// 布局"PlotSettings",// 打印设置"Group",// 组"Dictionary",// 字典"Layer",// 图层"LayerFilter",// 图层过滤器"LayerGroup",// 图层组"PlotStyleName",// 打印样式"View",// 视图"UCS",// 用户坐标系"Section"// 剖面};}

9、注释对象

publicclassAnnotationEntities{publicstaticreadonlystring[]Annotations={"MText",// 多行文字"Text",// 单行文字"AttributeDefinition",// 属性定义"Attribute",// 属性"DBPoint",// 数据库点"Wipeout",// 遮罩"Shape",// 形状"Mline",// 多线"Trace",// 痕迹线"Arc_Dimension",// 弧度标注"Leader",// 引线"Tolerance"// 公差};}

10、特殊对象

publicclassSpecialEntities{publicstaticreadonlystring[]Special={"Light",// 灯光"Camera",// 相机"Material",// 材质"Sun",// 太阳"GeoMap",// 地理位置"Section",// 剖面"SectionSettings",// 剖面设置"DetailViewStyle",// 详图视图样式"SectionViewStyle",// 剖面视图样式"TableStyle",// 表格样式"MLeaderStyle",// 多重引线样式"DimStyle",// 标注样式"TextStyle",// 文字样式"UCSTableRecord",// UCS表记录"ViewportTableRecord"// 视口表记录};}

11、获取对象示例

publicclassEntityHelper{publicstaticEntityGetEntity(ObjectIdid){Documentdoc=Application.DocumentManager.MdiActiveDocument;Databasedb=doc.Database;using(Transactiontrans=db.TransactionManager.StartTransaction()){Entityent=trans.GetObject(id,OpenMode.ForRead)asEntity;if(ent!=null){// 根据对象类型进行处理if(entisLine){Lineline=entasLine;// 处理直线}elseif(entisCircle){Circlecircle=entasCircle;// 处理圆}elseif(entisPolyline){Polylinepline=entasPolyline;// 处理多段线}// ... 其他类型的处理}trans.Commit();returnent;}}}
http://www.jsqmd.com/news/461643/

相关文章:

  • Playwright MCP浏览器自动化指南原创
  • 小型油脂精炼设备价格多少,为你揭秘个性化定制厂家行情 - 工业推荐榜
  • 一行 instanceof 干掉“先判后转”!JDK 16+ 模式匹配让类型检查优雅到飞起
  • 基于Kriging元模型的虚拟电厂能量管理与动态定价策略研究:一种主从博弈均衡算法的实践与应用
  • matlab随机车流模拟程序 车辆荷载模拟 参数包括车型,车重,车道,车距,抽样方法是蒙特卡洛...
  • 计算机毕业设计springboot个人博客系统 基于SpringBoot的在线博客内容发布与管理平台 基于Java的个人网络日志系统设计与开发
  • 水性分散剂:哪家强且优?
  • GPU算力租赁火了!中小企业低成本玩转AI
  • Win11输入法如何还原到任务栏显示
  • 一文读懂:充电器充电线混用指南(数据线vs充电线、快充原理、手机笔记本等安全且健康的充电方式)
  • Matlab排列熵程序详解:含注释,轻松掌握算法逻辑
  • 外部切面不需要什么前置通知、后置通知、异常通知和环绕通知,只需提供一个同名方法就可以了。之所以可以这么简洁,是因为使用了洋葱圈模型。 ...
  • 汇率接口api实时获取人民币及多币种行情数据
  • 观测通道锁定的连续动力学:基于MHCR的量子测量量化模型
  • 一键暂停更新,轻松掌控电脑节奏
  • Windows 绿色软件部署指南:从压缩包到开始菜单
  • MPK(Mirage Persistent Kernel)源码笔记()--- 多层结构化图模型
  • 一次误删差点让创业公司停摆?这家团队靠「松鼠备份」30秒救回核心代码
  • 用 OpenClaw 实现小红书自动发帖
  • arrays-with-equal-boundary-and-interior-sum/ 给你一个整数数组 capacity。 Cr ...
  • CSP-J/S 第一轮游记
  • 山东一卡通的回收指南:三分钟掌握最简单的回收方法! - 团团收购物卡回收
  • heus控制台中创建工作区 .保存工作区配置 点击AWS Prometheus工作区ID进入详情,将提取/收集 中的配置保存为pro ...
  • 2026年3月超实用远程指南!ToDesk、向日葵、RayLink等全面评测,帮你精准避坑选到宝!
  • 2026年山西地区创驰蓝天太阳能路灯光色和质量怎么样,客户认可度排名 - 工业品网
  • Flutter 三方库 test_api 的鸿蒙化适配指南 - 实现具备底层测试驱动与自定义匹配器扩展的质量基石架构、支持端侧测试骨架深度定制实战
  • Flutter 组件 env_reader 适配鸿蒙 HarmonyOS 实战:高性能环境变量治理,构建敏感资产管理与全场景配置一致性治理架构
  • 富 格 林:谨防交易滋生冻结欺诈
  • 化工厂气体泄漏怎么用AI检测?30张图3D重建气体泄漏场景——美国国家实验室NeRF新研究
  • 三小时玩转Cruise仿真