乐筑天下

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

[编程交流] Lisp不工作

[复制链接]

95

主题

477

帖子

383

银币

后起之秀

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

铜币
475
发表于 2022-7-5 18:17:36 | 显示全部楼层 |阅读模式
我有一个很快的问题,为什么我的Lisp程序程序不起作用。运行以下代码时,我收到错误“error.bad function.0.5”:
奇怪的是,这应该是一个非常简单的例行程序,我不明白为什么我的0.5距离不起作用。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:21:19 | 显示全部楼层
快速浏览后,更改:
  1. (command "._OffsetFeature" ("0.5" ss pause "0.5" ""))

收件人:
  1. (command "._OffsetFeature" "0.5" ss pause "0.5" "")
回复

使用道具 举报

95

主题

477

帖子

383

银币

后起之秀

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

铜币
475
发表于 2022-7-5 18:24:14 | 显示全部楼层
谢谢李,我知道这是一个愚蠢的错误。最近我花了很多时间在visual lisp中写作,现在我在AutoLISP中犯了愚蠢的错误哈哈。
回复

使用道具 举报

95

主题

477

帖子

383

银币

后起之秀

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

铜币
475
发表于 2022-7-5 18:27:34 | 显示全部楼层
因此,当我在这方面做得更多的时候,我决定让用户能够更改其偏移的距离并升高路缘。我很好奇如何制作一个ssget函数,它不只是说“选择对象”,而是做“选择对象或[设置]”,类似于命令行版本对许多不同命令的工作方式。
回复

使用道具 举报

95

主题

477

帖子

383

银币

后起之秀

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

铜币
475
发表于 2022-7-5 18:33:04 | 显示全部楼层
所以我决定使用entsel函数,尽管它会产生更复杂的if语句。我的问题是,当我输入设置时,我会得到“错误:错误参数类型:consp”设置,如果我选择一条要素线,则表示未选择任何内容。我想知道这是否与我在设置中使用getreal有关,但我不知道为什么我选择要素线时它无法识别。
  1. (defun CheckorGetSurface ()
  2. (while
  3.    (not
  4.      (and
  5. (setq SurfaceDefaultAdd
  6.        (car
  7.   (entsel
  8.     "\rSelect the Main Surace you to be the default: "
  9.   )
  10.        )
  11. )
  12. (= "AECC_TIN_SURFACE"
  13.    (cdr (assoc 0 (entget SurfaceDefaultAdd)))
  14. )
  15.      )
  16.    )
  17. )
  18. )
  19. (defun c:makeparkingcurb (/ ss ss1 *error*)
  20. (defun *error* (msg)
  21.    (if (not
  22.   (member msg '("Function cancelled" "quit / exit abort"))
  23. )
  24.      (princ (strcat "\nError: " msg))
  25.    )
  26.    (princ)
  27. )
  28. (if (not SurfaceDefaultAdd)
  29.    (CheckorGetSurface)
  30. )
  31. (initget 1 "Settings")
  32. (setq ss
  33. (car
  34.    (entsel
  35.      "\n Select the feature line you want to offset [settings]: "
  36.    )
  37. )
  38. )
  39.       
  40. (if ss
  41.    (if (= ss "Settings")
  42.    (progn
  43.      (setq offsetdist (cond ( (getreal "\nOffset Distance <0.5>: ") ) ( "0.5" )))
  44.      (setq offsetheight (cond ( (getreal "\nOffset Distance <0.5>: ") ) ( "0.5" )))
  45.      )
  46.    )
  47.    (progn
  48.      (setq entlist (entget ss))
  49.      (if (= "AECC_FEATURE_LINE" (cdr (assoc 0 entlist)))
  50. (progn
  51.   (command "._OffsetFeature" offsetdist ss)
  52.   (princ "\nSpecify side to offset: ")
  53.   (command pause offsetheight "")
  54.   (setq ss1 (entlast))
  55.   (command "._AddSurfaceBreaklines" SurfaceDefaultAdd ss1 "")
  56. )
  57.      )
  58.      (princ "\nNot a feature line")
  59.    )
  60. )
  61. (princ "\nNothing selected")
  62. (princ)
  63. )
回复

使用道具 举报

20

主题

338

帖子

323

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-5 18:36:12 | 显示全部楼层
你的代码有几件事有点奇怪。如果我能提几个建议。
 
1.如果您使用的是实体名称,可能您的setq ss应该是setq ent。这使阅读您的代码的人能够快速识别您使用的是实体名称,而不是选择集。
 
2.Offsetdist和OffsetEight默认不设置。如果我第一次运行这段代码,并且没有运行设置,那么offsetdist为零。
 
3.您应该循环原始提示,这样,如果您进行设置,它会将您带回原始提示。
 
4.ss1也应该是ent1。否则,看起来ss1应该是一个选择集,而不是。
回复

使用道具 举报

20

主题

338

帖子

323

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-5 18:38:40 | 显示全部楼层
我喜欢使用getcfg和setcfg来存储和检索我的程序默认值。我还将创建一个处理设置的子例程和一个处理选择的子例程。通过这种方式,您可以从设置的末尾调用选择,以提供我所描述的循环。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 18:41:53 | 显示全部楼层
Civ3D中最难看的事情之一是关闭选择等,所以我写了一个工具栏界面和一个拨号选择保存到工具空间,所以在你的代码上面的拨号将出现允许默认曲面设置的好处是,如果你只有一个曲面,它将设置为defualt,而不需要选择。如果您查看图像,可以看到轮廓作为工具栏项,包括黑色sq关闭的三角形。欢迎使用代码。拉链里有自述文件。
191746xanoo7zoawov6ww6.jpg
Chtourstolbar。拉链
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:43:07 | 显示全部楼层
 
(entsel)在选择关键字时返回字符串;在这种情况下,(car(entsel))将出错,因为(car)仅在列表上操作。
回复

使用道具 举报

95

主题

477

帖子

383

银币

后起之秀

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

铜币
475
发表于 2022-7-5 18:48:08 | 显示全部楼层
Hippe013,非常感谢你的建议。我试图将它们合并到代码中(我忘了添加以检查变量是否已创建,谢谢!)。比格尔,那个工具栏太棒了!李,谢谢你提供关于恩塞尔和汽车的信息。然而,我一直在搞乱代码,现在我得到了错误”;错误:错误的COND语法:(ENT((…)( ... ) ( ... )) (( ... ) ( ... )) (( ... ) ( ... ) ( ... )))“而且代码不会加载。我对LISP还是很陌生,所以我不知道如何在无法加载的情况下调试代码。我的新代码如下:
  1. (defun CheckorGetSurface ()
  2. (while
  3.    (not
  4.      (and
  5. (setq SurfaceDefaultAdd
  6.        (car
  7.   (entsel
  8.     "\rSelect the Main Surace you to be the default: "
  9.   )
  10.        )
  11. )
  12. (= "AECC_TIN_SURFACE"
  13.    (cdr (assoc 0 (entget SurfaceDefaultAdd)))
  14. )
  15.      )
  16.    )
  17. )
  18. )
  19. (defun c:makeparkingcurb (/ ent ent1 *error*)
  20. (defun *error* (msg)
  21.    (if (not
  22.   (member msg '("Function cancelled" "quit / exit abort"))
  23. )
  24.      (princ (strcat "\nError: " msg))
  25.    )
  26.    (princ)
  27. )
  28. (if (not SurfaceDefaultAdd)
  29.    (CheckorGetSurface)
  30. )
  31. (if (not *offsetdistans*)
  32.    (setq *offsetdistans* 0.5)
  33. )
  34. (if (not *offsetheightans*)
  35.    (setq *offsetheightans* 0.5)
  36. )
  37. (setq whilestop t)
  38. (while whilestop
  39.    (initget 1 "Settings eXit")
  40.    (setq ent (entsel
  41.      "\n Select the feature line you want to offset [settings eXit]: "
  42.    )
  43.    )
  44.    (cond
  45.      ent
  46.      ((= ent "Settings")
  47.       (setq *offsetdistans*
  48.       (cond
  49. ((getreal "\nOffset Distance" "" (*offsetdistans*) ":")
  50. )
  51. (*offsetdistans*)
  52.       )
  53.       )
  54.       (setq *offsetheightans*
  55.       (cond
  56. ((getreal "\nOffset Distance" "" (*offsetheightans*) ":")
  57. )
  58. (*offsetheightans*)
  59.       )
  60.       )
  61.      )
  62.      ((= ent "Settings")
  63.       (setq whilestop nil))
  64.      ((setq entlist (entget ent))
  65.       (cond (= "AECC_FEATURE_LINE" (cdr (assoc 0 entlist)))
  66.    (command "._OffsetFeature" *offsetdistans* ent)
  67.    (princ "\nSpecify side to offset: ")
  68.    (command pause *offsetheightans* "")
  69.    (setq ent1 (entlast))
  70.    (command "._AddSurfaceBreaklines" SurfaceDefaultAdd ent1 "")
  71.       )
  72.       (princ "\nNot a feature line")
  73.      )
  74.    )
  75. )
  76. (princ "\nNothing selected")
  77. (princ)
  78. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 19:42 , Processed in 0.407571 second(s), 74 queries .

© 2020-2025 乐筑天下

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