assafius 发表于 2022-7-6 07:33:26

内存中的最后一个实体问题

你好
有一个小问题。
我试图编写一个Lisp代码,其中用户首先绘制一条多段线,然后函数立即返回其坐标。
问题是我的函数返回坐标。在最近绘制的多段线之前绘制的多段线。在激活该功能之前,AutoCAD是否引用其内存中的最后一个图元?我该怎么办?
 
以下是我的小代码:
 
(defun get_coords()
 
(vl load com)
;绘制一条多段线,提取它并将其转换为vla对象
(setq userPolyline(vlax ename->vla object(entlast)))
 
(setq userPolyVertices(vlax get property userPolyline坐标))
;将userPolyVertices(#变体)转换为列表:
(setq userPolyVertices(vlax safearray->list(variant value userPolyVertices)))
 
); 德芬

Lee Mac 发表于 2022-7-6 07:40:14

下面是一个供您考虑的示例:
 
PS:格式化帖子中的代码。

BlackBox 发表于 2022-7-6 07:45:25

考虑这个例子:
 

(vl-load-com)

(defun _GetPlineCoords (oPline)
(vlax-get oPline 'coordinates)
)

(defun c:FOO (/ ss)
(if (setq ss (ssget ":S:E" '((0 . "*POLYLINE"))))
   (princ
   (_GetPlineCoords (vlax-ename->vla-object (ssname ss 0)))
   )
   (prompt "\n** Nothing selected, or invalid object ** ")
)
(princ)
)
。。。至于如何获取最后一个实体,请确保在创建要查询的实体之前存储了最后一个实体。
 
HTH公司

BlackBox 发表于 2022-7-6 07:51:38

*向李挥拳*
 
 

Lee Mac 发表于 2022-7-6 07:56:15

 
小心别把你的品脱洒了

assafius 发表于 2022-7-6 08:02:59

代码现在运行良好。谢谢!

assafius 发表于 2022-7-6 08:06:52

谢谢
你能再帮我一点忙吗?我不想只打印坐标,而是想将它们存储在一个数组中,以便稍后用于此数组。

Lee Mac 发表于 2022-7-6 08:10:27

可以使用cons函数构建坐标列表,例如:
 
替换:
(print (cdr dxf))
请注意,通过其构造,列表将被反转,因此可能需要调用反转函数。

irneb 发表于 2022-7-6 08:15:17

在lisp中使用列表通常要简单得多。安全阵列有点复杂。 
要生成列表,请使用cons函数将值添加到列表的前面。例如,使用Lee的代码:
运行此命令后,变量*mycodinates*包含一个列表。其中的每个项目都是一个子列表,包含点的XYZ值。因此,您可以使用foreach单步遍历所有索引,或使用nth从指定索引中获取单个点。或任何其他列表函数,如append、mapcar、car、cdr等。

assafius 发表于 2022-7-6 08:23:28

谢谢为什么使用全局变量?假设您定义的“支点”没有“*”,
你会在最后收到空名单吗?括号是否对变量施加范围限制?
页: [1] 2
查看完整版本: 内存中的最后一个实体问题