这两个

发言者:lqcc (202.103.237.30)
时  间:2000年4月03日 17:54:29
发信站:ABBS 自由建筑论坛 (www.abbs.com.cn)
回  应:???(发言者:忧之 , 2000年4月03日 11:09:48)

第一个,画总平时标坐标用的。目标捕捉只能用SHIFT+右键,不然就出错,不懂为什么,难道有什么另外的变量?
还有,怎样知道一个字符串的长度,想对齐两个坐标。


;;;zbbz

;;; 标注时是按当前的UCS的,但是数值还是 WCS 的,

;;; 不用转换到 WCS。

;============================== 开始 ==============================

(defun c:zbbz ()

;============================== 设置 ==============================
(alert "不要设OSNAP,只能用SHIFT+右键来捕捉")

(setq 字高 (getvar "textsize"))
(setq old_dimzin (getvar "dimzin"))
(setvar "dimzin" 1)
(setq 精度 3)
(setq old_osmode (getvar "osmode"))
(setvar "osmode" 0)
(setvar "cmdecho" 0)
(标注)
)


;====================== 取起点的位置及数值 ======================
(defun 标注()
(setq 标注点 (getpoint "\n点取标注点:"))
(if 标注点 (继续) (退出))
)

(defun 继续()
(setq 绝对标注点 (trans 标注点 1 0))
(setq x_坐标值 (rtos (car 绝对标注点) 2 精度))
(setq y_坐标值 (rtos (nth 1 绝对标注点) 2 精度))


;=================== 取标注引线位置及长度和角度 ===================

(setq 临时起点 (getpoint 标注点 "\n点取标注位置:"))
(setq 引线长度 (distance 标注点 临时起点))
(setq 临时角度 (atof (angtos (angle 标注点 临时起点 ) 0 3)))

;================= 检查标注引线的角度并设为标准值 =================

(setq 标准角度 (cond ((<= 临时角度 15) 0)
((<= 临时角度 37.5) 30)
((<= 临时角度 52.5) 45)
((<= 临时角度 67.5) 60)
((<= 临时角度 105) 90)
((<= 临时角度 127.5) 120)
((<= 临时角度 141) 135)
((<= 临时角度 165) 150)
((<= 临时角度 195) 180)
((<= 临时角度 217.5) 210)
((<= 临时角度 232.5) 225)
((<= 临时角度 255) 240)
((<= 临时角度 285) 270)
((<= 临时角度 307.5) 300)
((<= 临时角度 322.5) 315)
((<= 临时角度 345) 330)
(0)
)
)


;======================= 设标注引线终点的位置 =======================

(setq 起点 (polar 标注点 (angtof (itoa 标准角度) 0) 引线长度))

;===================== 设标注线终点的位置及方向 ===================

(setq x_字符数 (strlen x_坐标值))
(setq y_字符数 (strlen y_坐标值))
(if (> x_字符数 y_字符数)
(setq 坐标字符数 x_字符数)
(setq 坐标字符数 y_字符数)
)

(setq 坐标字符长 (* 坐标字符数 字高))
(if (and (< 标准角度 270) (> 标准角度 90))
(setq 标注方向 180)
(setq 标注方向 0)
)

(if (= 标注方向 180)
(setq 终点 (list (- (car 起点) 坐标字符长) (nth 1 起点)))
(setq 终点 (list (+ (car 起点) 坐标字符长) (nth 1 起点)))
)


;======================== 设标注数字的起点 ========================

(if (= 标注方向 0) (setq 文字开始点 起点) (setq 文字开始点 终点))
(setq 起点_x (list (car 文字开始点)
(+ (nth 1 文字开始点) (/ 字高 3.5))))
(setq 起点_y (list (car 文字开始点)
(- (nth 1 文字开始点) 字高 (/ 字高 3.5))))

;======================= 使两个坐标字符等长 =======================

(setq 相差字符数 (abs(- x_字符数 y_字符数)))
(setq 补充空格数 "")
(repeat 相差字符数 (setq 补充空格数 (strcat 补充空格数 " ")))
(if (= 相差字符数 0)
(setq x_c (strcat "Y=" x_坐标值) y_c (strcat "X=" y_坐标值)))

(if (and (/= l 0) (> x_字符数 y_字符数))
(setq x_c (strcat "Y=" x_坐标值)
y_c (strcat "X=" 补充空格数 y_坐标值)))

(if (and (/= l 0) (< x_字符数 y_字符数))
(setq x_c (strcat "Y=" 补充空格数 x_坐标值)
y_c (strcat "X=" y_坐标值)))


;============================= 标注 ===============================

(command "line" 标注点 起点 终点)
(command "")
(command "text" 起点_x 字高 "0" y_c)
(command "text" 起点_y 字高 "0" x_c)
(标注)
)

;============================== 还原 ==============================

(defun 退出()
(setvar "osmode" old_osmode)
(setvar "dimzin" old_dimzin)
(setvar "cmdecho" 1)
(princ)
)


;============================== 结束 ==============================


第二个是读一个坐标文件,画线的。但我不懂怎样让它结束。


;================================ 开始 ================================

(defun c:zb()

;=============================== 查找文件 ===============================

(setq fff (open (getfiled "你的坐标数据文件在哪里?" "" "txt" 2) "r"))

;================================ 起点 ================================

(setq p1 (read-line fff))
(setq p0 p1)
(画线)
)
;================================ 画线 ================================
(defun 画线()
(setq p2 (read-line fff))
(if (not p2) (退出) )
(command "line" p1 p2 "")
(setq p1 p2)
(继续)
)

;================================ 继续 ================================

(defun 继续()
(画线)
)
;================================ 退出 ================================

(defun 退出()
(princ)
)



回复以上发言

您的姓名:
发言主题:
发言内容:

您的主页:
主页标题:
链接图片: