明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 15315|回复: 56

[讨论] 【e派】Z轴归零问题探讨——源码揭秘

  [复制链接]
发表于 2014-5-7 18:49 | 显示全部楼层 |阅读模式
本帖最后由 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. ;; __________________________________________________________________

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

 楼主| 发表于 2014-5-8 19:46 | 显示全部楼层
;; 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. )

本帖子中包含更多资源

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

x

评分

参与人数 1明经币 +1 收起 理由
liuhaixin88 + 1 呵呵,院长这次放真源码啦

查看全部评分

回复 支持 1 反对 1

使用道具 举报

发表于 2021-2-24 15:10 | 显示全部楼层
用的天正自带的坐标归零。这个试了后,发现上传的测试图图案填充还有一些块无法坐标归零。
发表于 2017-8-30 09:26 | 显示全部楼层
ko217 发表于 2015-5-26 21:53
有块不炸开就归零的吗

期待啊
发表于 2014-5-7 18:53 | 显示全部楼层
院长厉害......垃圾处理利器
发表于 2014-5-7 18:56 | 显示全部楼层
看得见摸不着哦
发表于 2014-5-7 19:18 | 显示全部楼层
院长厉害
发表于 2014-5-8 12:42 | 显示全部楼层
期待院长的源码发放……
我的图就是这鬼样的

本帖子中包含更多资源

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

x

点评

发dwg文件测试  发表于 2014-5-8 13:02
发表于 2014-5-8 13:06 | 显示全部楼层
有程序共享不,图多了会不会致命错误

点评

图太烂估计肯定会出问题……  发表于 2014-5-8 13:11
 楼主| 发表于 2014-5-8 14:41 | 显示全部楼层

  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. )
发表于 2014-5-8 14:53 | 显示全部楼层
火前留名。。。
发表于 2014-5-8 15:02 | 显示全部楼层
院长厉害!
发表于 2014-5-8 15:24 | 显示全部楼层
这个确实很实用,顶院长!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-28 02:16 , Processed in 0.483672 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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