找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1042|回复: 1

[求助] region生成的边界缺少一段

[复制链接]

已领礼包: 58个

财富等级: 招财进宝

发表于 2021-6-16 08:56:32 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 brainstorm 于 2021-6-16 14:23 编辑
  1. //为什么regionregion生成的边界会缺少一段
复制代码

  1. [CommandMethod("testregion")]
  2.         public void RegionSubstr()
  3.         {
  4.             var doc = Application.DocumentManager.MdiActiveDocument;
  5.             var db = doc.Database;
  6.             var ed = doc.Editor;

  7.             //var ent1 = ed.GetEntity("\nSelect Curve");
  8.             //建立选择集过滤
  9.             ResultBuffer tv = new ResultBuffer();                                tv.Add(new TypedValue(0, "*line"));
  10.             SelectionFilter fil = new SelectionFilter(tv);
  11.             PromptSelectionOptions pso = new PromptSelectionOptions();
  12.             pso.MessageForAdding = "\n select curves:";
  13.             PromptSelectionResult psr = ed.GetSelection(pso, fil);

  14.             if (psr.Status != PromptStatus.OK)
  15.             {
  16.                 ed.WriteMessage("\n selection is null!");
  17.                 return;
  18.             }
  19.             PromptEntityResult ent = ed.GetEntity("\nselect curve to be substracted:");

  20.             using (var tr = db.TransactionManager.StartTransaction())
  21.             {
  22.                 BlockTableRecord btr = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
  23.                 ObjectId oId = ent.ObjectId;
  24.                 Entity entity2 = tr.GetObject(oId, OpenMode.ForWrite) as Entity;
  25.                 var curveSegments = new DBObjectCollection();
  26.                 foreach (var id in psr.Value.GetObjectIds())
  27.                 {
  28.                     curveSegments.Add(tr.GetObject(id, OpenMode.ForRead) as Entity);
  29.                 }

  30.                 var regions = Region.CreateFromCurves(curveSegments);
  31.                 var region1 = regions[0] as Region;
  32.                 var region2 = Region.CreateFromCurves(new DBObjectCollection { entity2 })[0] as Region;

  33.                 if (region1 != null)
  34.                 {
  35.                     region1.BooleanOperation(BooleanOperationType.BoolSubtract, region2);

  36.                     Brep brep = new Brep(region1);
  37.                     BrepFaceCollection faces = brep.Faces;
  38.                     BoundaryLoop boundaryLoop = faces.First().Loops.First();
  39.                     Edge[] boundaryEdges = boundaryLoop.Edges.ToArray();

  40.                     Curve3d[] cv3 = new Curve3d[boundaryEdges.Count()];
  41.                     for (int i = 0; i < boundaryEdges.Count(); i++)
  42.                     {
  43.                         cv3 = (boundaryEdges.Curve as ExternalCurve3d).NativeCurve;
  44.                     }
  45.                     CompositeCurve3d cc3 = new CompositeCurve3d(cv3);
  46.                     var newCv1 = Curve.CreateFromGeCurve(cc3);
  47.                     newCv1.ColorIndex = 1;
  48.                     btr.AppendEntity(newCv1);
  49.                     tr.AddNewlyCreatedDBObject(newCv1, true);
  50.                 }
  51.                 tr.Commit();
  52.             }
  53.         }


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-18 21:03 , Processed in 0.386079 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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