明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3563|回复: 5

[求助] 计算3D实体体积,调用massprop出现的问题.

  [复制链接]
发表于 2007-2-20 17:31:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2007-2-20 18:48:05 编辑

以下是我在lisp中调用massprop的一行代码:

(command "massprop" (ssget) "" "y" "c:\\xx.mpr")

以上代码执行是,AutoCAD界面中老是弹出一个"按ENTER键继续"的对话框,有没有办法不弹出这个对话框????

 楼主| 发表于 2007-2-20 18:38:00 | 显示全部楼层
本帖最后由 作者 于 2007-2-20 18:41:38 编辑

还没有人知道怎么处理吗?

原来我做一个计算3D实体边界框的体积,用了vla-getboundingbox,但是对于一些不规则的3D实体却计算错误,所以才用massprop来计算体积,可以成功,但老是弹出"按ENTER键继续",如果选择1000个3D实体,就要按1000次enter键,有办法去掉吗??

附:以下是我用vla-getboundingbox编写的LISP,但是对于附件(20070220.dwg)中的模型,计算就会出错.

(DEFUN C:XBK (/ ent ll ur sall pp x0y0 x1y1 l w h total totale ocezin)
  (setvar "cmdecho" 0)
  (vl-load-com)
  (setq total 0 totale 0)
  (prompt "\n选择要计算体积的3D实体:")
  (setq sall (ssget '((0 . "3DSOLID"))) n 0)
  (while (setq ent (ssname sall n))
     (vla-getboundingbox (vlax-ename->vla-object ent) 'll 'ur)
     (setq pp (mapcar 'vlax-safearray->list (list ll ur)))
     (setq x0y0 (car pp) x1y1 (cadr pp))
     (setq l (abs (- (car x1y1) (car x0y0))))     ;长
     (setq w (abs (- (cadr x1y1) (cadr x0y0))))   ;宽
     (setq h (abs (- (caddr x1y1) (caddr x0y0)))) ;高
     (setq total (* l w h))
     (setq totale (+ totale total))
     (setq n (1+ n))
  )
  (setq ocezin (getvar "dimzin"))
  (setvar "dimzin" 1)
  (setq totale (rtos (/ totale 1000000000) 2 3))
  (setvar "dimzin" ocezin)
  (princ (strcat "\n所选3D实体的总体积为:" totale "立方米"))
  (setvar "cmdecho" 1)
  (princ)
)

本帖子中包含更多资源

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

x
发表于 2007-2-20 21:18:00 | 显示全部楼层

;;;;Set QAFLAGS to 2 or use routine below....

(defun C:test (/ vol idx)
  (setq vol 0)
  (if (setq ss (ssget '((0 . "3DSOLID"))))
    (progn
      (setq idx 0)
      (while (<= idx (1- (sslength ss)))
 (setq vol (+ vol
       (vla-get-volume
         (vlax-ename->vla-object (ssname ss idx))
       )
    )
 )
 (setq idx (1+ idx))
      )
    )
  )
  (alert (strcat "Volume = " (rtos (/ vol 1000000000) 2 3)))
  (princ)
)

 楼主| 发表于 2007-2-20 22:01:00 | 显示全部楼层

alin 你好:

  你写的lisp,我测试了,对于立方体计算体积是正确的,但是对于有造形的3D实体计算就有问题,如附件中的20070220.dwg,我所要计算的是3D实体的[边界框]体积,而不是3D实体的实际体积.

发表于 2007-2-21 10:10:00 | 显示全部楼层

用MASSPROP得到的边界框和你程序得到的边界框是一样的,关键是看实体相对于坐标系的位置。

回到你的问题,上面已提到,将变量QAFLAGS设为2,使用MASSPROP就不用按回车。

 楼主| 发表于 2007-2-21 12:51:00 | 显示全部楼层

谢谢,原来跟坐标系有关,没有注意到,lisp还是有点不过关,努力中.....

顺便介绍一下那个LISP的用途,因为CAD自带的massprop都是计算实际体积,工作中每次画完整套墓石都会计算才数(体积*36),以便增减,那个LISP可是画墓石的设计员都应该要有的东东,只要再改造一下小数点的精度就OK了....嘿嘿嘿,大家也都学一下lisp蛮有用的.

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

本版积分规则

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

GMT+8, 2024-11-15 22:26 , Processed in 0.158696 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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