乐筑天下

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

[编程交流] Lisp-圆

[复制链接]

3

主题

9

帖子

6

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 17:03:21 | 显示全部楼层 |阅读模式
Hy,
 
我是论坛的新手,也是Lisp程序的新手。我试图创建一个lisp,但它不工作。如果有人能帮我,我会非常感激的。
 
我需要一个带条件的lisp,如果我写一个关键字,lisp会将一个数字与关键字相关联。我写了这样的东西:
 
  1. (DEFUN c:HM (CNT DIAM)
  2. (SETQ CNT (GETPOINT "\nselect circle center"))
  3. ;click the center of the circle
  4. (INITGET 1 "1Pul 2Pul")
  5. (SETQ PUL (GETKWORD "\n1Pul, 2Pul:"))
  6. ;To do not write the real diameter number
  7.         (cond
  8.           ((= PUL "1Pul") (SETQ DIAM 0.033401))
  9.         ((= PUL "2Pul") (SETQ DIAM 0.060325))
  10. ) ;End conditional
  11.                         (command "circle" cnt "D" DIAM)
  12.                         ;draw the circle
  13. (PRINC)
  14. )
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 17:07:27 | 显示全部楼层
你的代码很好,只是参数错了,
更改此项:
  1. (DEFUN c:HM (CNT DIAM)

收件人:
  1. (DEFUN c:HM ([color="red"][b] / [/b][/color]CNT DIAM)

塔瓦给了我一些提示:
  1. (command "_.circle" [color="red"][b]"_non"[/b][/color] cnt "D" DIAM)
回复

使用道具 举报

3

主题

9

帖子

6

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 17:12:49 | 显示全部楼层
现在可以了,非常感谢。
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-5 17:14:27 | 显示全部楼层
作为新手,现在是养成良好编程习惯的好时机:
 
  1. [b][color=BLACK]([/color][/b]defun c:hm [b][color=FUCHSIA]([/color][/b]/ cnt pul diam[b][color=FUCHSIA])[/color][/b]
  2. [b][color=FUCHSIA]([/color][/b]initget 1[b][color=FUCHSIA])[/color][/b]
  3. [b][color=FUCHSIA]([/color][/b]setq cnt [b][color=NAVY]([/color][/b]getpoint [color=#2f4f4f]"\nSelect circle center:   "[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  4. [b][color=FUCHSIA]([/color][/b]initget 1 [color=#2f4f4f]"1Pul 2Pul"[/color][b][color=FUCHSIA])[/color][/b]
  5. [b][color=FUCHSIA]([/color][/b]setq pul [b][color=NAVY]([/color][/b]getkword[color=#2f4f4f]"\nDiameter : 1Pul/2Pul:   "[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  6. [b][color=FUCHSIA]([/color][/b]setq diam [b][color=NAVY]([/color][/b]cond [b][color=MAROON]([/color][/b][b][color=GREEN]([/color][/b]= pul [color=#2f4f4f]"1Pul"[/color][b][color=GREEN])[/color][/b] 0.033401[b][color=MAROON])[/color][/b]
  7.                   [b][color=MAROON]([/color][/b][b][color=GREEN]([/color][/b]= pul [color=#2f4f4f]"2Pul"[/color][b][color=GREEN])[/color][/b] 0.060325[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  8. [b][color=FUCHSIA]([/color][/b]command [color=#2f4f4f]"_.CIRCLE"[/color] [color=#2f4f4f]"_non"[/color] cnt [color=#2f4f4f]"_D"[/color] diam[b][color=FUCHSIA])[/color][/b]
  9. [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

 
 
尽量在使用的格式上保持一致。这使得以后搜索短语或测试更加容易。
 
由于这和许多点对点论坛都有国际语言成员访问,因此使用下划线作为命令和参数很有帮助。此外,命令之前的时间段确保重新定义的命令被覆盖。
 
AutoLisp是一种可读性很强的语言,如果考虑到代码的总体布局,它对您来说非常容易。
 
祝你好运,玩得开心-大卫
 
PS查看[noparse]
在线程中发布代码时,[code][/code][/noparse]标记
回复

使用道具 举报

3

主题

9

帖子

6

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 17:18:19 | 显示全部楼层
 
你用什么来画圆?这是什么意思?
回复

使用道具 举报

3

主题

9

帖子

6

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 17:21:56 | 显示全部楼层
非常感谢David抽出时间!我会尽量听从你的建议。
 
我有一个问题:
 
 
它是什么(prin1)?与(prin)的区别是什么?抱歉,如果问题是。。。很愚蠢,但我学习autolisp语言已经两周了。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 17:24:36 | 显示全部楼层
 
有时,当代码必须计算新创建对象的点或位置时,它会失败,用户最终会在错误的位置上绘制对象。
例如,代码会随机捕捉到一些您不想捕捉的点。以下是最近出现此类问题的帖子:
http://www.cadtutor.net/forum/showthread.php?98541-尝试创建2行,但autolisp随机重叠-为什么?
然后您有2个选项:
-存储osmode变量,将其设置为0,完成后将其重置。
-只需在命令调用中的每个点参数之前包含“_non”。在您的例子中,该变量是“cnt”。有关“非”的更多信息:http://www.lee-mac.com/scriptwriting.html
 
以下是存储和重置osmode系统变量的示例:
  1. (defun C:test ( / *error* osm ) ; always localise our variables (unless we know what we are doing)
  2. (defun *error* ; define the error-handler function
  3.         (alert (strcat "\nError occured, now you are inside the *error* function \nand reseting the osmode variable!"))
  4.         (if osm (setvar 'osmode osm)) ; when your code crashes, it will check and reset the osmode value
  5.         (princ)
  6. ); defun *error*
  7. (setq osm (getvar 'osmode)) ; store our osmode value into a variable
  8. (setvar 'osmode 0) ; set osmode to 0
  9. ; < here the code creates/draws its stuff >
  10. (initget 1) (getstring "\nPress ESC to force an error: ")
  11. (alert (strcat "\nThe code is done, exiting without errors \nand reseting the osmode variable!"))
  12. (setvar 'osmode osm) ; reset the osmode variable
  13. (princ)
  14. ); defun

运行代码,键入一些内容并按“ENTER”,然后再次运行代码,然后按“ESC”。
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-5 17:27:42 | 显示全部楼层
 
不客气。
 
在这种情况下,不会太多。这里的目的是尽可能地在命令行的视觉上退出加载并干净地运行程序。
 
http://forums.augi.com/showthread.php?111705-差异-Between-PRINT-PRINC-amp-PRIN1
 
IRNEB在第6篇文章中有非常简单的解释。
 
-大卫
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-5 17:34:22 | 显示全部楼层
 
从没听说过。但我很肯定我不会喜欢的。
 
我关闭了所有工具栏/图标/浮动内容。带有滚轮和键盘的2键鼠标。而鼠标在99.9%的时间里只拾取点。我的0.02美元
 
在这里的人们的帮助下,我终于在2012年看起来不错了。
180325oiprvi7gstw5lazy.jpg
回复

使用道具 举报

17

主题

1274

帖子

25

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
260
发表于 2022-7-5 17:37:45 | 显示全部楼层
 
您仍然可以键入与以前相同的选项,并且它不使用工具栏或图标,它只是使命令行上显示的选项更容易查看,并且可以使用鼠标或右键快捷菜单作为选项进行选择。就像标准AutoCAD命令一样,如FILLET。为了使键入选项更容易,每个选项所需的文本部分都显示为蓝色,因此实际上更容易按您的方式执行。
 
过来看!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 02:11 , Processed in 1.811986 second(s), 74 queries .

© 2020-2025 乐筑天下

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