明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2174|回复: 2

[【IFoxCAD】] 绘制墙体-JIG应用

[复制链接]
发表于 2023-9-24 23:42:26 | 显示全部楼层 |阅读模式
本帖最后由 wang2006zhi 于 2025-2-14 12:05 编辑
  1. /// <summary>
  2. /// 绘制墙体
  3. /// </summary>
  4. [CommandMethod("W_HZQT")]
  5. public static void WallDraw()
  6. {
  7.     var offsetDist = AppX.InfoSysValue.墙体宽度;
  8.     Env.Editor.WriteMessage($"\n当前墙体厚度:{offsetDist}");
  9.     if (!Env.Editor.GetPoint(out Point3d point1, "选择第一个点"))
  10.         return;
  11.     using var tr = new DBTrans();
  12.     var layerId = InfoDicLayer[ETypeName.墙线].MakeLayer();
  13.     var plineTemp = new Polyline();
  14.     plineTemp.AddVertexAt(0, point1.Point2d(), 0, 0, 0);
  15.     plineTemp.AddVertexAt(1, point1.Point2d(), 0, 0, 0);
  16.     using var jig = new JigEx((mpw, _) =>
  17.     {
  18.         plineTemp.SetPointAt(plineTemp.NumberOfVertices - 1, mpw.Point2d());
  19.     });
  20.     jig.DatabaseEntityDraw(wd => wd.Geometry.Draw(plineTemp));
  21.     var jppo = jig.SetOptions(plineTemp.GetPoint3dAt(plineTemp.NumberOfVertices - 1), CursorType.Crosshair,
  22.         "\n选择下一点");
  23.     jppo.Keywords.Add("U", "U", "撤回(U)");
  24.     while (true)
  25.     {
  26.         jppo.BasePoint = plineTemp.GetPoint3dAt(plineTemp.NumberOfVertices - 1);
  27.         var r2 = Env.Editor.Drag(jig);
  28.         if (r2.Status == PromptStatus.OK)
  29.             plineTemp.AddVertexAt(plineTemp.NumberOfVertices, jig.MousePointWcsLast.Point2d(), 0, 0, 0);
  30.         else if (r2.Status == PromptStatus.Keyword)
  31.         {
  32.             switch (r2.StringResult.ToUpper())
  33.             {
  34.                 case "U":
  35.                     if (plineTemp.NumberOfVertices > 2)
  36.                     {
  37.                         plineTemp.RemoveVertexAt(plineTemp.NumberOfVertices - 2);
  38.                     }
  39.                     break;
  40.             }
  41.         }
  42.         else
  43.         {
  44.             if (plineTemp.NumberOfVertices > 2)
  45.             {
  46.                 plineTemp.RemoveVertexAt(plineTemp.NumberOfVertices - 1);
  47.                 break;
  48.             }
  49.         }
  50.     }

  51.     var pts = plineTemp.GetPoints();
  52.     var pt2 = plineTemp.EndPoint;
  53.     pts.AddRange(pts);
  54.     var newpl = pts.CreatePolyline();
  55.     newpl.Closed = true;
  56.     newpl.LayerId = layerId;
  57.    
  58.     using var jig2 = new JigEx((mpw, _) =>
  59.     {
  60.         var pt = plineTemp.EndPoint;
  61.         
  62.         if (offsetDist >= 600)
  63.             offsetDist = 600;
  64.         if (mpw.X < pt.X)
  65.             offsetDist = -offsetDist;
  66.         Doubpline(plineTemp, offsetDist, newpl);
  67.     });
  68.     jig2.DatabaseEntityDraw(wd => { wd.Geometry.Draw(newpl); });
  69.     jig2.SetOptions(pt2, msg: "\n  选择第一个点");
  70.     var ppr3 = Env.Editor.Drag(jig2);
  71.     if (ppr3.Status != PromptStatus.OK)
  72.         return;
  73.     tr.CurrentSpace.AddEntity(newpl);

  74.     void Doubpline(Polyline pl, double dou, Polyline polyline)
  75.     {
  76.         var num = pl.NumberOfVertices;
  77.         if (pl.GetOffsetCurves(dou)[0] is Polyline newpl1)
  78.         {
  79.             var npts = newpl1.GetPoints();
  80.             npts.Reverse();
  81.             for (int i = npts.Count - 1; i >= 0; i--)
  82.             {
  83.                 polyline.SetPointAt(num + i, npts.Point2d());
  84.             }
  85.         }
  86.     }
  87. }

本帖子中包含更多资源

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

x
发表于 2023-10-20 00:30:14 | 显示全部楼层
好贴子,收藏了
发表于 2024-2-24 11:21:34 | 显示全部楼层
好贴子,收藏了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-2-22 18:28 , Processed in 0.178318 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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