找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4676|回复: 5

[图块] (XD::Block:Wipeout)给图块添加遮罩(显示顺序图块所有实体下面)

[复制链接]

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-6-15 11:06:37 | 显示全部楼层 |阅读模式
函数发布
函数名称: XD::Block:Wipeout
调用格式: (XD::Block:Wipeout blk mod offset tf)
参数说明: blk --- 图块名 or insert实体名 or BLOCK实体名
mod -- 0 :矩形包围盒
1:最小包围圆
2:轮廓线
offset -- 外偏距离
tf --- T 强制更新,删除原有的遮罩,NIL如果存在遮罩不更新
返回值: T or NIL
函数简介: 给图块添加遮罩(显示顺序图块所有实体下面),并把数据库中所有引用的INSERT实体显示顺序置顶。
函数来源: 原创
函数作者: Newer
适用版本: XDRX API 
最后更新时间: 2016-06-15
备注: -
演示图片:

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
本帖最后由 newer 于 2016-6-15 11:25 编辑

  1. (defun XD::Block:Wipeout (blk mod offset tf / box class e len mat mode
  2.                               name ss tf1 typ
  3.                          )
  4.   (setq typ (type blk)
  5.         tf1 nil
  6.   )
  7.   (cond
  8.     ((= typ 'STR)
  9.       (if (setq e (xdrx_block_getentities blk '((0 . "wipeout"))))
  10.         (if tf
  11.           (progn
  12.             (xdrx_entity_delete e)
  13.             (setq tf1 t)
  14.           )
  15.         )
  16.         (setq tf1 t)
  17.       )
  18.       (if tf1
  19.         (progn
  20.           (setq e (xdrx_block_getEntities t blk)
  21.                 box (xdrx_entity_box e)
  22.           )
  23.           (cond
  24.             ((= mod 1)
  25.               (setq box (xdrx_points_mincircle box))
  26.               (setq e (apply
  27.                         'xdrx_circle_make
  28.                         box
  29.                       )
  30.               )
  31.               (setq len (xdrx_getpropertyvalue e "length"))
  32.               (setq box (xdrx_getsamplept e (/ len 1080.0)))
  33.               (xdrx_entity_delete e)
  34.             )
  35.             ((= mod 2)
  36.               (setq mat (xdrx_matrix_identity 3))
  37.               (setq ss (xdrx_entity_transformedcopy e mat))
  38.               (mapcar
  39.                 '(lambda (x)
  40.                    (if (= (car (xdrx_object_classname x)) "POLYLINE")
  41.                      (xdrx_polyline_convertFrom x)
  42.                    )
  43.                  )
  44.                 (xdrx_pickset->ents ss)
  45.               )
  46.               (setq box (xdrx_geom_searchoutline ss))
  47.               (xdrx_entity_delete ss)
  48.             )
  49.           )
  50.           (if (> offset 0)
  51.             (setq box (xdrx_points_offset offset (xd::pnts:close box)))
  52.           )
  53.           (if (setq e (apply
  54.                         'xdrx_wipeout_make
  55.                         box
  56.                       )
  57.               )
  58.             (progn
  59.               (xdrx_block_appendEntity blk e t)
  60.               (setq e (xdrx_block_getentities blk '((0 . "wipeout"))))
  61.               (xdrx_draworder->back (car e))
  62.               (xdrx_block_update blk)
  63.               (if (setq e (xdrx_block->Insert blk))
  64.                 (apply
  65.                   'xdrx_draworder->top
  66.                   (xdrx_pickset->ents e)
  67.                 )
  68.               )
  69.               t
  70.             )
  71.           )
  72.         )
  73.       )
  74.     )
  75.     ((= typ 'ENAME)
  76.       (setq class (car (xdrx_object_classname blk)))
  77.       (cond
  78.         ((= class "BLOCK")
  79.           (setq name (xdrx_getpropertyvalue blk "name"))
  80.           (XD::BLOCK:AppendWipeout name mod offset tf)
  81.         )
  82.         ((= class "INSERT")
  83.           (setq name (car (xdrx_getpropertyvalue blk "blocktablerecord")))
  84.           (XD::BLOCK:Wipeout name mod offset tf)
  85.         )
  86.       )
  87.     )
  88.   )
  89. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 40个

财富等级: 招财进宝

 楼主| 发表于 2016-6-15 11:22:31 | 显示全部楼层
测试工具
  1. (defun c:tt ()
  2.   (xdrx_begin)
  3.   (xdrx_initget 128 "0 1 2")
  4.   (initget 128 "0 1 2")
  5.   (if (and
  6.         (setq e (car (xdrx_entsel "\n拾取图块<退出>:" '((0 . "INSERT")))))
  7.         (setq op (getint "\nWIPEOUT方式[包围盒(0)/圆(1)/轮廓(2)]<退出>:"))
  8.       )
  9.     (progn
  10.        (xd::block:wipeout (car (xdrx_getpropertyvalue e "blocktablerecord")) op 0.0 t)
  11.     )
  12.   )
  13.   (xdrx_end)
  14.   (princ)
  15. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8612个

财富等级: 富甲天下

发表于 2016-6-15 13:19:23 | 显示全部楼层
和xdrx_Insert_appendWipeout的区别是?

点评

增强, 多了 最小包围圆做边界,也支持直接给块名(不是INSERT),因为有的时候块并没有明确的INSERT出现,比如匿名块,通过xdrx_insert_appendwipeout 就无能为力了。  详情 回复 发表于 2016-6-15 13:54
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

 楼主| 发表于 2016-6-15 13:54:24 | 显示全部楼层
liuyj 发表于 2016-6-15 13:19
和xdrx_Insert_appendWipeout的区别是?

增强, 多了 最小包围圆做边界,也支持直接给块名(不是INSERT),因为有的时候块并没有明确的INSERT出现,比如匿名块,通过xdrx_insert_appendwipeout 就无能为力了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2017-6-2 14:35:50 | 显示全部楼层
看不懂,两个代码我应该用哪个?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2017-6-2 21:08:33 | 显示全部楼层
谢谢楼主分享
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-22 06:55 , Processed in 0.206399 second(s), 44 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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