乐筑天下

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

[编程交流] “安全阵列”帮助

[复制链接]

13

主题

75

帖子

62

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-6 11:48:35 | 显示全部楼层 |阅读模式
我对lisp很陌生,没有太多时间学习,这有什么问题?
 
  1. (defun c:se (/ ent obj d delta dx dy se)
  2. (vl-load-com)
  3. (if (setq ent (entsel "\nSelecione a LINHA: "))
  4.    (progn
  5.      (setq obj (vlax-ename->vla-object (car ent)))
  6.      (setq d (vla-get-delta obj))
  7.      (setq delta (vlax-safearray->list
  8.      (vlax-variant-value d)))
  9.      (setq dx (car delta))
  10.      (setq dy (cdr delta))
  11.      (setq se ( / dy dx))
  12.      (princ se)
  13.      
  14.      )
  15.    )
  16. )
  17.      

 
我只需要“delta x”和“delta y”值,但是,lisp返回的是“加倍”值。我该怎么修?
 
我非常感谢你的帮助。谢谢
回复

使用道具 举报

15

主题

687

帖子

169

银币

中流砥柱

Rank: 25

铜币
582
发表于 2022-7-6 11:59:26 | 显示全部楼层
你好
 
尝试:
  1. (setq delta (vlax-get obj 'delta))
回复

使用道具 举报

13

主题

75

帖子

62

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-6 12:04:04 | 显示全部楼层
吉尔,非常感谢你的帖子,但我也犯了同样的错误。错误是:列表重复,如下所示:“-20.0 5.0 0.0”(-20.0 5.0 0.0)”
 
当我执行“(car delta)”时,它返回:“-20.0-20.0”,“cdr delta”返回“5.05.0”
 
我该怎么修?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:09:44 | 显示全部楼层
这对我来说似乎很好?
 
  1. (defun c:test (/ ent obj)
  2. (vl-load-com)
  3. (while
  4.    (progn
  5.      (setq ent (car (entsel "\nSelect Line: ")))
  6.      (cond (  (eq 'ENAME (type ent))
  7.               (if (vlax-property-available-p
  8.                     (setq obj (vlax-ename->vla-object ent)) 'Delta)
  9.                 (print
  10.                   (vlax-safearray->list
  11.                     (vlax-variant-value
  12.                       (vla-get-Delta obj))))
  13.                 (princ "\n** Invalid Object **"))))))
  14. (princ))
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:11:00 | 显示全部楼层
啊,记住princ将把值打印到屏幕上,但是princ函数的返回值将是刚刚打印的值。
 
因此,你可能需要用另一个普林斯来遵循它。
回复

使用道具 举报

2

主题

47

帖子

45

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 12:17:01 | 显示全部楼层
 
你说的列表是什么意思?
 
在我看来,这是一个字符串,如果是这样,使用read转换为list,然后使用car表示x,使用cadr表示y值。
 
看看是否有帮助。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:25:02 | 显示全部楼层
这:
 
  1. (defun c:se (/ ent obj d delta dx dy se)
  2. (vl-load-com)
  3. (if (setq ent (entsel "\nSelecione a LINHA: "))
  4.    (progn
  5.      (setq obj (vlax-ename->vla-object (car ent)))
  6.      (setq d (vla-get-delta obj))
  7.      (setq delta (vlax-safearray->list
  8.      (vlax-variant-value d)))
  9.      (setq dx (car delta))
  10.      (setq dy (c[color=Red][b]a[/b][/color]dr delta))
  11.      (setq se ( / dy dx))
  12.      (princ se)
  13.      
  14.      )
  15.    )
  16. [color=Red][b](princ)[/b][/color]
  17. )
回复

使用道具 举报

2

主题

47

帖子

45

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 12:28:32 | 显示全部楼层
或简单地删除princ调用,这样它将返回命令行上的最后一个值。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:36:54 | 显示全部楼层
 
或者-是的
 
BlackAlnet,
 
为了您自己的利益,我建议您在Visual LISP编辑器帮助文件中阅读本文:
 
 
124840clabaublae1t1tp8.png
回复

使用道具 举报

13

主题

75

帖子

62

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-6 12:41:30 | 显示全部楼层
@李麦克
 
您的代码一如既往地优雅。我仍然缺少一些小东西,我想这是因为我对LISP的经验很少。非常感谢你的帮助,伙计
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-5 10:32 , Processed in 0.909935 second(s), 74 queries .

© 2020-2025 乐筑天下

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