本帖最后由 wang2006zhi 于 2025-2-14 12:05 编辑
  1. /// <summary>
  2. /// 绘制方柱
  3. /// </summary>
  4. [CommandMethod("W_HZFZ")]
  5. public static void ColuDraw()
  6. {
  7.     if (!Env.Editor.GetPoint(out Point3d point1, "选择方柱的第一个角点"))
  8.         return;
  9.     var pt1 = point1.Ucs2Wcs();

  10.     using var tr = new DBTrans();
  11.     var layerId = InfoDicLayer[ETypeName.砼柱].MakeLayer();
  12.     var txtTypeId = MakeEntity.MakeTxtStyle();

  13.     var pline = new Polyline();
  14.     pline.SetDatabaseDefaults();
  15.     pline.AddVertexAt(0, pt1.Point2d(), 0, 0, 0);
  16.     pline.AddVertexAt(1, pt1.Point2d(), 0, 0, 0);
  17.     pline.AddVertexAt(2, pt1.Point2d(), 0, 0, 0);
  18.     pline.AddVertexAt(3, pt1.Point2d(), 0, 0, 0);
  19.     pline.Closed = true;
  20.     pline.ConstantWidth = 5;
  21.     pline.LayerId = layerId;

  22.     var dbtextTempX = new DBText();
  23.     dbtextTempX.SetDatabaseDefaults();
  24.     dbtextTempX.Height = AppX.InfoSysValue.基本字高 * AppX.InfoSysValue.制图系数 * 0.5;
  25.     dbtextTempX.WidthFactor = 0.6;
  26.     dbtextTempX.TextStyleId = txtTypeId;
  27.     dbtextTempX.LayerId = layerId;

  28.     var pt2 = new Point2d();

  29.     using var jig1 = new JigEx((mpw, _) =>
  30.     {
  31.         var vec = mpw - pt1;
  32.         var vecXn = vec.Convert2d().GetNormal();
  33.         var length = vec.Length.ToRound(InfoSysValue.方柱模数);
  34.         pt2 = pt1.Point2d() + length * vecXn;
  35.         pline.SetPointAt(1, pt2);

  36.         dbtextTempX.TextString = length.ToString("F3");
  37.         dbtextTempX.Position = pt1 + 0.5 * vec;
  38.         dbtextTempX.Rotation = vecXn.Angle.AngleFormat();
  39.     });
  40.     jig1.DatabaseEntityDraw(wd =>
  41.     {
  42.         wd.Geometry.Draw(pline);
  43.         wd.Geometry.Draw(dbtextTempX);
  44.     });
  45.     jig1.SetOptions(pt1, msg: "\n  选择方柱的第二个点");
  46.     var ppr1 = Env.Editor.Drag(jig1);
  47.     if (ppr1.Status != PromptStatus.OK)
  48.         return;

  49.     var dbtextTempY = new DBText();
  50.     dbtextTempY.SetDatabaseDefaults();
  51.     dbtextTempY.Height = AppX.InfoSysValue.基本字高 * AppX.InfoSysValue.制图系数 * 0.5;
  52.     dbtextTempY.WidthFactor = 0.6;
  53.     dbtextTempY.TextStyleId = txtTypeId;
  54.     dbtextTempY.LayerId = layerId;

  55.     using var jig2 = new JigEx((mpw, _) =>
  56.     {
  57.         var ptFoot = mpw.GetFootPoint(pt1, pt2.Point3d());
  58.         var vec = mpw - ptFoot;
  59.         var vecYn = vec.Convert2d().GetNormal();
  60.         var length = vec.Length.ToRound(InfoSysValue.方柱模数);

  61.         pline.SetPointAt(2, pt2 + length * vecYn);
  62.         pline.SetPointAt(3, pt1.Point2d() + length * vecYn);

  63.         dbtextTempY.TextString = length.ToString("F3");
  64.         dbtextTempY.Position = pt1 + 0.5 * vec;
  65.         dbtextTempY.Rotation = vecYn.Angle.AngleFormat();
  66.     });
  67.     jig2.DatabaseEntityDraw(wd =>
  68.     {
  69.         wd.Geometry.Draw(pline);
  70.         wd.Geometry.Draw(dbtextTempY);
  71.     });
  72.     jig2.SetOptions(pt2.Point3d(), msg: "\n  选择方柱的第三个点");
  73.     var ppr2 = Env.Editor.Drag(jig2);
  74.     if (ppr2.Status != PromptStatus.OK)
  75.         return;
  76.     tr.CurrentSpace.AddEntity(pline);
  77. }

  • 上一篇:CAD玄学第一步(查老农历黄历)
  • 下一篇:没有了