乐筑天下

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

[编程交流] 内存中的最后一个实体问题

[复制链接]

20

主题

42

帖子

23

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 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)))
 
); 德芬
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:40:14 | 显示全部楼层
下面是一个供您考虑的示例:
 
PS:格式化帖子中的代码。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 07:45:25 | 显示全部楼层
考虑这个例子:
 
  1. (vl-load-com)
  2. (defun _GetPlineCoords (oPline)
  3. (vlax-get oPline 'coordinates)
  4. )
  5. (defun c:FOO (/ ss)
  6. (if (setq ss (ssget ":S:E" '((0 . "*POLYLINE"))))
  7.    (princ
  8.      (_GetPlineCoords (vlax-ename->vla-object (ssname ss 0)))
  9.    )
  10.    (prompt "\n** Nothing selected, or invalid object ** ")
  11. )
  12. (princ)
  13. )
。。。至于如何获取最后一个实体,请确保在创建要查询的实体之前存储了最后一个实体。
 
HTH公司
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 07:51:38 | 显示全部楼层
*向李挥拳*
 
 
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:56:15 | 显示全部楼层
 
小心别把你的品脱洒了
回复

使用道具 举报

20

主题

42

帖子

23

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 08:02:59 | 显示全部楼层
代码现在运行良好。谢谢!
回复

使用道具 举报

20

主题

42

帖子

23

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 08:06:52 | 显示全部楼层
谢谢
你能再帮我一点忙吗?我不想只打印坐标,而是想将它们存储在一个数组中,以便稍后用于此数组。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:10:27 | 显示全部楼层
可以使用cons函数构建坐标列表,例如:
 
替换:
  1. (print (cdr dxf))

请注意,通过其构造,列表将被反转,因此可能需要调用反转函数。
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

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

使用道具 举报

20

主题

42

帖子

23

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 08:23:28 | 显示全部楼层
谢谢为什么使用全局变量?假设您定义的“支点”没有“*”,
你会在最后收到空名单吗?括号是否对变量施加范围限制?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 04:44 , Processed in 0.375173 second(s), 72 queries .

© 2020-2025 乐筑天下

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