乐筑天下

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

[编程交流] 请帮助学习LISP例程!

[复制链接]

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 11:51:28 | 显示全部楼层
 
哈哈,你会把他吓跑的。
 
这里有一种组合方式。
 
  1. (defun c:TEst (/ OldLayer NewLayer ss la)
  2. (setq OldLayer "EC_DATA_EQPM_E"
  3.        NewLayer "EC_TEXT"
  4. ) ;_ setq
  5. (cond
  6.    ((setq ss (ssget "_X" (list '(0 . "TEXT") (cons 8 OldLayer))))
  7.     (or *AcadDoc* (setq *AcadDoc* (vla-get-activedocument (vlax-get-acad-object))))
  8.     (or (tblsearch "layer" NewLayer)
  9.         (progn (setq la (vla-add (vla-get-layers *AcadDoc*) NewLayer))
  10.                (vla-put-color la 7)
  11.                (vla-put-lineweight la 25)
  12.         ) ;_ progn
  13.     ) ;_ or
  14.     (vlax-for x (setq ss (vla-get-activeselectionset *AcadDoc*))
  15.       (vl-catch-all-apply
  16.         (function vla-put-layer)
  17.         (list x la)
  18.       ) ;_ vl-catch-all-apply
  19.     ) ;_ vlax-for
  20.     (vla-delete ss)
  21.    )
  22. ) ;_ cond
  23. (princ)
  24. ) ;_ defun
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:54:49 | 显示全部楼层
哈哈,我不经常在VL中进行选择集,所以它让人耳目一新
回复

使用道具 举报

5

主题

194

帖子

193

银币

初来乍到

Rank: 1

铜币
24
发表于 2022-7-6 11:56:52 | 显示全部楼层
 
  1. 8

 
代码的顺序在这里很重要。虽然在第一印象中它看起来不错,但实际上您正在尝试将许多参数传递给if表达式。我建议查看AutoCAD的Visual Lisp IDE的帮助文件,以获取有关条件测试的信息
 
这应该行得通
 
  1. 9
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 11:59:02 | 显示全部楼层
你好。。。我对这一切都是陌生的-正如你可能知道的那样Lisp和Visual Lisp之间有什么区别?
 
哪一个最容易理解和使用,我应该用哪一个来解决这个问题?
 
谢谢
 
马库斯
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:04:54 | 显示全部楼层
Visual LISP是Vanilla LISP的扩展,它使用ActiveX模型。
 
vla-*函数是VBA组件的Visual LISP版本。
vlax-*函数没有VBA替代方案
vlr-*函数用于反应器,类似于VBA事件,但其用法/语法不同。
 
Visual LISP可能更直观,具有“vla put layer”之类的功能,但数据类型(变体/安全数组)不太直观-我建议您习惯在Vanilla LISP中处理数据,以便您习惯列表的概念,然后进入Visual LISP(至少我是这样做的)。
 
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 12:05:28 | 显示全部楼层
谢谢李的澄清,我担心这将是一个缓慢而痛苦的学习过程(主要是从错误中学习)。
 
Jammie,用那个密码。。我正在使用它,因为它似乎是最容易遵循的。在倒数第二行,它说“setq ss1”,我们还需要这个setq吗,因为它在代码中其他地方没有引用。
 
此外,它在代码中的哪里移动了文本(在EC\u DATA\u EQPM\u E上找到)到层“EC\u text”,因为我看不到那行代码?
 
谢谢
 
马库斯
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:09:22 | 显示全部楼层
Jammie写了这句话并发表了评论
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 12:13:01 | 显示全部楼层
这是正确的吗虽然现在似乎是
“错误:错误的参数类型:listp”!!
 
 
马库斯
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:14:29 | 显示全部楼层
如果要使用“subst”,请看我前面的示例。
 
Jammie的解决方案设置为使用chprop或类似命令调用。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 12:19:36 | 显示全部楼层
如果你是新手,我会坚持使用命令调用,只是为了适应编程。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 02:38 , Processed in 0.323027 second(s), 70 queries .

© 2020-2025 乐筑天下

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