找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 674|回复: 1

[实体] (XD::Entity:Fingerprint)获取实体的“指纹”

[复制链接]

已领礼包: 40个

财富等级: 招财进宝

发表于 2019-1-18 11:19:56 | 显示全部楼层 |阅读模式
函数发布
函数名称: xd::entity:fingerprint
调用格式: (xd::entity:fingerprint ent mode)
参数说明: ent ------ 实体名
mode ----- 1:图层信息添加到指纹
2: 颜色信息添加到指纹
4:线型信息添加到指纹
可组合,7表示图层、颜色、线型都添加到指纹
返回值: 字符串
函数简介: 获取实体的“指纹”,两个实体的指纹相同,表明这两个相同类型实体在空间完全重叠
函数来源: 原创
函数作者: newer
适用版本: XDRX API 
最后更新时间: 2019-01-18
备注: -
演示图片: -

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

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

×
本帖最后由 newer 于 2019-1-18 11:25 编辑

通过这个函数,可以把很多耗时的工作,变成线性一次遍历就解决。比如查找完全重叠的实体

  1. (defun xd::entity:fingerprint (e          mode             /
  2.                                #center          #color     #endangle
  3.                                #endpoint  #layer     #linetype
  4.                                #majoraxis #majorradius
  5.                                #radius          #startangle
  6.                                #startpoint             ar
  7.                                area          blk             box
  8.                                cen          cen1             d
  9.                                data          data1             len
  10.                                minoraxis  minorradius
  11.                                nums          pt             pts
  12.                                typ          x
  13.                               )
  14.   (defun _pttostr (pt)
  15.     (apply 'strcat (mapcar '(lambda (x) (rtos x 2 3)) pt))
  16.   )
  17.   (setq typ (car (xdrx_object_classname e)))
  18.   (setq        box (xdrx_entity_box e)
  19.         cen (xd::geom:get9pt box 5)
  20.         cen (_pttostr cen)
  21.   )
  22.   (cond        ((wcmatch typ "*POLYLINE")
  23.          (setq nums  (xdrx_getpropertyvalue e "numverts")
  24.                pts   (xdrx_getpropertyvalue e "vertices")
  25.                pts   (if (xdrx_curve_direction e)
  26.                        pts
  27.                        (reverse pts)
  28.                      )
  29.                len   (xdrx_getpropertyvalue e "length")
  30.                ar    (xdrx_getpropertyvalue e "area")
  31.                cen   (xdrx_getpropertyvalue e "centroid")
  32.                data1 (xdrx_prompt
  33.                        nums
  34.                        (rtos len 2 3)
  35.                        (rtos ar 2 3)
  36.                        (_pttostr cen)
  37.                        (mapcar '(lambda (x) (_pttostr x)) pts)
  38.                        t
  39.                      )
  40.                data  data1
  41.          )
  42.         )
  43.         ((= typ "ARC")
  44.          (setq data (xdrx_getpropertyvalue
  45.                       e        "center" "radius" "startangle" "endangle")
  46.                data (xdrx_prompt
  47.                       (_pttostr #center)
  48.                       (rtos #radius 2 3)
  49.                       (rtos #startangle 2 3)
  50.                       (rtos #endangle 2 3)
  51.                       t
  52.                     )
  53.          )
  54.         )
  55.         ((= typ "CIRCLE")
  56.          (setq data (xdrx_getpropertyvalue e "center" "radius")
  57.                data (xdrx_prompt (_pttostr #center) (rtos #radius 2 3) t)
  58.          )
  59.         )
  60.         ((= typ "ELLIPSE")
  61.          (xdrx_getpropertyvalue
  62.            e                    "center"             "majorradius"
  63.            "majoraxis"            "minorradius"    "minoraxis"
  64.            "startangle"            "endangle"             "radiusratio"
  65.           )
  66.          (setq data (xdrx_prompt
  67.                       (_pttostr #center)
  68.                       (rtos #majorradius 2 3)
  69.                       (_pttostr #majoraxis)
  70.                       (rtos minorradius 2 3)
  71.                       (_pttostr minoraxis)
  72.                       (rtos #startangle 2 3)
  73.                       (rtos #endangle 2 3)
  74.                       t
  75.                     )
  76.          )
  77.          (xdrx_string_md5hash data)
  78.         )
  79.         ((= typ "LINE")
  80.          (xdrx_getpropertyvalue e "startpoint" "endpoint")
  81.          (setq data
  82.                 (xdrx_prompt (_pttostr #startpoint) (_pttostr #endpoint) t)
  83.          )
  84.         )
  85.         ((= typ "TEXT")
  86.          (setq box (xdrx_text_box e)
  87.                cen (xd::geom:get9pt box 5))
  88.          (xdrx_getpropertyvalue e "textstring")
  89.          (setq data
  90.                 (xdrx_prompt #textstring (apply 'strcat (mapcar '(lambda(x)(_pttostr x)) (cons cen box))))
  91.          )
  92.         )
  93.         ((wcmatch typ "*DIM*")
  94.          (xdrx_getpropertyvalue e "Measurement" "textbox")
  95.          (setq data
  96.                 (xdrx_prompt (rtos #Measurement 2 1) (apply 'strcat (mapcar '(lambda(x)(_pttostr x)) #textbox)))
  97.          )
  98.         )
  99.         ((= typ "HATCH")
  100.          (setq box   (xdrx_entity_box e)
  101.                cen   (xd::geom:get9pt box 5)
  102.                cen   (_pttostr cen)
  103.                data1 (apply
  104.                        'strcat
  105.                        (mapcar
  106.                          '(lambda (x)
  107.                             (setq d    (xdrx_getpropertyvalue e "getloopat" x)
  108.                                   cen1 (xdrx_getpropertyvalue d "centroid")
  109.                                   len  (xdrx_getpropertyvalue d "length")
  110.                                   area (xdrx_getpropertyvalue d "area")
  111.                             )
  112.                             (xdrx_object_release d)
  113.                             (xdrx_prompt
  114.                               (itoa x)
  115.                               (_pttostr cen1)
  116.                               (rtos len 2 1)
  117.                               (rtos area 2 1)
  118.                               t
  119.                             )
  120.                           )
  121.                          (xd::list:flat
  122.                            (xdrx_getpropertyvalue e "rootloops" "childloops")
  123.                          )
  124.                        )
  125.                      )
  126.          )
  127.          (setq data (strcat cen data1))
  128.         )
  129.         ((= typ "INSERT")
  130.          (setq blk  (xdrx_getpropertyvalue e "blocktablerecord" nil)
  131.                data (strcat (strcase blk) cen)
  132.          )
  133.         )
  134.         (t
  135.          (setq
  136.            data        (strcat
  137.                   cen
  138.                   (apply 'strcat (mapcar '(lambda (x) (_pttostr x)) box))
  139.                 )
  140.          )
  141.         )
  142.   )
  143.   (if data
  144.     (progn (xdrx_getpropertyvalue e "layer" nil "color" "linetype" nil)
  145.            (if (= (logand mode 1) 1)
  146.              (setq data (strcat #layer data))
  147.            )
  148.            (if (= (logand mode 2) 2)
  149.              (setq data        (strcat        (if (listp #color)
  150.                                   (_pttostr #color)
  151.                                   (itoa #color)
  152.                                 )
  153.                                 data
  154.                         )
  155.              )
  156.            )
  157.            (if (= (logand mode) 4)
  158.              (setq data (strcat #linetype data))
  159.            )
  160.            (setq data (strcat typ data))
  161.            (xdrx_string_md5hash data)
  162.     )
  163.   )
  164. )

命令: (xd::entity:fingerprint (entlast) 1)
"a7376d1b73c801e11b9e254cc2bf7118"



论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 158个

财富等级: 日进斗金

发表于 2019-1-18 13:15:51 来自手机 | 显示全部楼层
什么是实体的指纹
来自: 微社区
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 18:51 , Processed in 0.265649 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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