lamensterms 发表于 2022-7-5 23:18:57

请帮忙把这个街区弄进去

嘿伙计们,
 
我有一个简单的程序,我想改进(希望有你的帮助)。
 
该例程非常简单——它将在用户确定的位置插入一个带引线的孔注释(块)。该例程将提示用户输入三个点以及孔的数量和直径。
 
目前我在这个例程中遇到的唯一问题是…我有一个holenote块,它只适用于指向一个方向的孔注释。我想给例程添加一个条件,根据用户选择的点插入一个块。请参阅随附的草图以获得更清晰的解释。第一个图像是例程当前的运行方式——这在这个方向上很好。第二个问题是它目前是如何运行的——方向相反。第三个图像是我希望它以相反的方向运行。
 
所以…我在想/希望有人能帮我调整例程,允许插入不同的块,这取决于第三个点的X值是大于还是小于第二个点的X值。
 
我想设置的另一件事是,如果孔的数量只有1…STRCAT函数将使用“/%%C”AHdia“HOLE”(而不是孔)编译。
 
(Defun c:AH ()
(SETVAR "ORTHOMODE" 0)
(SETQ AHSCALE (GETVAR "DIMSCALE"))
(command "-layer" "set" "1dl" "")
(SETQ AHPT1 (GETPOINT))
(SETQ AHPT2 (GETPOINT AHPT1))
(command "QLEADER" AHPT1 AHPT2 NIL)
(SETVAR "ORTHOMODE" 1)
(SETQ AHPT3 (GETPOINT AHPT2))
(SETQ AHQTY (getstring "\nEnter Quantity of Holes : " XX))
(SETQ AHdia (getstring "\nEnter Diameter of Holes : " XX))
(setq ahnote (strcat AHQTY"/%%C"AHdia" HOLES"))
(COMMAND "INSERT" "holenote" AHPT2 AHSCALE "" "" ahnote "")
(princ)
)

 
非常感谢您的帮助。
 

alanjt 发表于 2022-7-5 23:29:39

??
 
(defun c:AH (/ *error* om cm p1 p2 p3 q d)

(defun *error* (msg)
   (redraw)
   (and om (setvar 'ORTHOMODE om))
   (and cm (setvar 'CMDECHO cm))
   (if (and msg (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*QUIT*,")))
   (princ (strcat "\nError: " msg))
   )
)

(setq om (getvar 'ORTHOMODE)
       cm (getvar 'CMDECHO)
)
(setvar 'ORTHOMODE 0)
(setvar 'CMDECHO 0)

(if (and (setq p1 (getpoint "\nSpecify first point: "))
          (setq p2 (getpoint p1 "\nSpecify next point: "))
          (progn (grdraw p1 p2 256) (setvar 'ORTHOMODE 1))
          (setq p3 (getpoint p2 "\nSpecify landing point: "))
          (progn (grdraw p2 p3 256) (initget 6) (setq q (getint "\nSpecify quantity of holes: ")))
          (progn (initget 6) (setq d (getint "\nSpecify diameter of holes: ")))
   )
   (command "_.leader"
            "_non"
            p1
            "_non"
            p2
            "_non"
            p3
            "_A"
            (strcat (itoa q) "/%%C" (itoa d) " HOLE")
            ""
   )
)

(*error* nil)
(princ)
)

BIGAL 发表于 2022-7-5 23:48:15

1你需要确定你在哪个象限,然后以正确的方式绘制引线。只需检查ahpt1和ahpt2之间的角度,比较0-90 90-180 180-270 270 270-360,但在弧度中,使用4种不同的方式绘制。可能基于第一个点对正确绘制的第二个点进行一些极坐标计算,但使用第二个拾取点作为近似猜测。
 
2个孔很容易更改strcat,如果孔大于1,则使用if语句,然后孔=孔,否则孔=孔
 

(if (< ahqty 1)
(setq ahnote (strcat AHQTY"/%%C"AHdia" HOLE"))
(setq ahnote (strcat AHQTY"/%%C"AHdia" HOLES"))
)

alanjt 发表于 2022-7-5 23:49:44

(defun c:AH (/ *error* om cm p1 p2 p3 q d)

(defun *error* (msg)
   (redraw)
   (and om (setvar 'ORTHOMODE om))
   (and cm (setvar 'CMDECHO cm))
   (if (and msg (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*QUIT*,")))
   (princ (strcat "\nError: " msg))
   )
)

(setq om (getvar 'ORTHOMODE)
       cm (getvar 'CMDECHO)
)
(setvar 'ORTHOMODE 0)
(setvar 'CMDECHO 0)

(if (and (setq p1 (getpoint "\nSpecify first point: "))
          (setq p2 (getpoint p1 "\nSpecify next point: "))
          (progn (grdraw p1 p2 256) (setvar 'ORTHOMODE 1))
          (setq p3 (getpoint p2 "\nSpecify landing point: "))
          (progn (grdraw p2 p3 256) (initget 6) (setq q (getint "\nSpecify quantity of holes: ")))
          (progn (initget 6) (setq d (getint "\nSpecify diameter of holes: ")))
   )
   (command "_.leader"
            "_non"
            p1
            "_non"
            p2
            "_non"
            p3
            "_A"
            (strcat (itoa q)
                  "/%%C"
                  (itoa d)
                  (if (> q 1)
                      " HOLES"
                      " HOLE"
                  )
            )
            ""
   )
)

(*error* nil)
(princ)
)

BIGAL 发表于 2022-7-6 00:00:01

哇,AlanJT趁我打字的时候偷偷把那一个拿走了

lamensterms 发表于 2022-7-6 00:12:14

哦,废话,
 
我只是在阅读我的一些旧帖子,寻找一个我可能开始或可能没有开始的帖子。。。然后意识到我从来没有回应过这个。
 
很抱歉我这么粗鲁。非常感谢你的帮助。这就是我用来创建孔注释的例程,它非常棒。
 
再次感谢,再次抱歉。

alanjt 发表于 2022-7-6 00:20:59

 
哈哈。迟到总比不到好。
页: [1]
查看完整版本: 请帮忙把这个街区弄进去