明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6942|回复: 19

[分享]zzgl(Z轴归零)

  [复制链接]
发表于 2010-8-31 17:18 | 显示全部楼层 |阅读模式

zzgl(Z轴归零):zzgl

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2024-6-14 00:11 | 显示全部楼层
我觉得做成“Z值归零”一个函数→用来应对“连接直线与多段线”→不同标高或者Z值时→需要手动调整后再执行连接命令的情况→以最快速度统一归一个具体值→再执行连接功能→会比较快捷!
发表于 2021-8-31 20:08 | 显示全部楼层
chlh_jd 发表于 2010-8-31 21:34
借院长宝地,发一下我拼凑的ZZGL;原理是对ACAD自身图元进行归零,对无法使用修改标高归零的对象通过MOVE移 ...

程序整理不出来啊
发表于 2021-9-1 07:48 | 显示全部楼层
谢谢分享下载学习
发表于 2010-8-31 21:30 | 显示全部楼层

下载了几次没下载成功,占个一楼跟高手亲密接触下

发表于 2010-8-31 21:34 | 显示全部楼层
本帖最后由 作者 于 2010-9-26 22:36:13 编辑

借院长宝地,发一下我拼凑的ZZGL;原理是对ACAD自身图元进行归零,对无法使用修改标高归零的对象通过MOVE移动到无穷远再移回来;经常使用,比较彻底
  1. ;;;Z轴归零
  2. (defun C:ZZGL (/       ss      tmpucs  olderr  oldcmd  zeroz   ss1
  3.         ss1len  i       numchg  numnot  numno0  ssno0   ename
  4.         elist   etype   yorn    vrt     crz
  5.        )
  6.   (setq tmpucs "$FLATTEN-TEMP$") ;temporary UCS
  7.   ;;Error handler
  8.   (setq olderr *error*)
  9.   (defun *error* (msg)
  10.     (if (or
  11.    (= msg "Function cancelled")
  12.    (= msg "quit / exit abort")
  13. )
  14.       ;;if user cancelled or program aborted, exit quietly
  15.       (princ)
  16.       ;;otherwise report error message
  17.       (princ (strcat "\nError: " msg))
  18.     )
  19.     (setq *error* olderr)
  20.     (if (tblsearch "UCS" tmpucs)
  21.       (command "._UCS" "_Restore" tmpucs "._UCS" "_Delete" tmpucs)
  22.     )
  23.     (command "._UNDO" "_End")
  24.     (setvar "CMDECHO" oldcmd)
  25.     (princ)
  26.   )
  27.   ;;Function to change Z coordinate to 0
  28.   (defun zeroz (key zelist / oplist nplist)
  29.     (setq oplist (assoc key zelist)
  30.    nplist (reverse (append '(0.0) (cdr (reverse oplist))))
  31.    zelist (subst nplist oplist zelist)
  32.     )
  33.     (entmod zelist)
  34.   )
  35.   ;;Setup
  36.   (setq oldcmd (getvar "CMDECHO"))
  37.   (setvar "CMDECHO" 0)
  38.   (command "._UNDO" "_Group")
  39.   (command "._UCS" "_Delete" tmpucs "._UCS" "_Save" tmpucs "._UCS"
  40.     "_World")
  41.   ;;Get input      
  42.   (setq ss1 (ssget))
  43.   (if (null ss1)   ;if enter...
  44.     (setq ss1 (ssget "_X"))  ;select all entities in database
  45.   )
  46.   ;;*initialize variables
  47.   (setq ss1len (sslength ss1)  ;length of selection set
  48. i      0   ;loop counter
  49. numchg 0   ;number changed counter
  50. numnot 0   ;number not changed counter
  51. numno0 0   ;number not changed and Z /= 0 counter
  52. ssno0  (ssadd)   ;selection set of unchanged entities
  53.   )     ;setq
  54.   ;;*do the work
  55.   (prompt "\nWorking.")
  56.   (while (< i ss1len)   ;while more members in the SS
  57.     (if (= 0 (rem i 10))
  58.       (prompt ".")
  59.     )
  60.     (setq ename (ssname ss1 i)  ;entity name
  61.    elist (entget ename)  ;entity data list
  62.    etype (cdr (assoc 0 elist)) ;entity type
  63.     )
  64.     ;;*Keep track of entities not flattened
  65.     (if (not (member etype
  66.        '("3DFACE"     "ARC"  "ATTDEF"
  67.          "CIRCLE"     "DIMENSION"  "ELLIPSE"
  68.          "HATCH"     "INSERT"  "LINE"
  69.          "LWPOLYLINE" "MTEXT"  "POINT"
  70.          "POLYLINE"   "SOLID"  "TEXT"
  71.         )
  72.       )
  73. )
  74.       (progn    ;leave others alone
  75. (setq numnot (1+ numnot))
  76. (if (/= 0.0 (car (reverse (assoc 10 elist))))
  77.    (progn   ;add it to special list if Z /= 0
  78.      (setq numno0 (1+ numno0))
  79.      (ssadd ename ssno0)
  80.    )
  81. )
  82.       )
  83.     )
  84.     ;;Change group 10 Z coordinate to 0 for listed entity types.
  85.     (if (member etype
  86.   '("3DFACE"    "ARC"   "ATTDEF"    "CIRCLE"
  87.     "DIMENSION" "ELLIPSE"   "HATCH"     "INSERT"
  88.     "LINE"      "MTEXT"   "POINT"     "POLYLINE"
  89.     "SOLID"     "TEXT"
  90.    )
  91. )
  92.       (setq elist  (zeroz 10 elist) ;change entities in list above
  93.      numchg (1+ numchg)
  94.       )
  95.     )
  96.     ;;Change group 11 Z coordinate to 0 for listed entity types.
  97.     (if (member etype
  98.   '("3DFACE" "ATTDEF" "DIMENSION" "LINE" "TEXT" "SOLID")
  99. )
  100.       (setq elist (zeroz 11 elist))
  101.     )
  102.     ;;Change groups 12 and 13 Z coordinate to 0 for SOLIDs and 3DFACEs.
  103.     (if (member etype '("3DFACE" "SOLID"))
  104.       (progn
  105. (setq elist (zeroz 12 elist))
  106. (setq elist (zeroz 13 elist))
  107.       )
  108.     )
  109.     ;;Change groups 13, 14, 15, and 16
  110.     ;;Z coordinate to 0 for DIMENSIONs.
  111.     (if (member etype '("DIMENSION"))
  112.       (progn
  113. (setq elist (zeroz 13 elist))
  114. (setq elist (zeroz 14 elist))
  115. (setq elist (zeroz 15 elist))
  116. (setq elist (zeroz 16 elist))
  117.       )
  118.     )
  119.     ;;Change each polyline vertex Z coordinate to 0.
  120.     ;;Code provided by Vladimir Livshiz, 09-Oct-1998
  121.     (if (= etype "POLYLINE")
  122.       (progn
  123. (setq vrt ename)
  124. (while (not (equal (cdr (assoc 0 (entget vrt))) "SEQEND"))
  125.    (setq elist (entget (entnext vrt)))
  126.    (setq crz (cadddr (assoc 10 elist)))
  127.    (if (/= crz 0)
  128.      (progn
  129.        (zeroz 10 elist)
  130.        (entupd ename)
  131.      )
  132.    )
  133.    (setq vrt (cdr (assoc -1 elist)))
  134. )
  135.       )
  136.     )
  137.     ;;Special handling for LWPOLYLINEs
  138.     (if (member etype '("LWPOLYLINE"))
  139.       (progn
  140. (setq elist  (subst (cons 38 0.0) (assoc 38 elist) elist)
  141.        numchg (1+ numchg)
  142. )
  143. (entmod elist)
  144.       )
  145.     )
  146.     (setq i (1+ i))   ;next entity
  147.   )
  148.   ;;Print results
  149.   (prompt (strcat "\n" (itoa numchg) " AutoCad实体归零."))
  150.   (prompt
  151.     (strcat "\n" (itoa numnot) " 个非AutoCad实体未归零.")
  152.   )
  153.   (princ "\n二次归零...")  
  154.   (if (and ssno0 (> numnot 0))
  155.     (progn
  156.       (setvar "cmdecho" 0)
  157.       (princ "\n正在处理图形数据,请稍候...")
  158.       (terpri)
  159.       (command ".ucs" "w")
  160.       (command ".move" ssno0 "" '(0 0 1e99) ""
  161.         ".move" "p" "" '(0 0 -1e99) "")
  162.       (princ "\n已将所选图元Z坐标值全部归零")      
  163.     )   
  164.   )
  165.   ;;If there any entities in ssno0, show them
  166.   (command "._UCS" "_Restore" tmpucs "._UCS" "_Delete" tmpucs)
  167.   (command "._UNDO" "_End")
  168.   (setvar "CMDECHO" oldcmd)
  169.   (setq *error* olderr)   
  170.   (princ "\n高山流水Z轴归零程序,命令ZZGL")
  171. )
发表于 2010-8-31 21:48 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2010-8-31 22:57 | 显示全部楼层
liminnet发表于2010-8-31 21:48:00三楼看来是踢馆的 

欢迎踢馆!

发表于 2010-9-1 06:15 | 显示全部楼层

要那么复杂的程序吗?我看见别人好象很简单的就行了

收藏了,看看学习学习。

谢谢3楼的分享

发表于 2010-9-19 17:01 | 显示全部楼层

我看行

发表于 2010-9-24 01:02 | 显示全部楼层
看看找点东西,谢谢!(部分拿来主义)
发表于 2010-9-24 17:31 | 显示全部楼层

三楼的不错,很好用,二次归零也不错,避免一次归零有落下的,不过一般一次归零就可以了,顶,但是最后会有一句未知zzgl命令不知道是哪里出了错误。

发表于 2010-9-24 20:38 | 显示全部楼层
(defun c:zzgl ()
 (setvar "CMDECHO" 0)
  (command ".MOVE" "ALL" "" "0,0,0" "0,0,10000e99"
           ".MOVE" "P" "" "0,0,10000e99" "0,0,0")
 (setvar "CMDECHO" 1)
 (princ)
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-26 18:27 , Processed in 0.168940 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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