枫叶棋语 发表于 2023-2-1 21:28:16

PYCAD j直线JIG绘制,还请各位大神多多指教

# -*- coding: utf-8 -*
from System import *
from pycad.runtime import *
from pycad.system import *
from Autodesk.AutoCAD.DatabaseServices import *
from Autodesk.AutoCAD.Geometry import *
from Autodesk.AutoCAD.ApplicationServices import *
from pycad.runtime.edx import *
from Autodesk.AutoCAD.EditorInput import *

class LineJig(DrawJig):
    def __init__(self, basept = Point3d):
      self.line = Line(basept, basept)
      self.location = basept

    def Sampler(self, prompts=JigPrompts):
      opts = JigPromptPointOptions('\n请输入终点:')
      opts.UserInputControls = (
            UserInputControls().Accept3dCoordinates |
            UserInputControls().NoZeroResponseAccepted |
            UserInputControls().NoNegativeResponseAccepted)
      res = prompts.AcquirePoint(opts)
      if res.Value != self.location:
            self.location = res.Value
      else:
            return aced.SamplerStatus.NoChange
      if res.Status == aced.PromptStatus.Cancel:
            return aced.SamplerStatus.Cancel
      else:
            return aced.SamplerStatus.OK

    def WorldDraw(self, doc):
      doc.Geometry.Draw(self.GetEntity())
      return True

    def Update(self):
      self.line.EndPoint = self.location

    def GetEntity(self):
      self.Update()
      return self.line


@command()
def TLineJig(doc):
    with dbtrans(doc) as tr:
      btr=tr.opencurrspace()
      res = edx.getpoint("\n请输入起点:")
      if not res.ok(): return
      BasePt = res.value
      jig = LineJig(BasePt)
      res = doc.Editor.Drag(jig)
      while (res.Status==PromptStatus().OK):
            line=jig.GetEntity()
            tr.addentity(btr,line)
            tr.flush(line)
            BasePt=jig.location
            jig=LineJig(BasePt)
            res = doc.Editor.Drag(jig)
            if res.Status!=PromptStatus().OK:
                break
      

陨落 发表于 2023-2-1 21:59:00

好帖~python代码就是简洁清楚明白

d1742647821 发表于 2023-2-2 10:20:39

可以看看ifox的,封装一个通用的

landsat99 发表于 2023-2-2 11:17:28

本帖最后由 landsat99 于 2023-2-2 11:39 编辑

基于ironpython的应用不多见。必须大赞 刚看了下ironpython官网已兼容到cpy3.4的std。十年来的重大改进进,很香! 虽不是ironpy的技术栈,友情点赞必须[]

landsat99 发表于 2023-2-2 12:05:33

关羽封装接口设计, 楼主可参考acad官方的com,它是官方标准封装实例,最简洁。除非有特殊理由,和详尽说明文档,否则不要自设接口写法。应用成本高

landsat99 发表于 2023-2-2 12:08:12

关羽接口标准

landsat99 发表于 2023-2-2 12:12:34

楼主有意要做一套的话,这个进程内的.net库OK。也可同时封装成com格式的dll,方便进程外的标准调用

muzilier 发表于 2023-2-2 13:35:34

学习学习,谢谢 大神分享

Ming131564 发表于 2023-2-2 17:24:23

学习学习,谢谢
页: [1]
查看完整版本: PYCAD j直线JIG绘制,还请各位大神多多指教