rookie37 发表于 2022-7-6 17:17:28

缩放窗口

虽然我也不擅长编写脚本,但我更擅长用lisp编写脚本。
 
我想摆脱这一点,开始将脚本宏转换为lisp
 
如何编写缩放窗口lisp?
 
下面是脚本。它解释了我想做什么,但我希望它在Lisp程序。
 
 
^C^Cz;w结束;/。结束/
 
而且
 
 
我编写了一个简单的代码来更改实体的线条粗细。
再说一次,它是在脚本中,不是很好。我想选一条线,或者(如果我错过了)画一个篱笆,然后选择一组。我如何用lisp写这个?
 
^C^C\U更改;\\;Pt;

Lee Mac 发表于 2022-7-6 17:27:17

嗨,菜鸟,
 
这够了吗?

(defun c:zw ()
(setvar "cmdecho" 0)
(command "zoom"
"w"
pause
pause
) ; end zoom
(setvar "cmdecho" 1)
(princ)
) ; end program
 
 
 
对于宽度:

(defun c:polyw ()
   (if
       (setq obs (ssget))
         (progn
               (command "_.pedit"
                   "M"
                   obs ""
                   "w"
                   pause
                   ""
               )
         ) ; end progn
   (alert "\nPlease Select Objects!")
   ) ; end if
   (princ)
) ; end program

rookie37 发表于 2022-7-6 17:32:42

谢谢您的及时回复!
 
 
(defun c:zw()(setvar“cmdecho”0)(命令“zoom”“w”pause pause);结束缩放(setvar“cmdecho”1)(princ));结束程序
 
如何使缩放窗口在每次暂停之前捕捉到端点
 
 
 
对于宽度:
 
代码:
(defun c:polyw()(if(setq obs(ssget))(progn(command“_.pedit”“M”obs”““w”pause”“);结束程序(警报“\n请选择对象!”);结束if(princ));结束程序
 
事实上,这仍将节省大量时间。如何修改它,以便也可以选择单个行?

Lee Mac 发表于 2022-7-6 17:43:37

为了使缩放窗口捕捉到端点,我想您可以使用以下方法:
 
(defun c:zw ()
   (setq pt1 (getpoint "\nSelect First Window Point: "))
   (setq pt1 (osnap pt1 "_endp"))
   (setq pt2 (getpoint "\nSelect Second Window Point: "))
   (setq pt2 (osnap pt2 "_endp"))
   (command "zoom"
   "w"
   pt1
   pt2
   ) ; end zoom
    (princ)
) ; end program
 
但这并不理想。
 
对于多段线宽度转换,我提供的LISP应该可以让您选择一条直线,但如果不是所需的,那么我恐怕不知道如何创建这样的LISP

CAB 发表于 2022-7-6 17:47:03

这里有一个选择。
(defun c:zw () (setvar "cmdecho" 0) (command "zoom" "w" "_end" pause "_end" pause )

CAB 发表于 2022-7-6 17:53:23

我更喜欢这个。
(defun c:zw (/ pt1 pt2)
(if
(and
   (setq pt1 (getpoint "\nSelect First Window Point: "))
   (setq pt1 (osnap pt1 "_end"))
   (setq pt2 (getpoint "\nSelect Second Window Point: "))
   (setq pt2 (osnap pt2 "_end"))
)
   (command "._zoom" "_w" "_non" pt1 "_non" pt2) ; end zoom
)
(princ)
) ; end program

CAB 发表于 2022-7-6 18:04:04

也许这是厚度:
(defun c:changeThickness (/ ss tk)
(prompt "\nSelect objects to change thickness:")
(if
(and
    (setq ss (ssget))
    (setq tk (getdist "\nEnter a new thickness:"))
)
   (command "._change" ss "" "_P" "_T" tk "")
)
(princ)
)
 
只是一些想法。

Lee Mac 发表于 2022-7-6 18:08:35

感谢您的输入CAB,我不知道如何在暂停之前放置“端点捕捉”并仍然使程序正常工作,因此我决定放置点选择并在缩放命令中使用点。
 
但至于厚度,我使用了“ssget”语法(和你一样),但我不确定新手是否喜欢类似于“entsel”选择选取框的选择。。。

CAB 发表于 2022-7-6 18:16:13

是的。
(defun c:changeThickness (/ ent obj tk)
(setvar "ErrNo" 0) ; reset variable
(if (setq tk (getdist "\nEnter a new thickness:"))
   (while
   (cond
       ((and (null(setq ent (car (entsel "\nSelect object to change thickness:"))))
            (= 52 (getvar "ErrNo"))) ; <Enter> was hit
      (prompt "\nUser Quit.") ; Bye bye
       )
       ((null ent)
      (princ "\nMissed, Try Again.")
       )
       ((null (vlax-property-available-p
                (setq obj (vlax-ename->vla-object ent))
                'Thickness t))
      (princ "\nNo Thickness or locked layer. Try Again.")
       )
       (t ; OK to update
      (vla-put-thickness obj tk)
      (princ "\nThickness updated.")
       )
   )
   )
)
(princ)
)

rookie37 发表于 2022-7-6 18:18:23

非常感谢。
 
这将是一个很大的帮助
页: [1]
查看完整版本: 缩放窗口