AQucsaiJr 发表于 2022-7-6 12:28:22

修复我的Plot命令

我已经编写了一个真正快速的LISP,用作绘图命令。我想补充一点。它的书写方式非常好,所以我不希望它被重写,但我想添加一种方式,让用户可以选择绘图大小。我只需要两个选择,Letter和11X17。有人能告诉我要添加什么才能使这个选择可用吗?
这是原始代码:
我想我需要添加一个用户定义的变量“size”,并将其放置在现在标记为11x17的位置。我只是不知道如何写这段代码。
这是我最好的尝试,但我遇到了一个错误:
(DEFUN C:WPO (/ size )
(setq size (getkword "\n Plot Size : <Letter> "))
(COMMAND "-PLOT" "YES" "model" "HP LaserJet M5035 MFP PCL (BackOffice).pc3" size "INCHES" "LANDSCAPE" "NO" "WINDOW" PAUSE PAUSE "FIT" "CENTER" "YES" "MONOCHROME.CTB" "YES" "WIREFRAME" "NO" "NO" "YES")
(PRINC)
)
 
我应该提一下这是一个窗口情节。

Lee Mac 发表于 2022-7-6 12:34:43

查看initget函数,您需要提供一个“允许”关键字的列表。
 
需要更多的代码来将“字母”设置为默认值。

AQucsaiJr 发表于 2022-7-6 12:37:27

谢谢你的提示李。。。我得到了它!!

Lee Mac 发表于 2022-7-6 12:40:23

没问题,您最后是如何编写默认选项的?

AQucsaiJr 发表于 2022-7-6 12:43:29

这就是我得到的:
 
(DEFUN C:WP (/ size p1 p2 )
   (initget "Letter 11x17 ")
   (setq size (getkword "Paper Size: : ")
       p1 (getpoint "\nPick first corner of window: \n")
       p2 (getcorner p1 "\nPick opposite corner of window: \n"))
(COMMAND "-PLOT" "YES" "model" "HP LaserJet M5035 MFP PCL (BackOffice).pc3" size "INCHES" "LANDSCAPE" "NO" "WINDOW" P1 P2 "FIT" "CENTER" "YES" "MONOCHROME.CTB" "YES" "WIREFRAME" "NO" "NO" "YES")
(PRINC)
)

Lee Mac 发表于 2022-7-6 12:46:41

很好的一个伴侣-看起来你已经掌握了窍门
 
我们看看是否可以在那里违约?我会引导你
 
注意,如果用户点击enter,getkword的返回为nil,那么我们需要构造一些逻辑,将getkword返回nil时的选项设置为默认值。

AQucsaiJr 发表于 2022-7-6 12:49:03

在我正在阅读的书中,它没有描述如何设置默认值。我在哪里可以找到更多信息?

alanjt 发表于 2022-7-6 12:51:31

这里有一个小例子:
(DEFUN C:WP (/ size p1 p2 )
(initget "Letter 11x17 ")
(and
   (or (setq size (getkword "Paper Size: <Letter>: "))
       (setq size "Letter"))
   (setq p1 (getpoint "\nPick first corner of window: \n"))
   (setq p2 (getcorner p1 "\nPick opposite corner of window: \n"))
   (COMMAND "-PLOT" "YES" "model" "HP LaserJet M5035 MFP PCL (BackOffice).pc3" size "INCHES" "LANDSCAPE" "NO" "WINDOW" P1 P2 "FIT" "CENTER" "YES" "MONOCHROME.CTB" "YES" "WIREFRAME" "NO" "NO" "YES")
   )
(PRINC)
)

alanjt 发表于 2022-7-6 12:55:55

我还将所有内容放在and中,如果遗漏了某些内容,则退出。

AQucsaiJr 发表于 2022-7-6 12:57:22

所以,如果我这样做,我会有一个默认的信没有问题?
 
(DEFUN C:WPO (/ size p1 p2 )
   (initget "Letter 11x17 ")
   (or(setq size (getkword "Paper Size: :<Letter> "))
      (setq size "Letter"))
       (setq p1 (getpoint "\nPick first corner of window: \n"))
       (setq p2 (getcorner p1 "\nPick opposite corner of window: \n"))
(COMMAND "-PLOT" "YES" "model" "HP LaserJet M5035 MFP PCL (BackOffice).pc3" size "INCHES" "LANDSCAPE" "NO" "WINDOW" P1 P2 "FIT" "CENTER" "YES" "MONOCHROME.CTB" "YES" "WIREFRAME" "NO" "NO" "YES")
(PRINC)
)
 
如果我用(if)而不是(or)呢?
 
(DEFUN C:WPO (/ size p1 p2 )
   (initget "Letter 11x17 ")
   (if(setq size (getkword "Paper Size: :<Letter> "))
      (setq size "Letter"))
       (setq p1 (getpoint "\nPick first corner of window: \n"))
       (setq p2 (getcorner p1 "\nPick opposite corner of window: \n"))
(COMMAND "-PLOT" "YES" "model" "HP LaserJet M5035 MFP PCL (BackOffice).pc3" size "INCHES" "LANDSCAPE" "NO" "WINDOW" P1 P2 "FIT" "CENTER" "YES" "MONOCHROME.CTB" "YES" "WIREFRAME" "NO" "NO" "YES")
(PRINC)
)
 
这还能用吗?
页: [1] 2
查看完整版本: 修复我的Plot命令