明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3115|回复: 16

[讨论] 等待高人中........

[复制链接]
发表于 2013-5-16 09:52:59 | 显示全部楼层 |阅读模式
本帖最后由 朽木大师 于 2013-5-16 12:23 编辑

  1. (defun $xdob_Block_hasWipeout (blkname / e has) ;;判断BLOCK定义中是否已有wipeout
  2.   (setq has nil)
  3.   (if (xdrx_object_get "block" blkname)
  4.     (progn
  5.       (while (and
  6.                (not has)
  7.                (setq e (xdrx_object_next))
  8.              )
  9.         (if (= "AcDbWipeout" (car e))
  10.           (setq has t)
  11.         )
  12.       )
  13.     )
  14.   )
  15.   has
  16. )

  17. ;;对象表、选择集删除
  18. (defun $xdlsp_object_delete (el / e el1 ss x)
  19.   (cond
  20.     ((= (type el) 'ename)
  21.       (mapcar
  22.         '(lambda (x)
  23.            (xdrx_object_delete x)
  24.          )
  25.         el
  26.       )
  27.     )
  28.     ((= 'pickset el)
  29.       (xdrx_setsstodb ss 0)
  30.       (while (setq e (xdrx_getentdxf 0))
  31.         (xdrx_object_delete e)
  32.       )
  33.     )
  34.   )
  35. )
  36. ;;主函数,给现有的BLOCK定义,添加wipeout实体,并放入块容器最前面(避免遮罩自身块内实体)
  37. (defun $XDOB_Block_AppendWipeout (blkname tf / box e el el1 el2 ob x)
  38.   (if (and
  39.         (setq ob (xdrx_object_get "block" blkname))  ;;得到BLOCK 对象块容器对象
  40.         (not ($xdob_block_haswipeout blkname))   ;; 判断是否已经制作过wipeout
  41.       )
  42.     (progn
  43.       (while (setq e (xdrx_object_next))   ;;遍历块容器得到所有块内实体并copy到模型空间
  44.         (setq e (cadr e))
  45.         (setq el1 (cons e el))
  46.         (xdrx_entity_transformedcopy e $xdtb_matrix_mat0)
  47.         (setq el2 (cons (entlast) el2))
  48.       )
  49.       (setq el1 (reverse el1)
  50.             el2 (reverse el2)
  51.       )
  52.       ($XDLSP_Object_Delete el1)   ;;删除块内的实体,清空块,以便在第一个位置插入wipeout
  53.       (setq box (apply
  54.                   'xdrx_entity_box         ;;实体包围盒
  55.                   el2
  56.                 )
  57.       )
  58.       ($xdlsp_makewipeout box)   ;;制作wipeout
  59.       (mapcar
  60.         '(lambda (x)
  61.            (xdrx_block_append_entity blkname x)  ;;wipeout第一,然后依次插入原来的块内实体。
  62.          )
  63.         (setq el2 (cons (entlast) el2))
  64.       )
  65.       (xdrx_object_delete el2)  ;; 删除临时copy的实体。
  66.       (if tf
  67.          (command ".wipeout" "f" "off")  ;; 根据开关变量,是否显示wipeout外框
  68.       )
  69.     )
  70.   )
  71.   t
  72. )


  73. (defun c:t5 ( / blkname e e1 from_coord mat p1 to_coord to_vx to_vy to_vz)
  74.   (if (and
  75.         (setq e (car (xdrx_entsel "\n拾取插入块<退出>:" '((0 . "INSERT"))))) ;;支持filter的xdrx_entsel
  76.         (setq blkname (xdrx_getentdxf 2))  ;;得到块名
  77.         ($xdob_block_appendwipeout blkname t) ;; 制作遮罩块,不显示边框。
  78.       )
  79.     (progn
  80.       (while (and
  81.                (setq e1 (xdrx_entsel "\n拾取插入的曲线<退出>:" '((0 . "*line,arc,circle,ellipse")))) ;;拾取曲线实体
  82.                (setq p1 (xdrx_curve_closestpoint (car e1) (cadr e1)))  ;;保证点在曲线上,最近点。
  83.              )
  84.         (setq p1 (last p1)
  85.               from_coord ($xdlsp_entity_getecscoordsystem e) ;; 得到插入块的 “源实体坐标系"
  86.               to_vx (xdrx_curve_getfirstderiv (car e1) p1)         ;;目标坐标系的X轴
  87.               to_vy (xdrx_vector_perpvector to_vx)                ;;目标坐标系的Y轴
  88.               to_vz (xdrx_vector_crossproduct to_vx to_vy)  ;;目标坐标系的Z轴
  89.               to_coord (list (cadr e1) to_vx to_vy to_vz)          ;;向量叉乘得到Z轴
  90.               mat (xdrx_matrix_aligncoordsystem from_coord to_coord) ;;求得源坐标系到目标坐标系的变换矩阵
  91.         )
  92.         (xdrx_entity_transformedcopy e mat);; 作用到实体上,完成一个对齐的插入块。
  93.       )
  94.     )
  95.   )
  96.   (princ)
  97. )

本帖子中包含更多资源

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

x
 楼主| 发表于 2013-5-16 09:53:51 | 显示全部楼层
效果如上图,我不会改代码,希望有高手更新一下,原码引自XDCAD
 楼主| 发表于 2013-5-16 12:23:26 | 显示全部楼层
等待高人中........
 楼主| 发表于 2013-5-16 13:59:27 | 显示全部楼层
继续等待高人,高人
发表于 2013-5-16 14:51:10 | 显示全部楼层
本帖最后由 gzxl 于 2013-5-16 15:02 编辑

那么多未知子函数,何必那么麻烦,记得Lee Mac有个完整的源码直接拿来用就是
看这里http://www.lee-mac.com/autoblockbreak.html
发表于 2013-5-16 16:21:59 | 显示全部楼层
朽木大师 发表于 2013-5-16 09:53
效果如上图,我不会改代码,希望有高手更新一下,原码引自XDCAD

你想怎样更新?
程序中使用的很多函数都是xdrx_api的通用函数,你下载安装就可以使用了,如果要再去重写这些函数,还是很要费点功夫的。
 楼主| 发表于 2013-5-16 16:25:47 | 显示全部楼层
gzxl 发表于 2013-5-16 14:51
那么多未知子函数,何必那么麻烦,记得Lee Mac有个完整的源码直接拿来用就是
看这里http://www.lee-mac.co ...

试了一下,这个是打断,同时我也试过,发现并不是太好用,并不像演示的那样,一是打断了线,二是块也不会自动转到与线平的方式
 楼主| 发表于 2013-5-16 16:27:05 | 显示全部楼层
ll_j 发表于 2013-5-16 16:21
你想怎样更新?
程序中使用的很多函数都是xdrx_api的通用函数,你下载安装就可以使用了,如果要再去重写 ...

xdrx_api的通用函数 那个ARX文件只支持04-06 版本有点低,而且加载还挺大
发表于 2013-5-16 16:31:22 | 显示全部楼层
朽木大师 发表于 2013-5-16 09:53
效果如上图,我不会改代码,希望有高手更新一下,原码引自XDCAD

既然不追求过程,那就只要结果!
加载晓东工具箱,程序拿来直接用不就行了!
 楼主| 发表于 2013-5-17 08:25:11 | 显示全部楼层
Lisper 发表于 2013-5-16 16:31
既然不追求过程,那就只要结果!
加载晓东工具箱,程序拿来直接用不就行了!

一是支持的CAD版太低,二是为了一个功能,加载一个软件,有点不花算
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-24 07:44 , Processed in 0.840773 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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