明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 900|回复: 0

Pycad 构建一个简易的PolylineJig

  [复制链接]
发表于 2023-7-20 14:16:33 | 显示全部楼层 |阅读模式
  1. def AddPolyline(pts):
  2.     polyline = Polyline()
  3.     polyline.SetDatabaseDefaults()
  4.     plane = Plane()
  5.     for index, pt in enumerate(pts):
  6.         polyline.AddVertexAt(index, pt.Convert2d(plane), 0, 0, 0)

  7.     return polyline

  8. class PolylineJig(DrawJig):
  9.     def __init__(self, basept=None):
  10.         self.basept = basept
  11.         self.location = basept
  12.         self.pts = [basept, basept]

  13.     def Sampler(self, prompts:JigPrompts):
  14.         opts = JigPromptPointOptions('\n请输入终点:')
  15.         opts.UserInputControls = (
  16.             UserInputControls.Accept3dCoordinates |
  17.             UserInputControls.NoZeroResponseAccepted |
  18.             UserInputControls.NoNegativeResponseAccepted)
  19.         res = prompts.AcquirePoint(opts)

  20.         if res.Value != self.location:
  21.             self.location = res.Value
  22.         else:
  23.             return SamplerStatus.NoChange

  24.         if res.Status == PromptStatus.Cancel:
  25.             return SamplerStatus.Cancel
  26.         else:
  27.             return SamplerStatus.OK
  28.             
  29.     def Update(self):
  30.         self.pts[-1] = self.location
  31.         self.pline = AddPolyline(self.pts)
  32.         
  33.     def GetEntity(self):
  34.         self.Update()
  35.         return self.pline

  36.     def WorldDraw(self, draw:WorldDraw):
  37.         draw.Geometry.Draw(self.GetEntity())
  38.         return True


  39. @Command()
  40. def ts01(doc: Document):
  41.     with dbtrans(doc) as tr:
  42.         ed = doc.Editor
  43.         btr = tr.opencurrspace()
  44.         res = getpoint()
  45.         if not res.ok:
  46.             return

  47.         basept = res.value
  48.         jig = PolylineJig(basept)
  49.         res = ed.Drag(jig)

  50.         while res.Status == PromptStatus.OK:
  51.             jig.pts.append(jig.location)
  52.             basept = jig.location
  53.             jig.basept = basept
  54.             res = ed.Drag(jig)

  55.             if res.Status != PromptStatus.OK:
  56.                 if len(jig.pts) > 2:
  57.                     jig.pts.pop()
  58.                     pline = AddPolyline(jig.pts)
  59.                     tr.addentity(btr, pline)
复制代码


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

本版积分规则

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

GMT+8, 2024-11-25 02:36 , Processed in 0.155558 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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