明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2189|回复: 5

问题?改变Z座标

[复制链接]
发表于 2006-12-26 15:15:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2006-12-26 15:27:19 编辑

大家好,我的图纸里有好多图元不在0高程上,我想把这些图元都放在0高程上,请问有什么办法。用LISP程序吗?

这是我写的程序,好像不能改PLINE线。请教高手。

;+-------------------------------------+
;+用来将所有图形移到同一高程           +
;+                                     +
;+-------------------------------------+
(defun c:zyd (/ ss entname ent p1 p2 n index)
 (prompt "\n请选择图元:")
   (setq   ss (ssget) ;选择实体
  n (sslength ss)
  index 0
 )
 (repeat n
  (setq
   entname (ssname ss index) ;提取实体名
   index (+ 1 index)
   ent (entget entname) ;根据实体名提取实体列表
   p1 (cdr (assoc 10 ent))  ;从实体列表中提取第一点坐标
          p2 (list (car p1) (cadr p1) 0)  ;从实体列表中提取第二点坐标
  ) ;结束变定
    (command "move" entname "" p1 p2)
 ) ;结束repeat
) ;程序结束

 楼主| 发表于 2006-12-26 15:58:00 | 显示全部楼层

我刚才找一个程序,也是不能改PLINE线。高手帮忙。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;zzgl.lsp Z轴(坐标)归零
;;;-- XYP@bsedi.com
;;;2004.07.28
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(prompt "\\n\\r      加载Z轴坐标归零程序。")

(DEFUN C:ZZGL (/ SSS1 n s1 old1 new1 s2 old2 new2 )
  (cmdla0)
  (princ"\\n\\t将线Z轴坐标归零。")
  (princ"\\n\\t选择实体: ")
  (while(not(SETQ SSS1 (ssget))))
    (setq n 0)
    (while (setq s1 (ssname SSS1 n))
    (SETQ OLD1 (ASSOC 10 (entget S1)))
    (SETQ NEW1 (list 10 (cadr old1)(caddr old1) 0))
    (SETQ S1 (SUBST NEW1 OLD1 (entget S1)))
    (setq s2 (ENTMOD S1))
    (setq s1 (dxf -1 s2))
    (SETQ OLD2 (ASSOC 11 (entget S1)))
    (SETQ NEW2 (list 11 (cadr old2)(caddr old2) 0))
    (SETQ S1 (SUBST NEW2 OLD2 (entget S1)))
    (ENTMOD S1)
    (setq n (+ 1 n))
  )
  (cmdla1)
  (pxyp"ZZGL      (Z轴坐标归零)")
  );defun

(defun CMDLA0 ()
           (setq cmdech (GETVAR "CMDECHO"))
           (setq oom (getvar "orthomode"))
           (setq osm (getvar "osmode"))
           (SETQ LA (getvar "clayer"))
           (setvar "regenmode" 1)
           (SETVAR "CMDECHO" 0)
           );defun
(defun CMDLA1 ();(/ cmdech oom osm la)
           (SETVAR "CMDECHO" cmdech)
           (setvar "orthomode" oom)
           (setvar "osmode" osm)
           (setvar "clayer" LA)
           (setvar "regenmode" 1)
           );defun

(defun dxf (code elist) (cdr (assoc code elist)))

;;;* 显示命令简写
(DEFUN PXYP (TXT1)
  (SETQ TXT1 (STRCAT "\\n\\r      程序命令: "  TXT1 "      -- XYP@bsedi.com"))
  (PRINC TXT1)
  (Princ)
);defun

(pxyp"ZZGL      (Z轴坐标归零)")

发表于 2006-12-26 16:23:00 | 显示全部楼层
这样试试
  1. (defun c:zyd (/ ss entname ent p1 p2 n index)
  2. (prompt "\n请选择图元:")
  3.    (setq ss (ssget) ;选择实体
  4.          n (sslength ss)
  5.          index 0
  6.    )
  7. (repeat n
  8.   (setq entname (ssname ss index) ;提取实体名
  9.         index (+ 1 index)
  10.         ent (entget entname)) ;根据实体名提取实体列表
  11.   (if (= (cdr (assoc 0 ent)) "POLYLINE")
  12.    (SETQ ENT (ENTGET (ENTNEXT (CDR (ASSOC -1 ENT)))));取下一顶点
  13.   )
  14.   (SETQ p1 (cdr (assoc 10 ent))  ;从实体列表中提取第一点坐标
  15.         p2 (list (car p1) (cadr p1) 0)  ;从实体列表中提取第二点坐标
  16.   ) ;结束变定
  17.     (command "move" entname "" p1 p2)
  18. ) ;结束repeat
  19. ) ;程序结束
发表于 2006-12-26 16:38:00 | 显示全部楼层
(defun C:Z=0 ()
  (setvar "cmdecho" 0)   
  (princ "\n正在處理圖形數據,請稍候...")
  (command "_.UCS" "")   
  (command "_.move" "_all" "" '(0 0 1e99) "" "_.move" "_p" "" '(0 0 -1e99)"")
  (princ "\nOK,已將所有圖元的標高值即Z坐標歸零.")
  (setvar "cmdecho" 1)
  (princ)
)     
 楼主| 发表于 2006-12-26 17:21:00 | 显示全部楼层
请问这是什么原理,谢谢。
 楼主| 发表于 2006-12-26 17:25:00 | 显示全部楼层
ZZXXQQ发表于2006-12-26 16:23:00这样试试(defun c:zyd (/ ss entname ent p1 p2 n index) (prompt \"\n请选择图元:\")   (setq ss (ssget) ;选择实体         n (ss

报告版主没有成功。其它图元没移到0层上。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-11-23 12:57 , Processed in 0.261520 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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