zoukankan      html  css  js  c++  java
  • 程序实现曲面切割

    下面这段代码来自一个客户,实现用一个曲面切割另外一个,比如用一块铁板把一个两头有盖的汽油桶切成两个开口的桶。原理很简单,就是利用了AcDbSurface的SliceBySurface方法:

    切割前:

    image

    切割后,为了看得清楚,把无盖桶移动了一下:

    image

    代码:

            [CommandMethod("TestSliceSurface")]
            public void TestSliceSurface()
            {
                Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
                var ed = doc.Editor;
    
                using (DocumentLock docLock = doc.LockDocument())
                {
                    Database db = doc.Database;
                    using (Transaction ts = db.TransactionManager.StartTransaction())
                    {
                        BlockTableRecord btr = ts.GetObject(db.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord;
                        var peo1 = new PromptEntityOptions("\nSelect first surface");
                        peo1.SetRejectMessage("\nMust be a surface.");
                        peo1.AddAllowedClass(typeof(AcDb.Surface), false);
    
                        var per1 = ed.GetEntity(peo1);
                        if (per1.Status != PromptStatus.OK)
                            return;
    
                        var obj1 = ts.GetObject(per1.ObjectId, OpenMode.ForWrite);
                        var surf1 = obj1 as AcDb.Surface;
                        if (surf1 == null)
                        {
    
                            ed.WriteMessage("\nFirst object must be a surface.");
                            return;
                        }
                        
                        var peo2 = new PromptEntityOptions("\nSelect second surface");
                        peo2.SetRejectMessage("\nMust be a surface.");
                        peo2.AddAllowedClass(typeof(AcDb.Surface), false);
    
                        var per2 = ed.GetEntity(peo2);
                        if (per2.Status != PromptStatus.OK)
                            return;
    
                        var obj2 = ts.GetObject(per2.ObjectId, OpenMode.ForWrite);
                        var surf2 = obj2 as AcDb.Surface;
                        if (surf2 == null)
                        {
    
                            ed.WriteMessage("\nSecond object must be a surface.");
                            return;
                        }
    
                        SurfaceSliceResults ss = surf1.SliceBySurface(surf2);
    
                        btr.AppendEntity(ss.NegativeHalfSurface);
                        ts.AddNewlyCreatedDBObject(ss.NegativeHalfSurface, true);
    
                        ts.Commit();
                        ts.Dispose();
    
                    }
                    docLock.Dispose();
                    
                }
                
            }

  • 相关阅读:
    android升级软件版本号,您安装后的新版本号,成功安装画面没有出现,或直接回到桌面
    Linux下安装Tomcat服务器和部署Web应用
    Linux下开启mysql数据库的远程访问权限
    【项目管理和构建】——Maven简介(一)
    用maven搭建多模块项目
    Maven之自定义pom类型的基础项目
    Maven之搭建本地私服(nexus)仓库
    Maven之自定义archetype生成项目骨架(一)
    Maven多模块项目搭建
    安装maven之后,cmd提示mvn不是内部命令的解决办法
  • 原文地址:https://www.cnblogs.com/junqilian/p/3115932.html
Copyright © 2011-2022 走看看