将文本放置在直线或柱脚上
大家好,我需要在Visual Lisp中编写一个函数,将文本放置在一行或多行上。文本在大小或长度上与所选行相对(这不是强制性的,但很好)
我知道这里有很多函数,可以将文本与不同角度的曲线或直线对齐,但我只需要一个简单的函数,并与任何长度的基本水平线对齐。
基本上就是这样。
此处为文本
用户选择行,然后用户键入文本,然后将文本放置在行上。
谢谢
拉夫 你已经开始做这件事了,还是只是在找施舍?
您是否尝试过多行文字中的下划线按钮或文字命令中的%%u?
这会很有帮助。
塔瓦特
是的,我已经开始,也许应该把文件放在我有它。
(defun c:textline(/insertpoint textinput)
(setq insertpoint(getpoint“\n选择文本位置:”);等待用户输入
(命令“text”插入点2 0(strcat(princ textinput)))
(普林斯)
)
不,我想选择一行,文本放在上面。上面的工作,但需要调整文字略高于行和文字是相对于行的大小。另一个问题是,它需要一个点来插入文本,我想选择行并将文本放置在行上。 如果你愿意,可以把它拆开
;;;Label storm pipe sizeLPS 2010-02-04
(defun c:lblstsize (/ ent midpt entname obj mid-param beg-pt end-pt ang ins-pt)
(vl-load-com)
(setq temperr *error*
*error* errortrap
varlst '("cmdecho")
oldvar (mapcar 'getvar varlst)
)
(setvar "cmdecho" 0)
(defun dtr (a) (* pi (/ a 180.0)))
(command "UCS" "W")
(setq ent (entsel "\nSelect pipe: ")
midpt (osnap (cadr ent) "mid")
entname (car ent)
obj (vlax-ename->vla-object entname)
mid-param (vlax-curve-getParamAtPoint obj midpt)
beg-pt (vlax-curve-getPointAtParam obj (fix mid-param))
end-pt (vlax-curve-getPointAtParamobj (1+ (fix mid-param)))
ang (angle beg-pt end-pt))
(if
(and (> ang 1.74533) (< ang 4.53786))
(setq ang (angle end-pt beg-pt))
)
(setq ins-pt (polar midpt (+ ang (/ pi 2)) (* (getvar "dimscale")0.125)))
(if (not (tblsearch "layer" "st-txt"))
(command "-layer" "m" "ST-TXT" "C" "130" "ST-TXT" ""))
(entmakex
(list
(cons 0 "MTEXT")
(cons 100 "AcDbEntity")
(cons 100 "AcDbMText")
(cons 8 "ST-TXT")
(cons 10 ins-pt)
(cons 1 (getstring T "\nEnter Pipe size: "))
(cons 71 5)
(cons 50 ang)
(cons 7 "Simplex")
(cons 40 (* (getvar "dimscale") 0.1))
)
)
(setvar "cmdecho" 1)
(command "UCS" "P")
(princ)
);defun
(defun errortrap (msg)
(if oldvar (mapcar 'setvar varlst oldvar))
(setq *error* temperr)
(or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
(princ (strcat "\n<< Error: " msg " >>"))
)
(princ)
)
列表中的缺点是什么?
我对Lisp了解不多。 创建点对。
阅读关于cons的VLIDE中的Dev帮助。 也试试这个
;;实验室lsp;;标记线/多段线(vl load com)(defun C:LAB(/acsp ang deriv dist dist1 dist2 ent mpt obj para pickpt txt txtpt)(setq acsp(vla get block(vla get activelayout(vla get activedocument(vlax get acad object)))(而(setq ent(entsel“\n选择线/pline:”)(setq obj(vlax ename->vla object(car ent))pickpt(vlax curve getclosestpointto obj(cadr ent))para(vlax curve getparamatpoint obj pickpt)mpt(vlax curve getpointatparam obj(+0.5(fix para)))txtpt(vlax-3d-point mpt)deriv(vlax curve getfirstderiv obj(vlax curve getparamatpoint obj pickpt))(if(zerop(cadr deriv))(setq ang 0)(setq ang((/pi 2)(atan(/(car deriv)(cadr deriv)))))(if(eq“AcDbLine”(vla get objectname obj))(setq dist(vla get length obj)(progn(setq dist1(vlax curve getdistatparam obj(fix para))dist2(vlax curve getdistatparam obj(1+(fix para)))dist(abs(-dist2 dist1 k)а))(setq txt(vla addtext acsp(rtos dist 3 2)txtpt 15.0));
页:
[1]