乐筑天下

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

[编程交流] 这个Lisp程序怎么了?

[复制链接]

51

主题

481

帖子

457

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
262
发表于 2022-7-6 11:51:24 | 显示全部楼层 |阅读模式
这个Lisp程序怎么了?
 
 
这行没有给出任何结果
回复

使用道具 举报

4

主题

940

帖子

961

银币

初来乍到

Rank: 1

铜币
12
发表于 2022-7-6 11:58:30 | 显示全部楼层
可能是因为(vla get MomentOfInertia…返回了一个变体,而不是真实的
试试这个(不是很多测试)
  1. (defun c:MMNT ()
  2. (vl-load-com)
  3. (if (and (setq ent (car (entsel "\nSelect Object: ")))
  4. (setq pt (getpoint "\nPick a Point: ")))
  5. (progn
  6. (setq obj (vlax-ename->vla-object ent))
  7. (if (vlax-property-available-p obj 'momentOfInertia)
  8. (progn ; SUBPROGN
  9. (setq var (vla-get-MomentOfInertia obj)
  10.      sa (vlax-variant-value var)
  11.      lst (vlax-safearray->list sa)
  12.      MNT (strcat (rtos (car lst) 2 4) " "(rtos (cadr lst) 2 4 ))
  13.          )
  14. (entmakex (list (cons 0 "TEXT")
  15. (cons 10 pt)
  16. (cons 40 (getvar "TEXTSIZE"))
  17. (cons 1 MNT)
  18. ) ; end LIST
  19. ) ; end entmakex
  20. ) ; end SUBPROGN
  21. (princ "\n** Invalid Object Selected **")
  22. ) ;END IF
  23. ) ; END PROGN
  24. ) ; END IF
  25. (princ)
  26. )
回复

使用道具 举报

24

主题

1265

帖子

1028

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
362
发表于 2022-7-6 12:01:26 | 显示全部楼层
逐步检查代码并检查返回值。。。。
 
(vla get MomentOfInertia obj)返回一个变量,(rtos)需要一个实数。
 
  1. (vlax-safearray->list
  2.   (vlax-variant-value
  3.      (vla-get-MomentOfInertia obj)
  4.   )
  5. )
  6. ;;;will return the value in list form.
  7. ;;;Then you can format this as desired.

 
 
编辑:lpseifert已经为您准备好了。。。。
回复

使用道具 举报

51

主题

481

帖子

457

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
262
发表于 2022-7-6 12:02:52 | 显示全部楼层
不工作
回复

使用道具 举报

4

主题

940

帖子

961

银币

初来乍到

Rank: 1

铜币
12
发表于 2022-7-6 12:07:04 | 显示全部楼层
不知怎的,在复制/粘贴过程中丢失了一些东西。。。现在就试试
回复

使用道具 举报

51

主题

481

帖子

457

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
262
发表于 2022-7-6 12:11:02 | 显示全部楼层
它正在工作
它在一行中,我将分成两行
谢谢
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:14:21 | 显示全部楼层
您可以通过以下方式避免变体:
 
  1. (vlax-get obj 'MomentofInteria)

 
回复

使用道具 举报

51

主题

481

帖子

457

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
262
发表于 2022-7-6 12:18:36 | 显示全部楼层

 
我试试告诉你
我该做的是,
代替
具有
 
我做了,但这个错误
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:22:14 | 显示全部楼层
仅使用Larry的代码:
 
  1. (defun c:MMNT  (/ ent pt obj lst MNT)
  2. (vl-load-com)
  3. (if (and (setq ent (car (entsel "\nSelect Object: ")))
  4.           (setq pt  (getpoint "\nPick a Point: ")))
  5.    (progn
  6.      (setq obj (vlax-ename->vla-object ent))
  7.      (if (vlax-property-available-p obj 'MomentOfInertia)
  8.        (progn
  9.          (setq lst (vlax-get obj 'MomentofInertia)
  10.                MNT (strcat (rtos (car lst) 2 4) " " (rtos (cadr lst) 2 4)))
  11.          
  12.          (entmakex (list (cons 0 "TEXT")
  13.                          (cons 10 pt)
  14.                          (cons 40 (getvar "TEXTSIZE"))
  15.                          (cons 1 MNT))))
  16.       
  17.        (princ "\n** Invalid Object Selected **"))))
  18.    
  19. (princ))
回复

使用道具 举报

4

主题

940

帖子

961

银币

初来乍到

Rank: 1

铜币
12
发表于 2022-7-6 12:26:59 | 显示全部楼层
我应该想到的。。。我前几天刚在theSwamp上读到这篇文章。在可能的情况下,更干净地避免那些危险的变体。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-5 10:12 , Processed in 0.328799 second(s), 72 queries .

© 2020-2025 乐筑天下

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