找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 702|回复: 3

[分享]:画标高程序,超好用,定个正负零,其他标高直接定

[复制链接]
发表于 2008-9-3 18:21:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
(defun c:BG (/ odscal scal pt dx dy ptb dxb dyb signx signy
ptt txt pt0 pt1 pt2 pt3 pt4 pt5 loopmk
)
(YL_begin) ;;初始化处理
(princ "\n按比例绘制对高度敏感的标高符号程序!")
(setq odscal (getvar "USERR1")) ;;取系统变量"USERR1"的值为默认比例因子
(if (equal odscal 0.0 0.1) ;;如果系统变量的值为0.0(容许误差为0.1)
(progn ;;则设置
(setq odscal 100.0) ;;首次运行,设默认比例因子为100
(setvar "USERR1" odscal) ;;系统变量userr1存储默认比例因子
)
)
(if (not (tblsearch "layer" "Fline")) ;;判断是否存在Fline层,无则创建。Fline指细实线
(command "layer" "m" "Fline" "c" "6" "" "l" "continuous" "" "")
)
(if (not (tblsearch "layer" "Text")) ;;判断是否存在Text层,无则创建
(command "layer" "m" "Text" "c" "3" "" "l" "continuous" "" "")
)
(if (not (tblsearch "style" "sty_YL")) ;;判断是否存在sty_YL字体,无则创建
(command"style" "sty_YL" "romans,hztxt" 0 0.7 0 "n" "n" "n")
)
(setq scal odscal) ;;比例取默认值
(setq loopmk T)
(while loopmk
(setvar "osmode" 16383) ;;设置对象捕捉方式为全部
(initget "S") ;;定义关键字
(setq pt (getpoint "\n S_比例/<输入标注点>:"))
(setvar "osmode" 0) ;;设置对象捕捉式无
(cond
((= pt nil) (setq loopmk nil))
((= pt "S") ;;比例因子
(setq scal (getreal (strcat "\n 请输入比例因子<" (rtos odscal) ">:")))
(if (= scal nil) (setq scal odscal)) ;;如果用户直接回车,则使用默认的比例值
(setq odscal scal)
)
(T
(setq dx (car pt))
(setq dy (cadr pt))
(setvar "osmode" 16383) ;;设置对象捕捉方式为全部
(setq ptb (getpoint pt "\n请指定点以确定标高符号所在的位置和方向:"))
(setvar "osmode" 0) ;;设置对象捕捉方式无
(if (= ptb nil) exit) ;;如果没有给出点则退出程序
(setq dxb (car ptb))
(setq dyb (cadr ptb))
(if (< dxb dx) (setq signx -1) (setq signx 1))
(if (< dyb dy) (setq signy -1) (setq signy 1))
(if (< dxb dx)
(setq ptt (list (+ dxb (* 0.85 scal signx)) (+ dy (* 0.2 scal signy))))
(setq ptt (list (+ dxb (* 0.04 scal signx)) (+ dy (* 0.2 scal signy))))
)
(if (< dyb dy)
(setq ptt (polar ptt (* pi 1.5) (* 0.25 scal)))
)
(setq pt0 (list (+ dxb (* 0 scal signx)) (+ dy (* 0 scal signy))))
(setq pt1 (list (+ dxb (* 0.16 scal signx)) (+ dy (* 0.16 scal signy))))
(setq pt2 (list (- dxb (* 0.16 scal signx)) (+ dy (* 0.16 scal signy))))
(setq pt3 (list (+ dxb (* 0.85 scal signx)) (+ dy (* 0.16 scal signy))))
(setq pt4 (list (- dxb (* 0.16 scal signx)) (+ dy (* 0 scal signy))))
(setq pt5 (list (+ dxb (* 0.16 scal signx)) (+ dy (* 0 scal signy))))
(command "layer" "s" "Fline" "")
(command "pline" pt1 "w" "0" "0" pt0 pt2 pt3 "")
(command "line" pt4 pt5 "")
(setq txt (getstring (strcat "\n请输入标高值<" (rtos (/ dy 100) 2 3) ">:")))
(cond ((wcmatch txt "") (setq txt (rtos (/ dy 100) 2 3))))
(command "layer" "s" "Text" "")
(setvar "textstyle" "sty_YL")
(command "text" ptt (* 0.25 scal) 0 txt )
)
)
)
(setvar "USERR1" scal) ;;系统变量userr1存储默认比例因子
(YL_end) ;;恢复程序开始前的设置
(princ "\n绘制完成!")
(princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2008-9-4 16:16:36 | 显示全部楼层
(YL_begin)
在何处?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-9-4 16:44:07 | 显示全部楼层
最初由 szx025 发布
[B](YL_begin)
在何处? [/B]

;;*****************************************************************************
;;YL_begin
;;功 能:绘图程序的初始化处理,记录当前层名、线型、颜色、捕捉方式、文本样式、文本高度,
;; 控制点标记可见方式、主单位值消零处理方式、命令行回显方式、然后关闭目标捕捉,
;; 设置线形随层、颜色随层、设置命令行不回显、不显示控制点标记、对主单位值后续零作消零处理
;;说 明:和函数YL_end配对使用。
(defun YL_begin ()
(setq oderr *error*) ;;保存原来的*error*
(setq *error* YL_err) ;;将*error*用自己的错误处理函数替代
(setq odltp (getvar "celtype")) ;;记录当前线型设置
(setq odclr (getvar "cecolor")) ;;记录当前颜色设置
(setq odosm (getvar "osmode")) ;;记录当前捕捉方式
(setq odlay (getvar "clayer")) ;;记录当前层
(setq odsty (getvar "textstyle")) ;;记录当前文本样式
(setq odtsz (getvar "textsize")) ;;记录当前文本高度
(setq odbpm (getvar "blipmode")) ;;记录当前控制点标记是否可见
(setq odzin (getvar "dimzin")) ;;记录主单位值消零处理方式
(setq odcmd (getvar "cmdecho")) ;;记录命令行回显方式
(setvar "celtype" "bylayer") ;;设置线形随层
(setvar "cecolor" "bylayer") ;;设置颜色随层
(setvar "cmdecho" 0) ;;设置命令行不回显
(setvar "blipmode" 0) ;;不显示控制点标记
(setvar "dimzin" 8) ;;对主单位值后续零作消零处理,因为DIMZIN 对 AutoLISP rtos 和 angtos 函数执行实数向字符串转换操作有影响。
(setvar "osmode" 0) ;;关闭对象捕捉方式
)

;;*****************************************************************************
;;YL_end
;;功 能:程序结束,恢复程序开始前的设置。
;; 恢复YL_begin设置的系统变量表中的数值。
;;说 明:和函数YL_begin配对使用。
(defun YL_end ()
(setvar "celtype" odltp)
(setvar "cecolor" odclr)
(setvar "osmode" odosm)
(setvar "textstyle" odsty)
(setvar "textsize" odtsz)
(setvar "blipmode" odbpm)
(setvar "dimzin" odzin) ;;恢复主单位值消零处理方式
(command "layer" "s" odlay "")
(setvar "cmdecho" odcmd)
(setq *error* oderr) ;;恢复原来的*error*
(princ)
)

;;*****************************************************************************
;;YL_err
;;功 能:错误处理函数。
(defun YL_err (msg)
(princ (strcat "\n错误:" msg "\n")) ;;打印错误原因
(YL_end) ;;调用函数YL_end恢复程序开始前的设置
(setq *error* oderr) ;;恢复原来的*error*
(princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-9-5 12:03:28 | 显示全部楼层
通常用属性块,便于类型转换等编辑用。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-28 17:39 , Processed in 0.365505 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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