乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 130|回复: 5

Brep brep = new Brep(region );//出现异常

[复制链接]
LDJ

20

主题

35

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
115
发表于 2015-5-28 21:17:00 | 显示全部楼层 |阅读模式
using Autodesk..ApplicationServices;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Windows;
using Autodesk.AutoCAD.ViewModel;
using Autodesk.AutoCAD.Publishing;
using Autodesk.AutoCAD.PlottingServices;
using Autodesk.AutoCAD.LivePreview;
using Autodesk.AutoCAD.LayerManager;
using Autodesk.AutoCAD.Interop;
using Autodesk.AutoCAD.Internal;
using Autodesk.AutoCAD.GraphicsSystem;
using Autodesk.AutoCAD.GraphicsInterface;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.ComponentModel;
using Autodesk.AutoCAD.BoundaryRepresentation;
using Autodesk.AutoCAD.AcInfoCenterConn;

entity和entity2 为选中的相交的2个封闭polyline
using (Transaction tr = tm.StartTransaction())
                    {
                        BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
                        BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
                        Entity entity = tr.GetObject(entityID, OpenMode.ForWrite) as Entity;
                        //MgGeometry geometry = EntityToGeometryConverter.EntityToGeometry(entity);
                        Entity entity2 = tr.GetObject(entityID2, OpenMode.ForWrite) as Entity;
                        DBObjectCollection curveSegments = new DBObjectCollection();
                        curveSegments.Add(entity);
                        DBObjectCollection regions = Region.CreateFromCurves(curveSegments);  
                        Region region = regions[0] as Region;
                        DBObjectCollection curveSegments2 = new DBObjectCollection();
                        curveSegments2.Add(entity2);
                        DBObjectCollection regions2 = Region.CreateFromCurves(curveSegments);
                        Region region2 = regions2[0] as Region;
                        region.BooleanOperation(BooleanOperationType.BoolSubtract, region2);
                        DBObjectCollection cvs =new DBObjectCollection();
                        //region.Explode(cvs);
                     
                        ObjectId id1 = cadLayer.AddLayer("冲突图斑");
                       // Entity en = region as Entity;
                        Brep brep = new Brep(region );//出现异常
                        BrepEdgeCollection elp = brep.Edges;
                        foreach (Edge edge in elp)
                        {
                            NurbCurve3d c3d = edge.GetCurveAsNurb();
                            Curve cv = Curve.CreateFromGeCurve(c3d);
                            cv.ColorIndex = 1;
                            cv.Layer = "冲突图斑";
                            btr.AppendEntity(cv);
                            tr.AddNewlyCreatedDBObject(cv, true);
                  
                        }
                                               
                        tr.Commit();
                    }
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2015-5-28 21:38:00 | 显示全部楼层
最好先用简单的例子测试下 brep库用的人很少
回复

使用道具 举报

LDJ

20

主题

35

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
115
发表于 2015-5-28 21:49:00 | 显示全部楼层
这个是最简单的,选择2个entity 裁剪得到结果 解析
回复

使用道具 举报

0

主题

275

帖子

8

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
275
发表于 2015-5-29 09:35:00 | 显示全部楼层
  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.             var ent2 = ed.GetEntity("\nSelect Curve");
  9.             using (var tr = db.TransactionManager.StartTransaction())
  10.             {
  11.                 var btr = (BlockTableRecord) tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
  12.                 var id1 = ent1.ObjectId;
  13.                 var id2 = ent2.ObjectId;
  14.                 var entity = tr.GetObject(id1, OpenMode.ForWrite) as Entity;
  15.                 var entity2 = tr.GetObject(id2, OpenMode.ForWrite) as Entity;
  16.                 var curveSegments = new DBObjectCollection {entity,entity2};
  17.                 var regions = Region.CreateFromCurves(curveSegments);
  18.                 var region = regions[0] as Region;
  19.                 var region1 = regions[1] as Region ;
  20.                 if (region != null)
  21.                 {
  22.                     region.BooleanOperation(BooleanOperationType.BoolSubtract, region1);
  23.                     var brep = new Brep(region);  
  24.                     var elp = brep.Edges;
  25.                     foreach (var cv in elp.Select(edge => edge.GetCurveAsNurb()).Select(c3d => Curve.CreateFromGeCurve(c3d)))
  26.                     {
  27.                         cv.ColorIndex = 1;
  28.                         //cv.Layer = "冲突图斑";
  29.                         btr.AppendEntity(cv);
  30.                         tr.AddNewlyCreatedDBObject(cv, true);
  31.                     }
  32.                 }
  33.                 tr.Commit();
  34.             }
  35.         }
回复

使用道具 举报

23

主题

85

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
176
发表于 2021-6-15 14:42:00 | 显示全部楼层
为什么用edge.curve 得到的曲线 不能用createfromgecurve 生成db曲线呢
回复

使用道具 举报

23

主题

85

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
176
发表于 2021-6-15 14:42:00 | 显示全部楼层
只能用edge.GetCurveAsNurb得到dbcurve
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2024-11-22 00:07 , Processed in 0.351280 second(s), 64 queries .

© 2020-2024 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表