明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1001|回复: 6

[提问] 大佬们LISP提取三维实体的体积

  [复制链接]
发表于 2024-12-25 09:26:42 | 显示全部楼层 |阅读模式
本帖最后由 kun123322 于 2024-12-25 09:40 编辑

怎么搞,实体的体积啊,entget 没有要用的东西,用massprop怎么取啊






















回复

使用道具 举报

发表于 2024-12-25 09:35:38 | 显示全部楼层
copyhistory解析,或者vla-get
回复 支持 反对

使用道具 举报

发表于 2024-12-25 09:41:24 | 显示全部楼层
(vla-get-Volume(vlax-ename->vla-object (car(entsel"\n选择三维实体: "))))
回复 支持 反对

使用道具 举报

发表于 2024-12-27 22:11:24 | 显示全部楼层
试试我编的程序。

;;求实体重量,作者:何勇
(defun c:zhonglianghe(/ bz obj lenobj sumwt sumvm i en em vlaem vm wt pt txt1)
        (vl-load-com)
        (setq bz
                 (getreal
                   "\n 输入实体(材料)比重:[灰铸铁:7.0,铸钢:7.8,钢材:7.85,不锈钢:7.98 紫钢:8.9,铝:2.75,聚氯乙烯:1.35~1.4,聚四氟乙烯:2.1~2.3,聚丙烯:0.9~0.91,ABS树脂:1.02~1.08,花岗岩:2.6~3,混凝土:1.8~2.45,]<7.85>"
                 )
        )
        (if (= bz nil)
        (setq bz 7.85)
        )
        (setq obj (ssget '((0 . "3DSOLID"))));;只选择实体
        (setq lenobj (sslength obj));;求选择集中的实体个数
        (setq sumvm 0);;给体积和赋初值
        (setq sumwt 0);;给体重量和赋初值
        (setq i 0);;从0开始循环
                 (while (< i lenobj)
                                (setq en (ssname obj i));;求第i个实体的名称
                                (setq em (cdr (car (entget (ssname obj i)))));;从属性列表中获取对象名称
                                (setq vlaem (vlax-ename->vla-object em));;转换lisp对象为vla对象
                                (setq vm (vla-get-volume vlaem));;直接取得对象体积mm3
                                (setq vm1 (/ vm 1000000.0));;转换成立方分米dm3
                                (setq vm2 (/ vm1 1000.0));;转换成立方米m3
                                (setq wt (* bz vm1));;求重量kg
                                   (setq sumvm (+ sumvm vm2));;体积累加
                                   (setq sumwt (+ sumwt wt));;重量累加
                                   (setq i (+ i 1));;计数器加1
                 )
        (setq txt1 (strcat "体积=" (rtos sumvm 2 16) "m3," "重量=" (rtos sumwt 2 16) "kg"))
        (setvar "cecolor" "1")
        (setq pt (getpoint"\n文本起点:"))
        (command "text" pt "" "" txt1)
        (setvar "cecolor" "bylayer")
        (prompt "\n计算结果如下:")
        (princ txt1)
        (princ "\n")
        (prin1)

);;end zhonglianghe

点评

(setq bz (getreal "\n输入实体(材料)比重:[灰铸铁(7.0)/铸钢(7.8)/钢材(7.85)/不锈钢(7.98 紫钢(8.9)/铝(2.75)/聚氯乙烯(1.35~1.4)/聚四氟乙烯(2.1~2.3)/聚丙烯(0.9~0.91)/ABS...  发表于 2024-12-27 22:55
(setq em (cdr (car (entget (ssname ss i))))) 多余  发表于 2024-12-27 22:38
回复 支持 反对

使用道具 举报

发表于 2025-2-15 18:18:38 | 显示全部楼层
  1. (Vlax-Get (Vlax-Ename->Vla-Object (car (entsel))) 'Volume )
复制代码

回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-4-5 07:48 , Processed in 0.186492 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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