等待高人中........
本帖最后由 朽木大师 于 2013-5-16 12:23 编辑(defun $xdob_Block_hasWipeout (blkname / e has) ;;判断BLOCK定义中是否已有wipeout
(setq has nil)
(if (xdrx_object_get "block" blkname)
(progn
(while (and
(not has)
(setq e (xdrx_object_next))
)
(if (= "AcDbWipeout" (car e))
(setq has t)
)
)
)
)
has
)
;;对象表、选择集删除
(defun $xdlsp_object_delete (el / e el1 ss x)
(cond
((= (type el) 'ename)
(mapcar
'(lambda (x)
(xdrx_object_delete x)
)
el
)
)
((= 'pickset el)
(xdrx_setsstodb ss 0)
(while (setq e (xdrx_getentdxf 0))
(xdrx_object_delete e)
)
)
)
)
;;主函数,给现有的BLOCK定义,添加wipeout实体,并放入块容器最前面(避免遮罩自身块内实体)
(defun $XDOB_Block_AppendWipeout (blkname tf / box e el el1 el2 ob x)
(if (and
(setq ob (xdrx_object_get "block" blkname));;得到BLOCK 对象块容器对象
(not ($xdob_block_haswipeout blkname)) ;; 判断是否已经制作过wipeout
)
(progn
(while (setq e (xdrx_object_next)) ;;遍历块容器得到所有块内实体并copy到模型空间
(setq e (cadr e))
(setq el1 (cons e el))
(xdrx_entity_transformedcopy e $xdtb_matrix_mat0)
(setq el2 (cons (entlast) el2))
)
(setq el1 (reverse el1)
el2 (reverse el2)
)
($XDLSP_Object_Delete el1) ;;删除块内的实体,清空块,以便在第一个位置插入wipeout
(setq box (apply
'xdrx_entity_box ;;实体包围盒
el2
)
)
($xdlsp_makewipeout box) ;;制作wipeout
(mapcar
'(lambda (x)
(xdrx_block_append_entity blkname x);;wipeout第一,然后依次插入原来的块内实体。
)
(setq el2 (cons (entlast) el2))
)
(xdrx_object_delete el2);; 删除临时copy的实体。
(if tf
(command ".wipeout" "f" "off");; 根据开关变量,是否显示wipeout外框
)
)
)
t
)
(defun c:t5 ( / blkname e e1 from_coord mat p1 to_coord to_vx to_vy to_vz)
(if (and
(setq e (car (xdrx_entsel "\n拾取插入块<退出>:" '((0 . "INSERT"))))) ;;支持filter的xdrx_entsel
(setq blkname (xdrx_getentdxf 2));;得到块名
($xdob_block_appendwipeout blkname t) ;; 制作遮罩块,不显示边框。
)
(progn
(while (and
(setq e1 (xdrx_entsel "\n拾取插入的曲线<退出>:" '((0 . "*line,arc,circle,ellipse")))) ;;拾取曲线实体
(setq p1 (xdrx_curve_closestpoint (car e1) (cadr e1)));;保证点在曲线上,最近点。
)
(setq p1 (last p1)
from_coord ($xdlsp_entity_getecscoordsystem e) ;; 得到插入块的 “源实体坐标系"
to_vx (xdrx_curve_getfirstderiv (car e1) p1) ;;目标坐标系的X轴
to_vy (xdrx_vector_perpvector to_vx) ;;目标坐标系的Y轴
to_vz (xdrx_vector_crossproduct to_vx to_vy);;目标坐标系的Z轴
to_coord (list (cadr e1) to_vx to_vy to_vz) ;;向量叉乘得到Z轴
mat (xdrx_matrix_aligncoordsystem from_coord to_coord) ;;求得源坐标系到目标坐标系的变换矩阵
)
(xdrx_entity_transformedcopy e mat);; 作用到实体上,完成一个对齐的插入块。
)
)
)
(princ)
)
效果如上图,我不会改代码,希望有高手更新一下,原码引自XDCAD 等待高人中........ 继续等待高人,高人 本帖最后由 gzxl 于 2013-5-16 15:02 编辑
那么多未知子函数,何必那么麻烦,记得Lee Mac有个完整的源码直接拿来用就是
看这里http://www.lee-mac.com/autoblockbreak.html 朽木大师 发表于 2013-5-16 09:53 static/image/common/back.gif
效果如上图,我不会改代码,希望有高手更新一下,原码引自XDCAD
你想怎样更新?
程序中使用的很多函数都是xdrx_api的通用函数,你下载安装就可以使用了,如果要再去重写这些函数,还是很要费点功夫的。 gzxl 发表于 2013-5-16 14:51 static/image/common/back.gif
那么多未知子函数,何必那么麻烦,记得Lee Mac有个完整的源码直接拿来用就是
看这里http://www.lee-mac.co ...
试了一下,这个是打断,同时我也试过,发现并不是太好用,并不像演示的那样,一是打断了线,二是块也不会自动转到与线平的方式 ll_j 发表于 2013-5-16 16:21 static/image/common/back.gif
你想怎样更新?
程序中使用的很多函数都是xdrx_api的通用函数,你下载安装就可以使用了,如果要再去重写 ...
xdrx_api的通用函数 那个ARX文件只支持04-06 版本有点低,而且加载还挺大 朽木大师 发表于 2013-5-16 09:53 static/image/common/back.gif
效果如上图,我不会改代码,希望有高手更新一下,原码引自XDCAD
既然不追求过程,那就只要结果!
加载晓东工具箱,程序拿来直接用不就行了! Lisper 发表于 2013-5-16 16:31 static/image/common/back.gif
既然不追求过程,那就只要结果!
加载晓东工具箱,程序拿来直接用不就行了!
一是支持的CAD版太低,二是为了一个功能,加载一个软件,有点不花算
页:
[1]
2