1、我的dimlfac为0.0001,标注出来的数字小数点后有3位,看看能不能改为由我们自己控制(为2位小数或4位小数或更多)。
2、我在放置文字的时候,是由交点来控制的,能不能实现当横向1:1000比例时文字离竖线的距离为1500,当横向比例为1:500的时候文字离竖线的距离为750。(现在我的文字是紧贴着竖线的)
我默认的文字为:
style name 选$WCAD_STANDARD_TEXT;shx font 选hromans.shx
big font 选fhz.shx;height 设为4000;width factor 设为0.7
程序如下:
(DEFUN C:BZ()
(setq dfc (getvar "dimlfac"))
(setq pt1 (getpoint "\n选择点1:"))
(setq pt2 (getpoint "\n选择点2:"))
(setq dst1 (distance pt1 pt2))
(setq dst1 (rtos dst1 2 2))<BR> <BR> (setq len (distance pt1 pt2))
(setq pt3 (getpoint "\n选择标注线:"))
(SETQ PT3 (LIST (CAR PT3) (1+ (CADR PT3))))<BR> <BR> (COMMAND "TEXT" PT3 90 (rtos (* len dfc) 2 3) )
)
修改后的缺陷
修改后的缺陷:1、把扑捉系统变量全去掉,不能保证两点之间的真实距离。
2、小数点的位数和距直线距离由控制比例尺的全局变量设定。 捕捉对我来说影响不是很大,现在关键我要的是离竖线的距离要能用由程序控制,不要重新调整。 可用系统变数或自定参数控制所要位置
(if (= kkf 1)
... 楼上的能说得更清楚点吗?比方说插在什么地方? 本帖最后由 作者 于 2004-8-2 13:40:23 编辑 <br /><br /> 问题解决了吗?
估计还是有问题。
<B>程序搞定,见下:</B>
★★★★★★★★★★★★★★★★★★★★★★★
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<BR>;;;gaocheng.lsp<BR>;;;高程标高标注;埋深标注<BR>;;;-- <A href="mailto:XYP@bsedi.com" target="_blank" >XYP@bsedi.com</A><BR>;;;2004.07.27<BR>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<BR>(prompt "\n\r 加载高程标高标注程序。")<BR>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<BR>;高程标高标注<BR>(defun c:gc (/ psel psel-x psel-y txt t-txt bls)<BR> (cmdla0)<BR> (cssz1)<BR> <BR> (while (setq psel (getpoint "\n\t待标注点: "))<BR> (setq psel-x (car psel)<BR> psel-y (cadr psel)<BR> )<BR> (setq txt (rtos (+ (/(- psel-y pjzh-y) (/ 10000 bls)) no-jzh) 2 3))<BR> (setq pt-txt (list psel-x ptext-y))<BR> (mkla"高程标注"4);;自定义标注层名<BR> (setvar"osmode"0)<BR> (command "text" "j" "mc" (polar pt-txt pi (/ 3000 bls)) (/ 4000 bls) "90" txt)<BR> (setvar"osmode"39)<BR> )<BR> (pxyp "GC (高程)")<BR> (cmdla1)<BR> )<BR>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<BR>;埋深标注<BR>(defun c:msbz (/ psel psel-x psel-y txt t-txt bls)<BR> (cmdla0)<BR> (cssz2)<BR> <BR> (while<BR> (setq psel (getpoint "\n\t设计路面线端点: "))<BR> (setq psel2 (getpoint"\n\t管线底线端点:"))<BR> (setq psel-x (car psel)<BR> psel-y (cadr psel)<BR> )<BR> (setq txt (- (cadr psel2) (cadr psel))<BR> txt (rtos (abs (/ txt (/ 10000 bls))) 2 3)<BR> )<BR> <BR> ;(setq txt (rtos (+ (/(- psel-y pjzh-y) (/ 10000 bls)) no-jzh) 2 3))<BR> (setq pt-txt (list psel-x ptext-y))<BR> (mkla"埋深标注"3);;自定义标注层名<BR> (setvar"osmode"0)<BR> (command "text" "j" "mc" (polar pt-txt pi (/ 3000 bls)) (/ 4000 bls) "90" txt)<BR> (setvar"osmode"39)<BR> )<BR> (pxyp "msbz (埋深标注)")<BR> (cmdla1)<BR> )
;;;画新图或标不同类标高(地面高程、埋深)<BR>(defun gc0 (/)<BR> (cmdla0)<BR> (setq ptext-y nil);(princ ptext-y)<BR> (setq pjzh-y nil);(princ pjzh-y)<BR> (setq no-jzh nil);(princ no-jzh)<BR> (setq BLS nil)<BR> (gc)<BR> (princ"\n\t恢复系统")<BR> (princ)<BR> (cmdla1)<BR> )
;;;参数设置<BR>(defun cssz1()<BR> (setvar"osmode"32)<BR> (while (= bls nil)<BR> (if (= bls nil)<BR> (progn<BR> (initget "A B C")<BR> (setq BL-bz (getkword "\nA(图纸比例1:100)/B(图纸比例1:200)/C(重设高程类型).<1:100>:"))<BR> (setq BL-bz (if BL-bz BL-bz "A"))<BR> (if (= bl-bz "A")(setq bls 1))<BR> (if (= bl-bz "B")(setq bls 2))<BR> (if (= bl-bz "C")<BR> (progn<BR> (setq bls nil)<BR> (gc0)<BR> )<BR> )<BR> )<BR> )<BR> )<BR> <BR> (if (= ptext-y nil)<BR> (setq ptext-y (+ (cadr (getpoint "\n\t选择标注基线端点: ")) (/ 7000 bls))));;标注文本基点y坐标<BR> (if (= pjzh-y nil)(setq pjzh-y (CADR (dxf 10 (entget (car(entsel"\n\t选择一条基准线: ")))))));基准线y坐标<BR> (if (= no-jzh nil)(setq no-jzh (ureal 1 "" "输入基准线标高值" no-jzh)))<BR> )
(defun cssz2()<BR> (setvar"osmode"32)<BR> (while (= bls nil)<BR> (if (= bls nil)<BR> (progn<BR> (initget "A B C")<BR> (setq BL-bz (getkword "\nA(图纸比例1:100)/B(图纸比例1:200)/C(重设高程类型).<1:100>:"))<BR> (setq BL-bz (if BL-bz BL-bz "A"))<BR> (if (= bl-bz "A")(setq bls 1))<BR> (if (= bl-bz "B")(setq bls 2))<BR> (if (= bl-bz "C")<BR> (progn<BR> (setq bls nil)<BR> (gc0)<BR> )<BR> )<BR> )<BR> )<BR> )<BR> <BR> (if (= ptext-y nil)<BR> (setq ptext-y (+ (cadr (getpoint "\n\t选择标注基线端点: ")) (/ 5000 bls))));;标注文本基点y坐标<BR> ;(if (= pjzh-y nil)(setq pjzh-y (CADR (dxf 10 (entget (car(entsel"\n\t选择一条基准线: ")))))));基准线y坐标<BR> ;(if (= no-jzh nil)(setq no-jzh (ureal 1 "" "输入基准线标高值" no-jzh)))<BR> )
(defun ureal (bit kwd msg def / inp)<BR> (if def<BR> (setq msg (strcat "\n" msg "<" (rtos def 2) ">: ")<BR> bit (* 2 (fix (/ bit 2)))<BR> )<BR> (setq msg (strcat "\n" msg ": "))<BR> )<BR> (initget bit kwd)<BR> (setq inp (getreal msg))<BR> (if inp inp def)<BR> )
;;; 保存原有系统变量,设置程序运行时的系统变量<BR>(Defun cmdla0 ()<BR> (Setq cmdech (Getvar "Cmdecho")<BR> oom (Getvar "Orthomode")<BR> osm (Getvar "Osmode")<BR> la (Getvar "Clayer")<BR> )<BR> (Setvar "Cmdecho" 0)<BR> (Setvar "Regenmode" 0)<BR>)
;;; 建图层: (mala "层名" 颜色号)<BR>(Defun MKLA (a b)<BR> (If (= (Tblsearch "layer" a) nil)<BR> (Command "layer" "m" a "c" b a "")<BR> (Command "layer" "t" a "s" a "c" b a "")<BR> )<BR>)
;;; 恢复原有系统变量<BR>(Defun cmdla1 ();(/ cmdech LA oom osm)<BR> (Setvar "Cmdecho" cmdech)<BR> (Setvar "Clayer" LA)<BR> (Setvar "Orthomode" oom)<BR> (Setvar "Osmode" osm)<BR> (setvar "regenmode" 1)<BR> (Terpri)<BR> (Princ)<BR>)
;;;* 显示命令简写<BR>(DEFUN PXYP (TXT1)<BR> (SETQ TXT1 (STRCAT "\n\r 程序命令: " TXT1 " -- <A href="mailto:XYP@bsedi.com" target="_blank" >XYP@bsedi.com</A>"))<BR> (PRINC TXT1)<BR> (Princ)<BR>);defun
(defun dxf (code elist) (cdr (assoc code elist)))
(pxyp "GC (高程);msbz (埋深标注)")
★★★★★★★★★★★★★★★★★★★★★★★ 为什么用DIST命令量算两点间的距离时,有时候所量算的尺寸是错的?用LIST就永远不会