本帖最后由 xyp1964 于 2014-5-8 14:53 编辑

属性块内的属性文本:

普通块内的实体:

;; 先从简单的开始

  1. ;; Z轴归零主函数 zzgl
  2. ;; 实例: (zzgl (setq s1 (car (entsel "\n选择: "))))
  3. (defun zzgl (s1)
  4.   ;; 适合于一般实体
  5.   (foreach a '(10 11 12 13 14)
  6.     (zzgl-dxf s1 a)
  7.   )
  8. )
  9. ;; __________________________________________________________________
  10. ;; 以下为自定义函数,大部分代码都曾经开源过
  11. ;; __________________________________________________________________
  12. (defun xyp-DXF (code s1 / ent lst a)
  13.   (if (= (type code) 'LIST)
  14.     (progn
  15.       (setq ent (entget s1)
  16.             lst        '()
  17.       )
  18.       (foreach a code
  19.         (setq lst (cons (list a (cdr (assoc a ent))) lst))
  20.       )
  21.       (reverse lst)
  22.     )
  23.     (if (= code -3)
  24.       (cdr (assoc code (entget s1 '("*"))))
  25.       (cdr (assoc code (entget s1)))
  26.     )
  27.   )
  28. )

  29. (defun xyp-Etype (s1 etype)
  30.   (wcmatch (xyp-DXF 0 s1) (strcase etype))
  31. )

  32. (defun xyp-SubUpd (s1 code val / ent x y i s1)
  33.   (cond ((= (type s1) 'ENAME)
  34.          (setq ent (entget s1))
  35.          (if (and (= (type code) 'LIST) (= (type val) 'LIST))
  36.            (mapcar '(lambda (x y) (xyp-SubUpd s1 x y)) code val)
  37.            (progn
  38.              (if (= (xyp-dxf code s1) nil)
  39.                (entmod (append ent (list (cons code val))))
  40.                (entmod (subst (cons code val) (assoc code ent) ent))
  41.              )
  42.              (entupd s1)
  43.            )
  44.          )
  45.         )
  46.         ((= (type s1) 'PICKSET)
  47.          (setq i -1)
  48.          (while (setq s2 (ssname s1 (setq i (1+ i))))
  49.            (xyp-SubUpd s2 code val)
  50.          )
  51.         )
  52.         ((= (type s1) 'LIST)
  53.          (foreach s2 s1 (xyp-SubUpd s2 code val))
  54.         )
  55.   )
  56.   s1
  57. )

  58. (defun zzgl-dxf (s1 mode / pt)
  59.   (if (and (setq pt (xyp-dxf mode s1))
  60.            (/= (caddr pt) 0)
  61.       )
  62.     (xyp-SubUpd s1 mode (list (car pt) (cadr pt) 0))
  63.   )
  64. )
  65. ;; __________________________________________________________________
  66. ;; 自定义函数
  67. ;; __________________________________________________________________


网友答: ;; spline、arc 、块内实体、dxf 210码不正常等等的实体——待后续研究

  1. ;; zzgl(Z轴归零)
  2. ;; 测试实例
  3. (defun c:zzgl ()
  4.   (princ "\n选择归零实体: ")
  5.   (if (setq ss (ssget))
  6.     (setq lst (xyp-Ss2List ss)
  7.           lst (mapcar 'xyp-Zzgl lst)
  8.     )
  9.   )
  10.   (princ)
  11. )

  12. ;; Z轴归零主函数 xyp-Zzgl
  13. (defun xyp-Zzgl        (s1 / p10)
  14.   ;; 属性块实体: 先移位后属性实体归零
  15.   (if (and (xyp-Etype s1 "insert")
  16.            (= (xyp-Dxf 66 s1) 1)
  17.       )
  18.     (progn
  19.       (setq p10 (xyp-Dxf 10 s1))
  20.       (xyp-Move s1 p10 (list (car p10) (cadr p10) 0))
  21.       (foreach ob (xyp-AttList s1)
  22.         (xyp-Zzgl (vlax-vla-object->ename ob))
  23.       )
  24.     )
  25.   )
  26.   ;; 一般实体
  27.   (foreach a '(10 11 12 13 14)
  28.     (xyp-Zzgl-Dxf s1 a)
  29.   )
  30.   ;; 有38码的实体
  31.   (if (/= (setq pt (xyp-Dxf 38 s1)) 0)
  32.     (xyp-SubUpd s1 38 0)
  33.   )
  34.   ;; spline实体、arc 实体、块内实体、dxf 210码不正常的实体
  35. )



网友答: 用的天正自带的坐标归零。这个试了后,发现上传的测试图图案填充还有一些块无法坐标归零。

网友答:
ko217 发表于 2015-5-26 21:53
有块不炸开就归零的吗

期待啊

网友答: 院长厉害......垃圾处理利器

网友答: 看得见摸不着哦

网友答: 院长厉害

网友答: 期待院长的源码发放……
我的图就是这鬼样的

网友答: 有程序共享不,图多了会不会致命错误

网友答:

  1. ;; Z轴归零主函数 zzgl
  2. ;; (zzgl (setq s1 (car (entsel "\n选择: "))))
  3. (defun zzgl (ename)
  4.   ;; 适合于一般实体
  5.   (foreach a '(10 11 12 13 14)
  6.     (zzgl-dxf ename a)
  7.   )
  8.   ;; 存在38码的实体
  9.   (if (/= (setq pt (xyp-dxf 38 ename)) 0)
  10.     (xyp-SUBUPD ename 38 0)
  11.   )
  12. )


网友答: 火前留名。。。

网友答: 院长厉害!

网友答: 这个确实很实用,顶院长!
  • 上一篇:【飞鸟集】数据取整(更新至2020.10)
  • 下一篇:没有了