KRBeckman 发表于 2022-7-6 12:19:15

啊,是的,添加了1。。。我用Visual LISP写作

Lee Mac 发表于 2022-7-6 12:21:33

 
很好,如果你不这么做,我会建议你的

KRBeckman 发表于 2022-7-6 12:25:34

我如此接近。。。为什么不在缩放命令中使用vc2作为中心?
 
(defun c:rf ()
(command "zoom" "w" '(-0.5 -0.5 0.0) '(11.0 8.5 0.0))
(initget 1 "Top Front Right")
(setq wvp (getkword "\nWhich Viewport would you like to pan?<Top(T), Front(F), Right(R)>: "))
(initget 1 "Up Down Left Right")
(setq drc (getkword "\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 (= wvp "Top") 2
(if (= wvp "Front") 5
   (if (= wvp "Right") 4
))))
(setq dms (getvar "dimlfac"))
(if (= vpn 2) (if (= drc "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))
   (command "zoom" "c" vc2 "")
   )
   )
   )
)

Lee Mac 发表于 2022-7-6 12:27:04

试试这个:
 

(defun c:rf (/ DIS DMS DRC VC1 VPN VX1 VY1 VY2 VZ1 WVP)

(command "_.zoom" "_w" '(-0.5 -0.5 0.0) '(11.0 8.5 0.0))

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

(initget 1 "Up Down Left Right")
(setq drc (getkword "\nWhich direction would you like to pan the viewport?<Up(U), Down(D), Left(L), Right(R)>: "))

(initget 7) ;; Might want to disallow -ve's also
(setq dis (getreal "\nHow far would you like to pan the viewport? "))

(setq vpn
   (cond ( (eq wvp "Top")   2)
         ( (eq wvp "Front") 5)
         ( (eq wvp "Right") 4)))

(setq dms (getvar "dimlfac"))

(if (= vpn 2)
   (if (= drc "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)))

       (command "_.zoom" "_c" (list vx1 vy2 vz1) ""))))

(princ))

 
错误是使用撇号,为了解释错误,请阅读以下内容:
 
http://www.cadtutor.net/forum/showpost.php?p=258390&postcount=20

KRBeckman 发表于 2022-7-6 12:31:40

我大部分都是对的。再次感谢。我很快就会到那里。

Lee Mac 发表于 2022-7-6 12:33:29

 
诚然,这并不坏-我鼓励您使用COND,其中可以替换多个IF语句。

KRBeckman 发表于 2022-7-6 12:35:37

在cond函数中使用“eq”有什么原因吗?或者也可以使用“=”吗?

Lee Mac 发表于 2022-7-6 12:39:48

 
我建议使用“eq”来比较字符串/表达式(就此而言,“等于”)通常用于数值比较。

David Bethel 发表于 2022-7-6 12:41:56

我不是一个大球迷(情商)
 
请看帮助文件的示例:
 
(setq f1’(a b c))
(setq f2’(a b c))
 
(setq f3 f2)
 
比较f1和f3:
 
命令:(eq f1 f3)
 

 
为此:
 
(等式f1 f2)返回nil
 
这对我来说不是那么直观。
 
我确实使用它来比较珐琅,因为它们与符号绑定。
 
(=)将字符串转换为ASCII数字,并以这种方式进行比较。
 
(=“Z”“Z”)返回nil
 
-大卫

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

好吧,它几乎只对我有效,因为我的标题栏视口按我需要的方式编号,但这里是“最终”草稿:
 
(defun c:rf (/ DIS DMS DRC MDS VC1 VPN VX1 VY1 VY2 VZ1 WVP)

(command "_.pspace")
(command "_.zoom" "_w" '(-0.5 -0.5 0.0) '(11.0 8.5 0.0))

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

(initget 1 "Up Down Left Right")
(setq drc (getkword "\nWhich direction would you like to pan the viewport?<Up(U), Down(D), Left(L), Right(R)>: "))
(initget 7)
(setq dis (getreal "\nHow far would you like to pan the viewport? "))
(setq vpn
   (cond ( (eq wvp "Top")   2)
         ( (eq wvp "Front") 5)
         ( (eq wvp "Right") 4)))

(setq dms (getvar "dimlfac"))
(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 mds (* dis dms))
(setq vx2 (cond ( (eq wvp "Top")   (cond ( (eq drc "Up")    vx1)
       ( (eq drc "Down")vx1)
       ( (eq drc "Left")(+ vx1 mds))
       ( (eq drc "Right") (- vx1 mds))))
   ( (eq wvp "Front") (cond ( (eq drc "Up")    vx1)
       ( (eq drc "Down")vx1)
       ( (eq drc "Left")(+ vx1 mds))
       ( (eq drc "Right") (- vx1 mds))))
   ( (eq wvp "Right") (cond ( (eq drc "Up")    vx1)
       ( (eq drc "Down")vx1)
       ( (eq drc "Left")vx1)
       ( (eq drc "Right") vx1)))))
(setq vy2 (cond ( (eq wvp "Top")   (cond ( (eq drc "Up")    (- vy1 mds))
       ( (eq drc "Down")(+ vy1 mds))
       ( (eq drc "Left")vy1)
       ( (eq drc "Right") vy1)))
   ( (eq wvp "Front") (cond ( (eq drc "Up")    vy1)
       ( (eq drc "Down")vy1)
       ( (eq drc "Left")vy1)
       ( (eq drc "Right") vy1)))
   ( (eq wvp "Right") (cond ( (eq drc "Up")    vy1)
       ( (eq drc "Left")(+ vy1 mds))
       ( (eq drc "Right") (- vy1 mds))))))
(setq vz2 (cond ( (eq wvp "Top")   (cond ( (eq drc "Up")    vz1)
       ( (eq drc "Down")vz1)
       ( (eq drc "Left")vz1)
       ( (eq drc "Right") vz1)))
   ( (eq wvp "Front") (cond ( (eq drc "Up")    (- vz1 mds))
       ( (eq drc "Down")(+ vz1 mds))
       ( (eq drc "Left")vz1)
       ( (eq drc "Right") vz1)))
   ( (eq wvp "Right") (cond ( (eq drc "Up")    (- vz1 mds))
       ( (eq drc "Down")(+ vz1 mds))
       ( (eq drc "Left")vz1)
       ( (eq drc "Right") vz1)))))

(command "_.zoom" "_c" (list vx2 vy2 vz2) "")
(command "_.pspace")
(princ))
页: 1 [2]
查看完整版本: 受控视口平移Lisp