乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 66|回复: 19

[编程交流] 受控视口平移Lisp

[复制链接]

31

主题

170

帖子

139

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
155
发表于 2022-7-6 11:44:46 | 显示全部楼层 |阅读模式
有人知道为什么我得到了一个糟糕的函数:0错误吗?
 
  1. (defun c:rf (/ vp dir dis vpn pdr dms vc1 vx1 vy1 vz1 vc2 vx2 vy2 vz2)
  2. (command "zoom" "w" "-0.5,-0.5" "11,8.5")
  3. (setq vp  (getstring "\nWhich Viewport would you like to pan?<Top(T), Front(F), Right(R)>: "))
  4. (setq dir (getstring "\nWhich direction would you like to pan the viewport?<Up(U), Down(D), Left(L), Right(R)>: "))
  5. (setq dis (getreal   "\nHow far would you like to pan the viewport? "))
  6. (setq vpn (if (= vp "Top") (2)
  7.       (if (= vp "T") (2)
  8. (if (= vp "Front") (5)
  9.    (if (= vp "F") (5)
  10.      (if (= vp "Right") (4)
  11.        (if (= vp "R") (4)
  12.   (0))))))))
  13. (setq pdr (if (= dir "Up") ("Up")
  14.       (if (= dir "U") ("Up")
  15. (if (= dir "Down") ("Do")
  16.    (if (= dir "D") ("Do")
  17.      (if (= dir "Left") ("Le")
  18.        (if (= dir "L") ("Le")
  19.   (if (= dir "Right") ("Ri")
  20.     (if (= dir "R") ("Ri"))))))))))
  21. (setq dms (getvar "dimlfac"))
  22. (if (= vpn 2) (if (= dir "Up")
  23.    (progn
  24.      (command "_.mspace")
  25.      (setvar "cvport" vpn)
  26.      (command "ucs" "top")
  27.      (setq vc1 (getvar "viewctr"))
  28.      (setq vx1 (car vc1))
  29.      (setq vy1 (cadr vc1))
  30.      (setq vz1 (caddr vc1))
  31.      (setq vy2 (+ vy1 (* dis dms)))
  32.      (setq vc2 '(vx1 vy2 vz1))
  33.      (setvar "viewctr" vc2))
  34.    )
  35.    )
  36. )
回复

使用道具 举报

4

主题

940

帖子

961

银币

初来乍到

Rank: 1

铜币
12
发表于 2022-7-6 11:48:13 | 显示全部楼层
Autolisp需要在(
a(后面的整数是不可接受的,因此会出现错误
你可能想看看你的其他帖子。
回复

使用道具 举报

31

主题

170

帖子

139

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
155
发表于 2022-7-6 11:53:26 | 显示全部楼层
我去掉了那个错误,现在我得到了“nil”和命令行,当我在命令行中键入“!vp”以查看它是否为get nil中的“vp”变量赋值。有什么想法吗?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:57:06 | 显示全部楼层
我建议您研究getkword函数
回复

使用道具 举报

31

主题

170

帖子

139

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
155
发表于 2022-7-6 11:58:34 | 显示全部楼层
哈哈,不喜欢我所有的if-then函数吗?我会调查的。
回复

使用道具 举报

4

主题

940

帖子

961

银币

初来乍到

Rank: 1

铜币
12
发表于 2022-7-6 12:01:20 | 显示全部楼层
由于您将所有变量声明为局部变量,因此当您退出例程时,变量将重置为之前的值。在调试例程时,您可能不希望声明变量。您可能还需要考虑使用Vlide和Watch工具。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:05:37 | 显示全部楼层
 
那么,最好在重要的地方使用IF语句,允许用户输入为空
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 12:08:58 | 显示全部楼层
此外,我认为VIEWCTR是一个只读系统变量。我认为您必须使用缩放命令-大卫
回复

使用道具 举报

31

主题

170

帖子

139

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
155
发表于 2022-7-6 12:12:39 | 显示全部楼层
大卫-打得好,谢谢。
 
Lee-我对initget/getkword函数有问题。你能把其中两个排成一行吗
 
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:13:22 | 显示全部楼层
是的,这不会引起问题。
 
但是,还要注意initget可以使用的位代码。当前在您的设置中,如果用户点击enter,getkword将返回nil。因此,您可能需要使用:
 
  1. (initget 1 "Top Front Right")
  2. (setq wvp (getkword "\nWhich Viewport would you like to pan?<Top(T), Front(F), Right(R)>: "))

 
您是在代码编辑程序(例如Visual LISP编辑器)中编写代码,还是仅在普通记事本中编写代码?
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-5 11:12 , Processed in 0.627154 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表