明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 445|回复: 8

[源码] 以最短的字符串降低块名重复的方法

  [复制链接]
发表于 2024-4-19 00:10 | 显示全部楼层 |阅读模式

经常会遇到不同图纸粘贴块参照的现象,如果两个图纸中相同块名其结构不同,粘贴会出问题,这里给出来一种方法,可以降低重复几率

  1. (defun $make-block-name$ (/ $msec/52$ f m n r s str wm y zz)
  2.   ;制作块名
  3.   (defun $msec/52$ (n zz / d ds loop n1 str)
  4.           ;52进制转换为字母

  5.     (or  n
  6.   (setq n (atoi (menucmd "M=$(edtime,$(getvar,date),MSEC)")))
  7.     )
  8.     (setq ds nil)
  9.     (setq loop T)
  10.     (while loop
  11.       (if (= (setq n1 (/ n 52)) 0)
  12.   (setq loop nil)
  13.       )
  14.       (setq d (rem n 52))
  15.       (setq ds (cons d ds))
  16.       (setq n n1)
  17.     )
  18.     (setq
  19.       str (apply 'strcat
  20.      (mapcar (function (lambda (a) (nth a zz))) ds)
  21.     )
  22.     )
  23.     str
  24.   )
  25.   (SETQ  ZZ (list "A"   "B"   "C"   "D"   "E"   "F"   "G"   "H"   "I"
  26.      "J"   "K"   "L"   "M"   "N"   "O"   "P"   "Q"   "R"
  27.      "S"   "T"   "U"   "V"   "W"   "X"   "Y"   "Z"   "A"
  28.      "a"   "b"   "c"   "d"   "e"   "f"   "g"   "h"   "i"
  29.      "j"   "k"   "l"   "m"   "n"   "o"   "p"   "q"   "r"
  30.      "s"   "t"   "u"   "v"   "w"   "x"   "y"   "z"   "a"
  31.     )
  32.   )
  33.   (setq
  34.     n ($msec/52$
  35.   (atoi (menucmd "M=$(edtime,$(getvar,date),YYYY)"))
  36.   zz
  37.       )
  38.   )          ;年
  39.   (setq y (nth (atoi (menucmd "M=$(edtime,$(getvar,date),M)")) zz))
  40.           ;月
  41.   (setq R (nth (atoi (menucmd "M=$(edtime,$(getvar,date),D)")) zz))
  42.           ;日
  43.   (setq s (nth (atoi (menucmd "M=$(edtime,$(getvar,date),HH)")) zz))
  44.           ;时
  45.   (setq  F ($msec/52$ (atoi (menucmd "M=$(edtime,$(getvar,date),MM)"))
  46.          zz
  47.     )
  48.   )
  49.           ;分
  50.   (setq  M ($msec/52$ (atoi (menucmd "M=$(edtime,$(getvar,date),SS)"))
  51.          zz
  52.     )
  53.   )          ;秒
  54.   (SETQ WM ($msec/52$ NIL zz))    ;微妙
  55.   (setq str (strcat n y r S F M WM))
  56.   str
  57. )

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2024-4-19 02:27 来自手机 | 显示全部楼层
本帖最后由 你有种再说一遍 于 2024-4-19 19:32 编辑

似乎想做成原生挺难的.
块名相同,包围盒面积相同,
块内比较:图元数比较,句柄排序,包围盒碰撞检测,颜色碰撞,图层碰撞...
块内块还需要裁剪边界碰撞,此时需要序列化图元,
所以cad是通过序列化图元进行比较的.


块表记录内是堆表(是否存在排序),按照句柄序对照判断,
多出肯定是不同,
图元序列化数据不同时候肯定是不同,问题是句柄不同,图元序列化相同,此时是忽略的.

弹出缩略图窗口选择忽略/覆盖.


发表于 2024-4-19 07:02 | 显示全部楼层
可以考虑最后图元的句柄,cad都不怕句柄重复,我们又担心什么呢?
发表于 2024-4-19 10:05 | 显示全部楼层
若是考虑“最短”,应该是毫秒的时间戳(如1713491247123)的十进制形式转64进制为最短,若要继续缩短甚至可以去掉前三位及后1位
发表于 2024-4-19 10:06 | 显示全部楼层
自贡黄明儒 发表于 2024-4-19 07:02
可以考虑最后图元的句柄,cad都不怕句柄重复,我们又担心什么呢?

一个圆,拉大半径,句柄也是一样呀...
不够保险
发表于 2024-4-19 17:16 | 显示全部楼层
tryhi 发表于 2024-4-19 10:05
若是考虑“最短”,应该是毫秒的时间戳(如1713491247123)的十进制形式转64进制为最短,若要继续缩短甚至 ...

在群里好久没看到你冒泡了啊
发表于 2024-4-19 17:58 | 显示全部楼层
要短,上汉字。
发表于 2024-4-19 20:26 | 显示全部楼层
感谢杜总个的源码分享!
发表于 2024-4-20 17:45 | 显示全部楼层
图块会忽略字母大小写

评分

参与人数 1明经币 +1 收起 理由
tryhi + 1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-5-1 21:29 , Processed in 0.272322 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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