broncos15 发表于 2022-7-5 18:08:05

在上实时发出两个命令

我很好奇,有没有办法让两个命令同时生效?我知道当只有这样一个命令时该怎么做:
(command "._PLINE")
(while (> (logand (getvar "CMDACTIVE") 1) 0)
    (command PAUSE)
) 。然而,当我向函数“馈送”点时,我真的很难想出如何做到这一点。我正在尝试编写一个LISP,它可以同时绘制多段线和多段线。让我头疼的是如何编写while语句,以便在用户拾取点的同时实时绘制多线图。我知道我需要使用getpoint,但当我这样做时,会去掉代码的活动部分,而只是在之后绘制。

BIGAL 发表于 2022-7-5 18:25:06

你可能需要一种不同的方法,一次画出所有的线,然后连接成普林斯。您可以通过记住对象的名称来进行圆角和pedit。假设4条线使用偏移创建,得到ent1 ent2 ent3 ent4,然后下一个点得到ent5 ent6 ent7 ent8,圆角ent1 ent5,pedit ent1 J ent5,依此类推。mline的优点是可以绘制多条线,我知道我已经拖动了下一个点,当选择点时,最后4条线中会出现一条线,添加新的4条线。李-麦克可能有一种重新绘制的方法,比如说当你们选择下一个像pt一样的mline时,重新绘制4条线,但这将是4条线。

broncos15 发表于 2022-7-5 18:32:22

如果我理解正确的话,我应该把它们画成不同的线或柱脚线,偏移它们,然后将末端的两条外部线转换成多线,对吗?

cwake 发表于 2022-7-5 18:42:18

我想我应该使用getpoint和entmod来处理while循环中的每个实体。。。完全避免使用命令。

broncos15 发表于 2022-7-5 18:55:44

谢谢你的建议,我会接受他们两个,看看我能做些什么。

tombu 发表于 2022-7-5 19:02:14

Lisp示例:
;| Tangent Leader for labeling
BY: Tom Beauford
BeaufordT@LeonCountyFL.gov
Leon County Public Works Engineering Section
Macro: ^P(or C:tld (load "Arrow.lsp"));tld
Command line: (load "Arrow.lsp") tld
==============================================================================|;

(defun C:tld (/ *ERROR* st_txt rem ts pt1 pt2 pt3 pt4 arow addv)

(defun *ERROR* (s)                  ; If an error (such as CTRL-C) occurs
                                     ; while this command is active...
(if (/= s "Function cancelled")
   (princ (strcat "\nError: " s))
)
(command "ucs" "Restore" "$temp$"); Restore saved coordinate system.
(command "ucs" "Del" "$temp$")      ; Delete $temp$ coordinate system.
(grtext -1 "")                      ; Clear status line.
(setvar "osmode" rem)
(princ)
)

(setq st_txt (strcat "Arrow size = Text Size = " (rtos(getvar "textsize")2 2)))
(grtext -1 st_txt)
(setvar "CMDECHO" 0)
(setq rem (getvar "osmode"))
(setvar 'osmode (boole 7 (getvar 'osmode) 16384))
(command "ucs" "Del" "$temp$")
(command "ucs" "Save" "$temp$")
(command "ucs" "World")
(setq
ts(getvar "textsize")
pt1 (getpoint "Start at object to be labeled: ")
pt3 (getpoint pt1 "\n\nTo: "))
(setq
pt1 (list(car pt1)(cadr pt1))
pt3 (list(car pt3)(cadr pt3))
pt2
(list
   (- (car pt1)(* (/ ts (distance pt1 pt3))
      (-(car pt1)(car pt3)))
   )
   (- (cadr pt1)(* (/ ts (distance pt1 pt3))
      (-(cadr pt1)(cadr pt3)))
   )
)
)
(setq arow (list
             '(0 . "LWPOLYLINE")
             '(100 . "AcDbEntity")
             (cons 8 (getvar "clayer"))         ;current layer
             '(6 . "CONTINUOUS")                ;linetype
             '(100 . "AcDbPolyline")
             '(90 . 3)                        ;# of vertices
             '(39 . 0.0)
             (list 10(car pt1)(cadr pt1))       ;vertex
             '(40 . 0.0)                        ;starting width
             (cons 41 (/ ts 3));ending width
             '(42 . 0.0)                        ;bulge (external of curve)
             (list 10(car pt2)(cadr pt2))       ;vertex
;            (cons 40 (/ ts 30)) ;starting width
             '(40 . 0.0) ;starting width
;            (cons 41 (/ ts 30)) ;ending width
             '(41 . 0.0) ;ending width
             '(42 . 0.0)                        ;bulge (external of curve)
             (list 10(car pt3)(cadr pt3))       ;vertex
;            (cons 40 (/ ts 30)) ;starting width
             '(40 . 0.0) ;starting width
;            (cons 41 (/ ts 30)) ;ending width
             '(41 . 0.0) ;ending width
             '(42 . 0.0)                        ;bulge (external of curve)
             '(210 0.0 0.0 1.0)               ;extrusion direction
            )
)
(entmake arow)
(setq en (entlast))
(setq ed (entget en))
(setq pt4 nil)
(setq pt4 (getpoint pt3))
(while pt4
(setq ed (reverse(cdr(reverse ed))))
(setq ed (subst(cons 90(+(cdr(assoc 90 ed))1))(assoc 90 ed)ed));# of vertices
(setq addv (list
            (list 10(car pt4)(cadr pt4))       ;vertex
            '(40 . 0.0) ;starting width
;               (cons 40 (/ ts 30)) ;starting width
            '(41 . 0.0) ;ending width
;               (cons 41 (/ ts 30)) ;ending width
            '(42 . 0.0)                        ;bulge (external of curve)
            '(210 0.0 0.0 1.0)               ;extrusion direction
             ); end list
); end setq
(setq ed(append ed addv))
(entmod ed)
(setq pt3 pt4)
(setq pt4 nil)
(setq pt4 (getpoint pt3))
(princ)
); end while
(setvar "osmode" rem)
(command "ucs" "Restore" "$temp$")
(command "ucs" "Del" "$temp$")
(grtext -1 "") ;CLEAR STATUS LINE
(princ)
)

BIGAL 发表于 2022-7-5 19:13:27

这是我刚才所说的图像,拾取点pline可以添加,而不是其他偏移线之一。
 
https://www.cadtutor.net/forum/attachment.php?attachmentid=56793&cid=1&stc=1
页: [1]
查看完整版本: 在上实时发出两个命令