Author Topic: why segment of curves created by region boundary is missing  (Read 1216 times)

0 Members and 1 Guest are viewing this topic.

brainstormcn

  • Mosquito
  • Posts: 2
Code - C#: [Select]
  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.  
  8.             //var ent1 = ed.GetEntity("\nSelect Curve");
  9.             //建立选择集过滤
  10.             TypedValueList tv = new TypedValueList();
  11.             tv.Add(0, "*line");
  12.             SelectionFilter fil = new SelectionFilter(tv);
  13.             PromptSelectionOptions pso = new PromptSelectionOptions();
  14.             pso.MessageForAdding = "\n select curves:";
  15.             PromptSelectionResult psr = ed.GetSelection(pso, fil);
  16.  
  17.             if (psr.Status != PromptStatus.OK)
  18.             {
  19.                 ed.WriteMessage("\n selection is null!");
  20.                 return;
  21.             }
  22.             PromptEntityResult ent = ed.GetEntity("\nselect curve to be substracted:");
  23.  
  24.             using (var tr = db.TransactionManager.StartTransaction())
  25.             {
  26.                 BlockTableRecord btr = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
  27.                 ObjectId oId = ent.ObjectId;
  28.                 Entity entity2 = tr.GetObject(oId, OpenMode.ForWrite) as Entity;
  29.                 var curveSegments = new DBObjectCollection();
  30.                 foreach (var id in psr.Value.GetObjectIds())
  31.                 {
  32.                     curveSegments.Add(tr.GetObject(id, OpenMode.ForRead) as Entity);
  33.                 }
  34.  
  35.                 var regions = Region.CreateFromCurves(curveSegments);
  36.                 var region1 = regions[0] as Region;
  37.                 var region2 = Region.CreateFromCurves(new DBObjectCollection { entity2 })[0] as Region;
  38.  
  39.                 if (region1 != null)
  40.                 {
  41.                     region1.BooleanOperation(BooleanOperationType.BoolSubtract, region2);
  42.  
  43.                     Brep brep = new Brep(region1);
  44.                     BrepFaceCollection faces = brep.Faces;
  45.                     BoundaryLoop boundaryLoop = faces.First().Loops.First();
  46.                     Edge[] boundaryEdges = boundaryLoop.Edges.ToArray();
  47.  
  48.                     Curve3d[] cv3 = new Curve3d[boundaryEdges.Count()];
  49.                     for (int i = 0; i < boundaryEdges.Count(); i++)
  50.                     {
  51.                         cv3[i] = (boundaryEdges[i].Curve as ExternalCurve3d).NativeCurve;
  52.                     }
  53.                     CompositeCurve3d cc3 = new CompositeCurve3d(cv3);
  54.                     var newCv1 = Curve.CreateFromGeCurve(cc3);
  55.                     newCv1.ColorIndex = 1;
  56.                     btr.AppendEntity(newCv1);
  57.                     tr.AddNewlyCreatedDBObject(newCv1, true);
  58.                 }
  59.                 tr.Commit();
  60.             }
  61.         }
  62.  
« Last Edit: June 15, 2021, 09:12:50 PM by brainstormcn »