内存中的最后一个实体问题
你好有一个小问题。
我试图编写一个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)))
); 德芬 下面是一个供您考虑的示例:
PS:格式化帖子中的代码。 考虑这个例子:
(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公司 *向李挥拳*
小心别把你的品脱洒了 代码现在运行良好。谢谢! 谢谢
你能再帮我一点忙吗?我不想只打印坐标,而是想将它们存储在一个数组中,以便稍后用于此数组。 可以使用cons函数构建坐标列表,例如:
替换:
(print (cdr dxf))
请注意,通过其构造,列表将被反转,因此可能需要调用反转函数。 在lisp中使用列表通常要简单得多。安全阵列有点复杂。
要生成列表,请使用cons函数将值添加到列表的前面。例如,使用Lee的代码:
运行此命令后,变量*mycodinates*包含一个列表。其中的每个项目都是一个子列表,包含点的XYZ值。因此,您可以使用foreach单步遍历所有索引,或使用nth从指定索引中获取单个点。或任何其他列表函数,如append、mapcar、car、cdr等。 谢谢为什么使用全局变量?假设您定义的“支点”没有“*”,
你会在最后收到空名单吗?括号是否对变量施加范围限制?
页:
[1]
2