[求助]各位大侠帮忙编个标管长的LSP
<p> 在实际工作中经常要对PL线画的管子标管径,管长,坡度。每次都先复制文字再旋转,后量取长度再修改。</p><p>想请大侠编个LSP实现如下功能:1,选择管线即可在管线上标注单行文字:DN300 L=30.0 i=0.004(管线可能是L线或者PL线)。(各元素间用空格隔离,若有难度可由DN300-L=30.0-i=0.004代替)</p><p>2,其中L=后面的数字是框选管线后得到的(保留一位小数)! 其他部分照标就是(我的计算才能确定)</p><p>3,文字随鼠标在管线上面移动,由鼠标左键确定是上或者下!右键退出!(能实现上两步就很好了)</p><p>希望大侠能帮忙思考! 不胜感激!! ! </p> 另外文字样式应设定为TXT+HZTXT,出现的单行文字应该于线平行! 字线距离与文字大小为可设置选项,默认字线距离80,字高300。 期待 <p>忘记今天休假哦! 高手度假去了! 为免帖子沉了!我顶起</p> <p>上面是我自编自用的<br/>其实你说的不是不能实现,只是我觉得点管线不是很理想,最好是点2个检查井来测量距离。因为管线可能在交叉的时候打断过,这个时候读取的长度不是我们想要的长度。</p> <p>楼上的程序看着蛮好! 说的也有道理,我忽略了管线在检查井处打断过了!看来楼上也是做水的把!</p><p>那么更正一点:: 由点取两点(一般是两圆心点)来确定管线的长度与文字的角度问题!(那么对象捕捉应该被开启)。</p><p>楼上程序再修改下应该能实现这个功能吧!?</p><p>请高手试着编写。</p><p></p> <p>基本满足楼主的要求,可能局部需要调整。</p><p>(defun c:WF (/ old_osmode d i p1 ent p2 di ds pt dn ang)<br/> (setq old_osmode (getvar "osmode"))<br/> (setq old_layer (getvar "clayer"))<br/> (if (not (setq d (getreal "\n输入管径 D<200mm>:")))<br/> (setq d 200)<br/> )<br/> (if (= d 200)<br/> (setq i "0.008")<br/> (setq i "0.005")<br/> )<br/> (while (setq p1 (getpoint "\n选择第一点<回车退出>:"))<br/> (setvar "osmode" 5)<br/> (setq p2 (getpoint p1 "\n选择第二点:"))<br/> (setvar "osmode" 0)<br/> (setq di (distance p1 p2))<br/> (setq ds (rtos (/ di 1000) 2 1))<br/> (setq dn (strcat "D" (rtos d 2 0) ",L=" ds ",i=" i))<br/> (setq ang (angle p1 p2))<br/> (setq ang (* ang (/ 180 3.1415926)))<br/> (setq pt (getpoint "\n输入文字脚点:"))<br/> (setvar "clayer" "s-Wsbz")<br/> (command "text" pt gao ang dn)<br/> (command "move" (entlast) "" pt pause)<br/> (setvar "osmode" 5)<br/> )<br/> (setvar "osmode" old_osmode)<br/>;;; (setvar "clayer" old_layer)<br/> (princ)<br/>)</p> <p>关于四楼的标注应该很多! 建议7楼搜索下“管径标注LSP”就好了!但随鼠标上下移动估计就难找点了!</p><p></p><p>感谢8楼的热心!但似乎程序有点问题! 无法执行!思路差不多了! 先点取两点来确定长度与方向!而文字输入位置最好能像四楼一样可以在线上下移动!而最初应该加上设置比例(默认1:100)这样比较好把!</p><p>期待新版本! 谢谢</p>dcl_settings : default_dcl_settings { audit_level =3; }
wtxt : dialog {
label="Enter the Text 输入标注文本";
:popup_list{
key="apost";
label="管径DN=";
list="";
value="6";
}
:edit_box{key="len";label="管长 L=";}
:edit_box{key="post";label="坡度 i=";}
ok_cancel_help;
}
mhelp : dialog {
label = "HELP 帮助";
: list_box { key="info_box"; width=60; height=20;}
ok_only ;
}
;标注管径、管长、坡度 明经 ZZXXQQ 2007.11.19
(DEFUN C:WTXT ()
(SETVAR "CMDECHO" 0)
(COMMAND "STYLE" "HZ" "TXT,HZTXT" "" "" "" "" "" "")
(IF (< (GETVAR "DIMTXT") 300) (SETVAR "DIMTXT" 300))
(IF (< (GETVAR "DIMGAP") 80) (SETVAR "DIMGAP" 80))
(SETQ OLDOS (GETVAR "OSMODE")
SC (GETVAR "DIMSCALE")
H (GETVAR "DIMTXT")
D (* (IF (> SC 0) SC 1) (+ (* H 0.5) (GETVAR "DIMGAP"))))
(SETQ BLST (LIST "25" "30" "40" "50" "100" "150" "200" "300" "400" "500"))
(SETVAR "OSMODE" 0)
(WHILE (SETQ PT1 (GETPOINT "\nInsert Point 插入点 :"))
(IF (SETQ PT2 (OSNAP PT1 "NEA")) (PROGN
(SETQ A (ANGLE PT2 PT1)
PANG (- A (/ PI 2))
PD (RTOS (/ (SIN PANG) (COS PANG)) 2 4)
ANG (- (* (/ A PI) 180) 90)
ANG (IF (< ANG 0) (+ ANG 360) ANG)
ANG (IF (< 120 ANG 300) (- ANG 180) ANG)
PT3 (POLAR PT2 A D))
(IF (SETQ S1 (SSGET "C" PT2 PT2 '((0 . "ARC,CIRCLE,*LINE")))) (PROGN
(SETQ EN (SSNAME S1 0))
(COMMAND "LENGTHED" EN "")
(SETQ L (RTOS (GETVAR "PERIMETER") 2 1))
)
(SETQ L "0.0")
)
(IF (> (SETQ DCL_ID (LOAD_DIALOG "WTXT")) 0)
(IF (NEW_DIALOG "wtxt" DCL_ID "") (PROGN
(START_LIST "apost")(MAPCAR 'ADD_LIST BLST)(END_LIST)
(SET_TILE "len" L)
(SET_TILE "post" PD)
(action_tile "help" "(PRINCHELP)")
(action_tile "accept" "(GETDATA) (DONE_DIALOG 1)")
(action_tile "cancel" "(DONE_DIALOG 0)")
(SETQ RE (START_DIALOG))
) (PROGN
(ALERT "Unable to display dialog box!\n无法显示对话框!")
(UNLOAD_DIALOG DCL_ID)
))
(ALERT "Unable to load dialog box!\n无法装载对话框!")
)
(IF (= RE 1) (COMMAND "TEXT" "M" PT3 H ANG TX))
))
(SETVAR "OSMODE" 0)
)
(SETVAR "OSMODE" OLDOS)
(SETVAR "CMDECHO" 0)
(PRINC)
)
(DEFUN GETDATA ()
(SETQ TX
(STRCAT "DN" (NTH (ATOI (GET_TILE "apost")) BLST)
" L=" (GET_TILE "len")
" i=" (GET_TILE "post"))
)
)
(DEFUN PRINCHELP ( / Q%O)
(SETQ Q%O (LIST
" 您好!" ""
" 欢迎您使用本软件!" ""
"" "" "" "" ""
" 软件运行条件:" ""
" 1、能运行AutoCAD R12以上版的计算机;" ""
" 2、支持下拉式菜单和对话框;" ""
" 3、实模式、世界坐标系。" ""
"" ""
" 用鼠标点选插入点时尽量靠近线条就行,不要使用" ""
" 特征点捕捉。从哪方向靠近线条,文字就写在哪边。" ""
" 程序自行判断文字方向。" ""
" 程序中使用尺寸标注的文字高度、比例、字线间距。" ""
" 如果要改变字高等参数,请修改相应的尺寸变量。" ""
"" " 若您在使用中有问题,请您及时与我们联系!" ""
" 联系电话:010-"
" 传 真:010-"
" 电子邮箱:"))
(IF (NEW_DIALOG "mhelp" DCL_ID "") (PROGN
(START_LIST "info_box")(MAPCAR 'ADD_LIST Q%O)(END_LIST)
(action_tile "ok""(DONE_DIALOG 2)")
(START_DIALOG)
)
(ALERT "Unable to display dialog box!\n无法显示对话框!")
)
)