找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1361|回复: 6

[每日一码] C#生成关联填充的方法

[复制链接]

已领礼包: 1个

财富等级: 恭喜发财

发表于 2017-5-29 15:00:01 | 显示全部楼层 |阅读模式

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

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

×
  1. using System;
  2. using Autodesk.AutoCAD.DatabaseServices;
  3. using Autodesk.AutoCAD.Geometry;
  4. using Autodesk.AutoCAD.Runtime;
  5. namespace AssociativeHatch
  6. {
  7.     public class Commands
  8.     {
  9.         [CommandMethod("Test")]
  10.         public void AssociativeHatch()
  11.         {
  12.             Database db = HostApplicationServices.WorkingDatabase;
  13.             Line lineEnt1 = new Line(new Point3d(0, 0, 0), new Point3d(1000, 0, 0));
  14.             Line lineEnt2 = new Line(new Point3d(1000, 0, 0), new Point3d(800, 600, 0));
  15.             Line lineEnt3 = new Line(new Point3d(800, 600, 0), new Point3d(0, 0, 0));
  16.             Circle circleEnt = new Circle(new Point3d(500, 200, 0), Vector3d.ZAxis, 100);
  17.             ObjectId loopId1 = AppendEntity(lineEnt1);
  18.             ObjectId loopId2 = AppendEntity(lineEnt2);
  19.             ObjectId loopId3 = AppendEntity(lineEnt3);
  20.             ObjectId loopId4 = AppendEntity(circleEnt);
  21.             ObjectIdCollection loops1 = new ObjectIdCollection();
  22.             loops1.Add(loopId1);
  23.             loops1.Add(loopId2);
  24.             loops1.Add(loopId3);
  25.             ObjectIdCollection loops2 = new ObjectIdCollection();
  26.             loops2.Add(loopId4);
  27.             ObjectIdCollection[] loops = new ObjectIdCollection[2];
  28.             loops.SetValue(loops1, 0);
  29.             loops.SetValue(loops2, 1);
  30.             Hatch hatchEnt;
  31.             ObjectId hatEntId = AddHatch(out hatchEnt, 0, "ANGLE", Math.PI / 3, 10);
  32.             using (Transaction tr = db.TransactionManager.StartTransaction())
  33.             {
  34.                 hatchEnt = (Hatch)tr.GetObject(hatEntId, OpenMode.ForWrite);
  35.                 hatchEnt.Associative = true;
  36.                 for (int i = 0; i < loops.Length; i++)
  37.                 {
  38.                     hatchEnt.AppendLoop(HatchLoopTypes.Default, loops);
  39.                 }
  40.                 tr.Commit();
  41.             }
  42.         }
  43.         private ObjectId AddHatch(out Hatch hatchEnt, HatchPatternType patType,
  44.             String patName, Double patternAngle, Double patternScale)
  45.         {
  46.             Hatch ent = new Hatch();
  47.             ent.HatchObjectType = HatchObjectType.HatchObject;
  48.             Database db = HostApplicationServices.WorkingDatabase;
  49.             using (Transaction trans = db.TransactionManager.StartTransaction())
  50.             {
  51.                 BlockTable bt = (BlockTable)trans.GetObject
  52.                     (db.BlockTableId, OpenMode.ForRead);
  53.                 BlockTableRecord btr = (BlockTableRecord)trans.GetObject
  54.                     (bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
  55.                 ObjectId entId = btr.AppendEntity(ent);
  56.                 trans.AddNewlyCreatedDBObject(ent, true);
  57.                 ent.SetDatabaseDefaults();
  58.                 ent.PatternAngle = patternAngle;
  59.                 ent.PatternScale = patternScale;
  60.                 ent.SetHatchPattern(patType, patName);
  61.                 hatchEnt = ent;
  62.                 trans.Commit();
  63.                 return entId;
  64.             }
  65.         }
  66.         private ObjectId AppendEntity(Entity ent)
  67.         {
  68.             Database db = HostApplicationServices.WorkingDatabase;
  69.             ObjectId entId;
  70.             using (Transaction trans = db.TransactionManager.StartTransaction())
  71.             {
  72.                 BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId,
  73.                     OpenMode.ForRead);
  74.                 BlockTableRecord btr = (BlockTableRecord)trans.GetObject
  75.                     (bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
  76.                 entId = btr.AppendEntity(ent);
  77.                 trans.AddNewlyCreatedDBObject(ent, true);
  78.                 trans.Commit();
  79.             }
  80.             return entId;
  81.         }
  82.     }
  83. }


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2019-6-6 08:30:28 | 显示全部楼层
进程外引用com,怎么实现图案填充,可以贴出代码吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 5295个

财富等级: 富甲天下

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

使用道具 举报

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

使用道具 举报

已领礼包: 7个

财富等级: 恭喜发财

发表于 2019-10-26 19:51:10 | 显示全部楼层
想问一下如果使用的不是自带的填充花纹,而是第三方的,填充的时候有时候回出错,您知道有什么解决办法吗,使用try-catch方法好像也不行
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 12:32 , Processed in 0.364474 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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