乐筑天下

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

[编程交流] 图层检索器说明

[复制链接]

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:20:28 | 显示全部楼层 |阅读模式
大家好,
 
之前,我发布了一个线程,要求提供一个函数,该函数将成功检索活动文档中所有层的列表。
 
ASMI善意地向我提供了以下信息:
 
  1. (defun laylist (/ oLst)
  2.    (vl-load-com)
  3.    (vlax-for l
  4.        (vla-get-Layers
  5.            (vla-get-ActiveDocument
  6.            (vlax-get-acad-object)
  7.            ) ;_  end vla-get-ActiveDocument
  8.        ) ;_  end vla-get-Layers
  9.    (setq oLst
  10.         (cons (vla-get-Name l) oLst)
  11.    ) ; end setq
  12.    ) ; end vlax-for
  13.    (setq oLst (reverse oLst))
  14. ) ;_  end defun

 
然而,当我试图借助Vlide帮助文件来分析这一点时,我无法确定函数的实际功能。
 
我意识到可能有一种更简单的方法来检索这样的列表,而不必涉猎Active X方法,也许:
 
  1. (defun laylist (/ lay oLst)
  2.    (setq lay (tblnext "LAYER" T))
  3.    (while lay
  4.    (setq oLst (cons (cdr (assoc 2 lay)) oLst)
  5.          lay  (tblnext "LAYER")
  6.    ) ;_  end setq
  7.    ) ;_  end while
  8.    (setq oLst (reverse oLst))
  9. ) ;_  end defun

但是我真的很想开始理解VL,因为我发现它可以做的比普通的LISP多得多,-(从ASMI的几个例子来看…)
 
如果您能帮助我们逐步解释ASMI的代码,我们将不胜感激。
 
谢谢各位,
 
回复

使用道具 举报

1

主题

316

帖子

311

银币

初来乍到

Rank: 1

铜币
29
发表于 2022-7-6 15:32:26 | 显示全部楼层
我不是最好的解释,但以下是我最简单的解释:
无论何时,当你对vla表达式中发生的事情感到怀疑时,你总是可以转储以查看其中的内容:
您可以在vlide中逐个运行:
(vl load com)
(vlax dump Object(vlax get acad Object)t)
 
(vlax转储对象(vla get ActiveDocument
(vlax get acad object))t)
(vlax转储对象(vla get Layers
(vla获取ActiveDocument
(vlax get acad对象)
) ;_ 结束vla获取ActiveDocument
) ;_ 结束vla获取层
t)
 
vlax for类似于autolisp中的foreach,在这里用于单步/循环遍历层集合,在autolisp中也称为层表。您还需要了解autocad对象模型层次,以了解哪些是应用程序对象,
文档对象,
集合对象,
图形和非图形对象,
首选项、打印和实用程序对象
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 15:41:06 | 显示全部楼层
李,
 
我从来没有想过vl函数在任何需要可读性或效率的地方。是的,他们可以做一些AutoLisp有问题的事情,但总的来说这不适合我-大卫
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:57:54 | 显示全部楼层
 
好的,大卫,首先,
 
我知道你从哪里来——我也不太喜欢他们,但我觉得我不知道他们能做什么,这让我处于劣势。
 
这里的一些问题我感到困惑,然后有人来用VL解决了它们,所以我认为最好深入研究一下,看看这是怎么回事。
 
感谢您在那里提供了检索层的简短片段,您在某种程度上简化了我的例程。
 
我认为(tblnext“layer”(不是tdef))在第一次迭代时返回(tblnext“layer”T),否则返回(tblnext“layer”nil),因此从表的开头开始。这是正确的吗?
 
再次感谢。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 16:02:41 | 显示全部楼层
 
威兹曼,
 
谢谢你的回复,我真的很感谢你花时间帮助我理解这一点。
 
继续浏览您发布的代码,我可以看到VL是如何建立的,一个命令接一个命令。
 
我看到了如何通过每个额外的代码部分缩小要检索的项的范围。
 
感谢您的帮助性演练。
 
干杯
 
回复

使用道具 举报

CAB

29

主题

781

帖子

430

银币

中流砥柱

Rank: 25

铜币
526
发表于 2022-7-6 16:18:58 | 显示全部楼层
查看VLIDE帮助/内容/
162029o3l4i1oltlkoaokl.jpg
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 16:28:47 | 显示全部楼层
干杯,出租车,我去看看。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 19:04 , Processed in 1.053282 second(s), 68 queries .

© 2020-2025 乐筑天下

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