KRBeckman 发表于 2022-7-6 11:44:46

受控视口平移Lisp

有人知道为什么我得到了一个糟糕的函数:0错误吗?
 
(defun c:rf (/ vp dir dis vpn pdr dms vc1 vx1 vy1 vz1 vc2 vx2 vy2 vz2)
(command "zoom" "w" "-0.5,-0.5" "11,8.5")
(setq vp(getstring "\nWhich Viewport would you like to pan?<Top(T), Front(F), Right(R)>: "))
(setq dir (getstring "\nWhich direction would you like to pan the viewport?<Up(U), Down(D), Left(L), Right(R)>: "))
(setq dis (getreal   "\nHow far would you like to pan the viewport? "))
(setq vpn (if (= vp "Top") (2)
      (if (= vp "T") (2)
(if (= vp "Front") (5)
   (if (= vp "F") (5)
   (if (= vp "Right") (4)
       (if (= vp "R") (4)
(0))))))))
(setq pdr (if (= dir "Up") ("Up")
      (if (= dir "U") ("Up")
(if (= dir "Down") ("Do")
   (if (= dir "D") ("Do")
   (if (= dir "Left") ("Le")
       (if (= dir "L") ("Le")
(if (= dir "Right") ("Ri")
    (if (= dir "R") ("Ri"))))))))))
(setq dms (getvar "dimlfac"))
(if (= vpn 2) (if (= dir "Up")
   (progn
   (command "_.mspace")
   (setvar "cvport" vpn)
   (command "ucs" "top")
   (setq vc1 (getvar "viewctr"))
   (setq vx1 (car vc1))
   (setq vy1 (cadr vc1))
   (setq vz1 (caddr vc1))
   (setq vy2 (+ vy1 (* dis dms)))
   (setq vc2 '(vx1 vy2 vz1))
   (setvar "viewctr" vc2))
   )
   )
)

lpseifert 发表于 2022-7-6 11:48:13

Autolisp需要在(
a(后面的整数是不可接受的,因此会出现错误
你可能想看看你的其他帖子。

KRBeckman 发表于 2022-7-6 11:53:26

我去掉了那个错误,现在我得到了“nil”和命令行,当我在命令行中键入“!vp”以查看它是否为get nil中的“vp”变量赋值。有什么想法吗?

Lee Mac 发表于 2022-7-6 11:57:06

我建议您研究getkword函数

KRBeckman 发表于 2022-7-6 11:58:34

哈哈,不喜欢我所有的if-then函数吗?我会调查的。

lpseifert 发表于 2022-7-6 12:01:20

由于您将所有变量声明为局部变量,因此当您退出例程时,变量将重置为之前的值。在调试例程时,您可能不希望声明变量。您可能还需要考虑使用Vlide和Watch工具。

Lee Mac 发表于 2022-7-6 12:05:37

 
那么,最好在重要的地方使用IF语句,允许用户输入为空

David Bethel 发表于 2022-7-6 12:08:58

此外,我认为VIEWCTR是一个只读系统变量。我认为您必须使用缩放命令-大卫

KRBeckman 发表于 2022-7-6 12:12:39

大卫-打得好,谢谢。
 
Lee-我对initget/getkword函数有问题。你能把其中两个排成一行吗
 

Lee Mac 发表于 2022-7-6 12:13:22

是的,这不会引起问题。
 
但是,还要注意initget可以使用的位代码。当前在您的设置中,如果用户点击enter,getkword将返回nil。因此,您可能需要使用:
 

(initget 1 "Top Front Right")
(setq wvp (getkword "\nWhich Viewport would you like to pan?<Top(T), Front(F), Right(R)>: "))

 
您是在代码编辑程序(例如Visual LISP编辑器)中编写代码,还是仅在普通记事本中编写代码?
页: [1] 2
查看完整版本: 受控视口平移Lisp