找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2594|回复: 16

[已解决] 新人第一帖,求助massprop获取体积 (已解决)

[复制链接]
发表于 2014-12-4 22:58:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 rsent 于 2014-12-17 14:33 编辑

(defun c:vv()
(setq a (ssget))
(setq Volume (vla-get-Volume a))
(princ Volume)
)


代码是不是不对,感觉a好像是值,不是对象。刚刚学lsp,请大家帮帮我。好人一生平安。。


感谢newer版主和dwp@hamco的帮助。。非常感谢你们。。
最后自己东凑西凑总算把 可以把得出的体积复制到 剪贴板,不容易。。
完整代码在17楼

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-12-4 23:06:45 | 显示全部楼层
你说的对,(ssget)返回的是选择集,不是OBJ对象,你要把实体转换成VLA对象,然后做

  1. (defun c:vv ()
  2.   (if (and
  3.         (setq a (car (entsel)))
  4.         (setq ob (vlax-ename->vla-object a))
  5.       )
  6.     (progn
  7.       (setq Volume (vla-get-Volume ob))
  8.       (princ Volume)
  9.     )
  10.   )
  11.   (princ)
  12. )


令: vv
选择对象: 4.89581e+006

点评

谢谢了。。代码是对的。只是还有一点点的问题。就是现在只能选择一个。可以设置为框选吗?得到框选里所有实体的体积。  详情 回复 发表于 2014-12-5 09:03
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1742个

财富等级: 堆金积玉

发表于 2014-12-5 07:57:38 | 显示全部楼层
昨天,我好像在群里回答过你:):)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-5 09:03:14 | 显示全部楼层
newer 发表于 2014-12-4 23:06
你说的对,(ssget)返回的是选择集,不是OBJ对象,你要把实体转换成VLA对象,然后做

谢谢了。。代码是对的。只是还有一点点的问题。就是现在只能选择一个。可以设置为框选吗?得到框选里所有实体的体积。

点评

要框选,那你就建个选集,然后循环提出每个实体重复做上面的操作了 (setq ss (ssget)) (setq len (sslength ss)) (repeat len (setq ent (ssname ss i) i (1+ i) ) .....做你上  详情 回复 发表于 2014-12-5 09:07
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2014-12-5 09:07:40 | 显示全部楼层
rsent 发表于 2014-12-5 09:03
谢谢了。。代码是对的。只是还有一点点的问题。就是现在只能选择一个。可以设置为框选吗?得到框选里所有 ...

要框选,那你就建个选集,然后循环提出每个实体重复做上面的操作了
(setq ss (ssget))
(setq len (sslength ss))
(repeat len
     (setq ent (ssname ss i)
              i (1+ i)
     )
     .....做你上面那个函数
)

点评

是得到最后 总的体积吗? 可以直接由框选目标得到总体积吗?  详情 回复 发表于 2014-12-5 09:10
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-12-5 09:08:34 | 显示全部楼层
技术上当然不是问题,代码稍作修改就可以。问题是,你一次选了一堆实体,电脑给你报出一堆体积数据,你知道哪个是哪个?是张三还是李四脸上长麻子?

点评

我只要总体积。单个的体积对我没用。想知道这个零件的总体积,算出重量。可以帮我修改下吗。我改为ssget ,显示总是错误的。  详情 回复 发表于 2014-12-5 09:27
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-5 09:10:39 | 显示全部楼层
Lisphk 发表于 2014-12-5 09:07
要框选,那你就建个选集,然后循环提出每个实体重复做上面的操作了
(setq ss (ssget))
(setq len (ssle ...

是得到最后 总的体积吗?  可以直接由框选目标得到总体积吗?

点评

哦,你要得总体积,那你应该在循环外面设个累加和的初始值,然后在循环体里面累加就是了,让你填的代码不是返回一个面积嘛,你把它累加到总和的变量上。  详情 回复 发表于 2014-12-5 09:15
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2014-12-5 09:15:47 | 显示全部楼层
rsent 发表于 2014-12-5 09:10
是得到最后 总的体积吗?  可以直接由框选目标得到总体积吗?

哦,你要得总体积,那你应该在循环外面设个累加和的初始值,然后在循环体里面累加就是了,让你填的代码不是返回一个面积嘛,你把它累加到总和的变量上。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-5 09:27:00 | 显示全部楼层
dwp@hamco 发表于 2014-12-5 09:08
技术上当然不是问题,代码稍作修改就可以。问题是,你一次选了一堆实体,电脑给你报出一堆体积数据,你知道 ...

我只要总体积。单个的体积对我没用。想知道这个零件的总体积,算出重量。可以帮我修改下吗。我改为ssget   ,显示总是错误的。{:soso_e179:}

点评

上面我基本上代码都替你写了啊,你是怎么改的,你贴下。  详情 回复 发表于 2014-12-5 09:30
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-12-5 09:27:55 来自手机 | 显示全部楼层
Lisphk 发表于 2014-12-5 09:15
哦,你要得总体积,那你应该在循环外面设个累加和的初始值,然后在循环体里面累加就是了,让你填的代码不 ...

求列表值,最后apply + 也可以
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2014-12-5 09:30:37 | 显示全部楼层
rsent 发表于 2014-12-5 09:27
我只要总体积。单个的体积对我没用。想知道这个零件的总体积,算出重量。可以帮我修改下吗。我改为ssget  ...

上面我基本上代码都替你写了啊,你是怎么改的,你贴下。

点评

(defun c:vv () (if (and (setq a (ssget)) (setq ob (vlax-ename->vla-object a)) ) (progn (setq Volume (vla-get-Volume ob)) (princ Volume) ) ) (princ))  详情 回复 发表于 2014-12-5 09:53
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-5 09:53:38 | 显示全部楼层
Lisphk 发表于 2014-12-5 09:30
上面我基本上代码都替你写了啊,你是怎么改的,你贴下。

(defun c:vv ()
(if (and        
(setq a (ssget))     
(setq ob (vlax-ename->vla-object a))      )   
(progn      (setq Volume (vla-get-Volume ob))     
(princ Volume)    )  )  
(princ))


我是新手。。刚刚开始学。。就把原来楼上的代码改了下。发现改错了。。- -

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-5 09:58:35 | 显示全部楼层
本帖最后由 rsent 于 2014-12-5 10:00 编辑

感觉你说的读。。要把所以的值加在一起。。我一次性得不出总体积?

以前我都是直接massprop

选择对象: 指定对角点: 找到 17 个

选择对象:
----------------   实体    ----------------

质量:                    60930558.0000
体积:                    60930558.0000
边界框:               X: 37723.3028  --  38873.3028
                      Y: 413.5535  --  1463.5535
                      Z: -350.0000  --  33.0000

再复制体积。 可以提取这个体积的数值啊。。massprop  已经计算出来了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-12-5 09:58:40 | 显示全部楼层
  1. (vl-load-com)
  2. (defun c:vv(/ ss v-sum i ent)
  3.   (setq ss(ssget '((0 . "3DSOLID"))))
  4.   (setq v-sum 0 i 0)
  5.   (repeat (sslength ss)
  6.     (setq ent(ssname ss i))
  7.     (setq ent(vlax-ename->vla-object ent))
  8.     (setq v-sum(+ (vla-get-volume ent) v-sum))
  9.     (setq i (1+ i))
  10.     )

  11.   (alert (strcat "\n一共选择了" (itoa (sslength ss)) "个实体,总体积是:" (rtos v-sum 2 2)))  
  12.   (princ)
  13. )


点评

非常棒!! 很完美解决我的问题。。非常感觉你。。还想问一下。lisp里有没有 把文字复制到粘贴板的功能。。 我的意思是把体积直接ctrl+c复制。。我再复制到其他的地方。  详情 回复 发表于 2014-12-5 10:11
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-5 10:11:00 | 显示全部楼层

非常棒!! 很完美解决我的问题。。非常感觉你。。还想问一下。lisp里有没有 把文字复制到粘贴板的功能。。 我的意思是把体积直接ctrl+c复制。。我再复制到其他的地方。{:soso_e179:}{:soso_e179:}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-21 11:18 , Processed in 0.444929 second(s), 67 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表