【已解决】cad里面怎么批量标注文字,字符串,例如“DN300,L1=”
本帖最后由 君是我的泪 于 2017-12-28 16:06 编辑给定的自定义文字字符串,也可以用晓东工具集吗,不是长度标注,也是lisp吗?
君是我的泪 发表于 2017-12-28 10:54
LINE,POLYLINE,LWPOLYLINE,ARC,ELLIPSE,SPLINE,CIRCLE 都支持了。
(defun c:XDTB_PLSegLen (/ _process val)
(defun _process (e / is2d segs inx g v #angle #length #midpoint p1)
(if (or (xdrx_object_isa e "AcDbSpline")
(xdrx_object_isa e "AcDbEllipse")
(xdrx_object_isa e "AcDbLine")
(xdrx_object_isa e "AcDbArc")
(xdrx_object_isa e "AcDbCircle")
)
(progn
(setq #midpoint (xdrx_getpropertyvalue e "midpoint")
#midpoint (if (xdrx_object_isa e "AcDbCircle")
(nth 1 (xdrx_getsamplept e 5))
#midpoint)
#length (xdrx_getpropertyvalue e "length")
v (xdrx_curve_getfirstderiv e #midpoint)
#angle (xdrx_vector_angle v)
#angle (xd::geom:angleformat #angle)
p1 (trans (polar #midpoint
(+ #angle (/ pi 2.0))
(/ #txt_height 2.0)
)
e
0
)
)
(xdrx_text_make p1
(strcat "DL300,L1=" (rtos #length 2 #txt_bit))
(getvar "textstyle")
#txt_height
#angle
)
(xd::text:setalignment (entlast) p1 "BC")
)
(progn
(if (xdrx_object_isa e "AcDb2dPolyline")
(progn
(setq is2d t e (xdrx_entity_copy e))
(xdrx_polyline_convertfrom e)
)
)
(setq segs (xdrx_polyline_numverts e))
(setq inx 0)
(repeat segs
(if (setq g (xdrx_polyline_getlinesegat e inx t))
(progn
(xdge::getpropertyvalue g "length" "midpoint" "angle")
)
(progn (setq g (xdrx_polyline_getarcsegat e inx t))
(xdge::getpropertyvalue g "length" "midpoint")
(setq v (xdrx_curve_getfirstderiv e #midpoint)
#angle (xdrx_vector_angle v)
)
)
)
(setq #angle (xd::geom:angleformat #angle)
p1 (trans (polar #midpoint
(+ #angle (/ pi 2.0))
(/ #txt_height 2.0)
)
e
0
)
)
(xdrx_text_make p1
(strcat "DL300,L1=" (rtos #length 2 #txt_bit))
(getvar "textstyle")
#txt_height
#angle
)
(xd::text:setalignment (entlast) p1 "BC")
(setq inx (1+ inx))
)
(xdge::free g)
(if is2d
(xdrx_entity_delete e)
)
)
)
)
(if (not #txt_height)
(setq #txt_height 3.5)
)
(if (not #txt_bit)
(setq #txt_bit 1)
)
(if (setq val (getint (xdrx_prompt "\n保留位数<" #txt_bit ">:" t)))
(setq #txt_bit val)
)
(if (setq val (getreal (xdrx_prompt "\n字高<" #txt_height ">:" t)))
(setq #txt_height val)
)
(xdrx_begin)
(xdrx_sysvar_push '("dimzin" 0))
(while
(and (xdrx_initssget "\n选择线、多段线<退出>:")
(setq ss (xdrx_ssget
'((0 . "line,*POLYLINE,ellipse,arc,spline,circle"))
)
)
)
(xd::text:init 1)
(mapcar '(lambda (x) (_process x)) (xdrx_pickset->ents ss))
)
(xdrx_sysvar_pop)
(xdrx_end)
(princ)
)
君是我的泪 发表于 2017-12-27 15:12
LINE也可以了
(defun c:XDTB_PLSegLen (/ _process val)
(defun _process (e / segs inx g v #angle #length #midpoint p1)
(if (xdrx_object_isa e "AcDbLine")
(progn (setq isLINE t
e (xdrx_polyline_make (xdrx_getsamplept e))
)
)
)
(setq segs (xdrx_polyline_numverts e))
(setq inx 0)
(repeat segs
(if (setq g (xdrx_polyline_getlinesegat e inx t))
(progn
(xdge::getpropertyvalue g "length" "midpoint" "angle")
)
(progn (setq g (xdrx_polyline_getarcsegat e inx t))
(xdge::getpropertyvalue g "length" "midpoint")
(setq v (xdrx_curve_getfirstderiv e #midpoint)
#angle (xdrx_vector_angle v)
)
)
)
(setq #angle (xd::geom:angleformat #angle)
p1 (trans
(polar #midpoint (+ #angle (/ pi 2.0)) (/ #txt_height 2.0))
e
0
)
)
(xdrx_text_make
p1
(strcat "DL300,L1=" (rtos #length 2 #txt_bit))
(getvar "textstyle")
#txt_height
#angle
)
(xd::text:setalignment (entlast) p1 "BC")
(setq inx (1+ inx))
)
(xdge::free g)
(if isLine
(xdrx_entity_delete e)
)
)
(if (not #txt_height)
(setq #txt_height 3.5)
)
(if (not #txt_bit)
(setq #txt_bit 1)
)
(if (setq val (getint (xdrx_prompt "\n保留位数<" #txt_bit ">:" t)))
(setq #txt_bit val)
)
(if (setq val (getreal (xdrx_prompt "\n字高<" #txt_height ">:" t)))
(setq #txt_height val)
)
(xdrx_begin)
(xdrx_sysvar_push '("dimzin" 0))
(if (and (xdrx_initssget "\n选择线、多段线<退出>:")
(setq ss (xdrx_ssget '((0 . "line,LWPOLYLINE"))))
)
(progn (xd::text:init 1)
(mapcar '(lambda (x) (_process x)) (xdrx_pickset->ents ss))
)
)
(xdrx_sysvar_pop)
(xdrx_end)
(princ)
)
[*]多搜索论坛,用 多段线 标注 做关键字。
[*]批量标注多段线各段长度(支持弧线)15 个回复 - 616 次查看有朋友求助这个,http://bbs.xdcad.net/thread-711444-1-1.html2017-8-6 10:09 - newer - 每日插件
[*]折线(多段线)标注59 个回复 - 1003 次查看1、间距,界线的长度按实际出图希望的数值定。在基准比例下。 比如,米单位绘图,希望出图后界线长度1厘米,那么长度设置为10, 毫米单位绘图,长度设置为1000. 2、不用考虑出图比例,各种比例程序都能处理,保证 ...2016-6-30 09:16 - newer - 每日插件
[*]标注多段线各边长度及夹角29 个回复 - 157 次查看函数 mr_IsPointInside: **** 本内容被作者隐藏 ****2017-7-25 11:35 - Lisphk - A/VLISP
[*]在多段线上拖动标注文字
marting 发表于 2017-12-26 13:45
这是标注 某一特定的自定文字,不是标注长度
君是我的泪 发表于 2017-12-26 14:01
都是在多段线上标字,你改下代码里面的标注的内容不就行了,程序框架是一样的。
再说了,你这样发帖,不好帮你,一是你图片看不清,另外你想怎么标,文字和多段线什么关系等等都没有说明。
如果你想要帮你写个,去编程申请论坛,把你的详细条件都说清楚,截图醒目些,然后传个DWG压缩文件供测试。
你DN300,L1=等号后面不是还有每段的长度吗?
上面的程序标注出长度,你在程序代码里面找到写文字的部分,前面加上字符串 DN300,L就行了。
你这些文字要是变化的就得改程序了。
怎么改?批量标注Line及Pline各段长度.LSP
(defun c:XDTB_Dimlines (/ ss e pts an dm)
(defun mkrotate (p1 p2 p3 an / dm)
(setq dm (xdrx_dimension_makerotate p1 p2 p3 an))
(mapcar '(lambda (x) (xdrx_setpropertyvalue dm x t))
'("Dimsd1" "Dimsd2" "Dimse1" "Dimse2")
)
)
(if (setq ss (ssget '((0 . "*polyline,line"))))
(progn
(xd::begin)
(xdrx_setsstodb ss 0)
(while (setq e (xdrx_getentdata 0))
(if (= (xdrx_getpropertyvalue e "IsA") "AcDbLine")
(progn (setq pts (xdrx_curve_getpoint e)
an(xdrx_getpropertyvalue e "Angle")
)
(mkrotate (car pts) (last pts) (cadr pts) an)
)
(progn
(setq pts (xdrx_entity_getstretchpoint e))
(mapcar
'(lambda (p1 p2 / d pcen midp)
(if (zerop (xdrx_polyline_getbulgeat
e
(fix (xdrx_curve_getparamatpoint e p1))
)
)
(mkrotate p1 p2 (xdrx_line_midp p1 p2) (angle p1 p2))
(progn
(setq d (xdrx_curve_getdistatpoint e p1 p2)
pcen (cadr
(xdrx_polyline_getArcSegAt
e
(fix (xdrx_curve_getparamatpoint e p1))
)
)
midp (xdrx_curve_getpointatparam
e
(/ (+ (xdrx_curve_getparamatpoint e p1)
(xdrx_curve_getparamatpoint e p2)
)
2.
)
)
dm (xdrx_dimension_make2lang
pcen p1 pcen p2 midp)
)
(mapcar '(lambda (x) (setpropertyvalue dm x t))
'("Dimsd1" "Dimsd2" "Dimse1" "Dimse2")
)
(xdrx_setpropertyvalue dm "Dimtext" (rtos d 2 2))
)
)
)
pts
(cdr pts)
)
)
)
)
(xd::end)
)
)
(princ)
)
君是我的泪 发表于 2017-12-27 08:47
改什么啊? 你说下规则啊,什么字改成什么?
newer 发表于 2017-12-27 09:26
每条直线,多段线标注特定“自定义”字符例如:"DN300,L1="修改以上代码,以上代码是标注长度的,能既标注特定字符,又标注长度更好
君是我的泪 发表于 2017-12-27 11:59
找这行代码
(xdrx_setpropertyvalue dm "Dimtext" (rtos d 2 2))
改成:
(xdrx_setpropertyvalue dm "Dimtext"(strcat "DN300,L1=" (rtos d 2 2)))
本帖最后由 君是我的泪 于 2017-12-27 13:50 编辑
marting 发表于 2017-12-27 12:13
不对的,只标注了长度,和原来是一样的,没那么简单吧
君是我的泪 发表于 2017-12-27 13:41
你找的代码,并不是最好的
批量标注多段线各段长度(支持弧线)拿这个改
支持弧线段
(defun c:XDTB_PLSegLen (/ _process val)
(defun _process (e / segs inx g v #angle #length #midpoint p1)
(setq segs (xdrx_polyline_numverts e))
(setq inx 0)
(repeat segs
(if (setq g (xdrx_polyline_getlinesegat e inx t))
(progn
(xdge::getpropertyvalue g "length" "midpoint" "angle")
)
(progn
(setq g (xdrx_polyline_getarcsegat e inx t))
(xdge::getpropertyvalue g "length" "midpoint")
(setq v (xdrx_curve_getfirstderiv e #midpoint)
#angle (xdrx_vector_angle v))
)
)
(setq #angle (xd::geom:angleformat #angle)
p1 (trans (polar #midpoint
(+ #angle (/ pi 2.0))
(/ #txt_height 2.0))
e
0
)
)
(xdrx_text_make
p1
(strcat "DL300,L1=" (rtos #length 2 #txt_bit))
(getvar "textstyle")
#txt_height
#angle
)
(xd::text:setalignment (entlast) p1 "BC")
(setq inx (1+ inx))
)
(xdge::free g)
)
(if (not #txt_height)
(setq #txt_height 3.5)
)
(if (not #txt_bit)
(setq #txt_bit 1)
)
(if (setq val (getint (xdrx_prompt "\n保留位数<" #txt_bit ">:" t)))
(setq #txt_bit val)
)
(if (setq val (getreal (xdrx_prompt "\n字高<" #txt_height ">:" t)))
(setq #txt_height val)
)
(xdrx_begin)
(xdrx_sysvar_push '("dimzin" 0))
(if (and (xdrx_initssget "\n选择多段线<退出>:")
(setq ss (xdrx_ssget '((0 . "LWPOLYLINE"))))
)
(progn
(xd::text:init 1)
(mapcar '(lambda (x) (_process x)) (xdrx_pickset->ents ss))
)
)
(xdrx_sysvar_pop)
(xdrx_end)
(princ)
)
本帖最后由 君是我的泪 于 2017-12-27 15:15 编辑
marting 发表于 2017-12-27 14:20
貌似只能选择多段线,怎么改一下,能选择直线,还要用pedit合并
君是我的泪 发表于 2017-12-27 15:12
搜索论坛 线变复线 或者连接
工具是组合用的。
marting 发表于 2017-12-27 16:47
arc弧线行吗?要pedit,样条曲线spline 可以吗?要转化为多段线?
页:
[1]
2