找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1478|回复: 1

[分享] Create 3D solid by extruding a polyline

[复制链接]

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-6-7 01:18:47 | 显示全部楼层 |阅读模式

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

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

×
     // based on C++ code by Virupaksha Aithal from this page:
      //http://adndevblog.typepad.com/autocad/2012/08/create-3d-solid-by-extruding-a-polyline.html
       [CommandMethod("extt")]
        public void CreateExtrude()
        {
            Autodesk.AutoCAD.ApplicationServices.Application.SetSystemVariable("delobj", 1);

            Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;

            Database db = doc.Database;

            Editor ed = doc.Editor;

            PromptSelectionOptions pso = new PromptSelectionOptions();

            pso.SingleOnly = true;

            pso.SinglePickInSpace = true;

            pso.MessageForAdding = "\nPlease select a polyline: ";

            pso.MessageForRemoval = "Failed to select a polyline";

            pso.PrepareOptionalDetails = true;

            SelectionFilter filter =
                new SelectionFilter(
                new TypedValue[] { new TypedValue(0, "lwpolyline"),new TypedValue(70, 1) });

            //select the polyline
            PromptSelectionResult sres = ed.GetSelection(pso,filter);

            if (sres.Status != PromptStatus.OK) return;

            using (Transaction tr = doc.TransactionManager.StartTransaction())
            {
                //get the boundary curves of the polyline

                ObjectId idPoly = sres.Value[0].ObjectId;

                Entity pEntity = tr.GetObject(idPoly, OpenMode.ForRead) as Entity;

                Polyline pPoly = pEntity as Polyline; ;

                if (pPoly == null) return;

                DBObjectCollection lines = new DBObjectCollection();

                pPoly.Explode(lines);

                // Create a region from the set of lines.

                DBObjectCollection regions = new DBObjectCollection();

                regions = Region.CreateFromCurves(lines);

                if (regions.Count == 0)
                {
                    ed.WriteMessage("\nFailed to create region\n");
                    return;
                }

                Region pRegion = (Region)regions[0];

                // Extrude the region to create a solid.

                Solid3d pSolid = new Solid3d();

                pSolid.RecordHistory = true;

                pSolid.Extrude(pRegion, 10.0, 0.0);
            
                ObjectId savedExtrusionId = ObjectId.Null;

                ObjectId modelId;

                modelId = SymbolUtilityServices.GetBlockModelSpaceId(db);

                BlockTableRecord btr = tr.GetObject(modelId, OpenMode.ForWrite) as BlockTableRecord;

                savedExtrusionId = btr.AppendEntity(pSolid);

                tr.AddNewlyCreatedDBObject(pSolid,true);
         
                if (!pPoly.IsWriteEnabled) pPoly.UpgradeOpen();

                pPoly.Erase();
            
                tr.Commit();
            }

        }
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2020-8-13 10:47:05 | 显示全部楼层
你好,想请教一下关于扫掠的问题?我写好代码,选择CAD图中的截面和路径,就是扫掠不出来。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 21:36 , Processed in 0.170879 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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