[求助] 计算3D实体体积,调用massprop出现的问题.
本帖最后由 作者 于 2007-2-20 18:48:05 编辑 <br /><br /> <p>以下是我在lisp中调用massprop的一行代码:</p><p>(command "massprop" (ssget) "" "y" "c:\\xx.mpr")</p><p>以上代码执行是,Autocad界面中老是弹出一个"按ENTER键继续"的对话框,有没有办法不弹出这个对话框????</p> 本帖最后由 作者 于 2007-2-20 18:41:38 编辑 <br /><br /> <p>还没有人知道怎么处理吗?</p><p>原来我做一个计算3D实体边界框的体积,用了vla-getboundingbox,但是对于一些不规则的3D实体却计算错误,所以才用massprop来计算体积,可以成功,但老是弹出"按ENTER键继续",如果选择1000个3D实体,就要按1000次enter键,有办法去掉吗??</p><p>附:以下是我用vla-getboundingbox编写的LISP,但是对于附件(20070220.dwg)中的模型,计算就会出错.</p><p>(DEFUN C:XBK (/ ent ll ur sall pp x0y0 x1y1 l w h total totale ocezin)<br/> (setvar "cmdecho" 0)<br/> (vl-load-com)<br/> (setq total 0 totale 0)<br/> (prompt "\n选择要计算体积的3D实体:")<br/> (setq sall (ssget '((0 . "3DSOLID"))) n 0)<br/> (while (setq ent (ssname sall n))<br/> (vla-getboundingbox (vlax-ename->vla-object ent) 'll 'ur)<br/> (setq pp (mapcar 'vlax-safearray->list (list ll ur)))<br/> (setq x0y0 (car pp) x1y1 (cadr pp))<br/> (setq l (abs (- (car x1y1) (car x0y0)))) ;长<br/> (setq w (abs (- (cadr x1y1) (cadr x0y0)))) ;宽<br/> (setq h (abs (- (caddr x1y1) (caddr x0y0)))) ;高<br/> (setq total (* l w h))<br/> (setq totale (+ totale total))<br/> (setq n (1+ n))<br/> )<br/> (setq ocezin (getvar "dimzin"))<br/> (setvar "dimzin" 1)<br/> (setq totale (rtos (/ totale 1000000000) 2 3))<br/> (setvar "dimzin" ocezin)<br/> (princ (strcat "\n所选3D实体的总体积为:" totale "立方米"))<br/> (setvar "cmdecho" 1)<br/> (princ)<br/>)</p> <p>;;;;Set QAFLAGS to 2 or use routine below....</p><p>(defun C:test (/ vol idx)<br/> (setq vol 0)<br/> (if (setq ss (ssget '((0 . "3DSOLID"))))<br/> (progn<br/> (setq idx 0)<br/> (while (<= idx (1- (sslength ss)))<br/> (setq vol (+ vol<br/> (vla-get-volume<br/> (vlax-ename->vla-object (ssname ss idx))<br/> )<br/> )<br/> )<br/> (setq idx (1+ idx))<br/> )<br/> )<br/> )<br/> (alert (strcat "Volume = " (rtos (/ vol 1000000000) 2 3)))<br/> (princ)<br/>)</p> <p>alin 你好:</p><p> 你写的lisp,我测试了,对于立方体计算体积是正确的,但是对于有造形的3D实体计算就有问题,如附件中的20070220.dwg,我所要计算的是3D实体的<font color="#ff0000">[边界框]</font>体积,而不是3D实体的实际体积.</p> <p>用MASSPROP得到的边界框和你程序得到的边界框是一样的,关键是看实体相对于坐标系的位置。</p><p>回到你的问题,上面已提到,将变量QAFLAGS设为2,使用MASSPROP就不用按回车。</p> <p>谢谢,原来跟坐标系有关,没有注意到,lisp还是有点不过关,努力中.....</p><p>顺便介绍一下那个LISP的用途,因为CAD自带的massprop都是计算实际体积,工作中每次画完整套墓石都会计算才数(体积*36),以便增减,那个LISP可是画墓石的设计员都应该要有的东东,只要再改造一下小数点的精度就OK了....嘿嘿嘿,大家也都学一下lisp蛮有用的.</p>
页:
[1]