文字拟合lisp
大家好,我想知道是否有一个lisp例程,当你把一个dtext字符串放到一个矩形中时,它会缩小到适合里面?我查看了express工具中的“文字拟合”命令,但它只会收缩或拉伸长度。
谢谢
布瑞恩 文本属性之一是宽度因子,因此对于矩形,将文本高度设置为矩形高度宽度因子可能需要一个模糊因子,因为III与AAA的长度不同,因此取决于实际文本内容,这称为紧排。我会做一些像+或-或=重复接受的事情来获得效果。可能搜索Kern文本
使用多行文字和备用文本编辑器(带扩展(或收缩)字母间距的\T修饰符)发现此问题。 布莱恩,
“快速工具”命令“文本拟合”使用宽度因子收缩或拉伸文本字符串以匹配所需的长度,如果我理解正确,您还需要高度匹配。
也许是这样的
(defun c:test (/ ss esel txtobj old_osmll ur
ll1 ur1 llpt urpt ulpt brptllpt1 urpt1
ulpt1brpt1scf nscf
)
(prompt "\n Select the rectangle to fit text inside: ")
(if
(and (setq ss (ssget "_:S:E" '((0 . "LWPOLYLINE"))))
(setq esel (entsel "\nSelect the text to fit in the rectangle: "))
)
(progn
(setq txtobj (vlax-ename->vla-object (car esel)))
(if (equal (vla-get-ObjectName txtobj) "AcDbText")
(progn
(setq old_osm (getvar "osmode"))
(setvar "osmode" 0)
(vla-getboundingbox
(vlax-ename->vla-object (ssname ss 0))
'll
'ur
)
(vla-getboundingbox txtobj 'll1 'ur1)
(setq llpt(trans (vlax-safearray->list ll) 0 1)
urpt(trans (vlax-safearray->list ur) 0 1)
ulpt(list (car llpt) (cadr urpt) (caddr urpt))
brpt(list (car urpt) (cadr llpt) (caddr llpt))
llpt1 (trans (vlax-safearray->list ll1) 0 1)
)
;; setq
(vl-cmdf "move" (car esel) "" llpt1 llpt)
(vla-update txtobj)
(vla-getboundingbox txtobj 'll1 'ur1)
(setq llpt1 (trans (vlax-safearray->list ll1) 0 1)
urpt1 (trans (vlax-safearray->list ur1) 0 1)
ulpt1 (list (car llpt1) (cadr urpt1) (caddr urpt1))
)
;; setq
(vl-cmdf "scale" (car esel) "" llpt "R" "@" ulpt1 ulpt "")
(vla-update txtobj)
(vla-getboundingbox txtobj 'll1 'ur1)
(setq llpt1 (trans (vlax-safearray->list ll1) 0 1)
urpt1 (trans (vlax-safearray->list ur1) 0 1)
brpt1 (list (car urpt1) (cadr llpt1) (caddr llpt1))
scf (vla-get-scalefactor txtobj)
nscf(/ (* (distance llpt brpt) scf) (distance llpt1 brpt1))
)
;; setq
(vla-put-scalefactor txtobj nscf)
(setvar "osmode" old_osm)
)
;; progn
)
;; if
)
;; progn
)
;; if
)
亨里克 亨里克,
我想知道是否有办法缩小文本以适应内部,而不是拉伸和收缩以适应?
谢谢
布瑞恩
文本收缩。图纸 尝试以下快速编写的代码:
(defun c:tfit ( / ln pl pt tx )
(if
(and
(setq pl (LM:selectifobject "\nSelect LWPolyline: " "LWPOLYLINE"))
(setq tx (LM:selectifobject "\nSelect Text: " "TEXT"))
(setq pl (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= 10 (car x))) (entget pl)))
ln (length pl)
pt (mapcar '/ (apply 'mapcar (cons '+ pl)) (list ln ln))
tx (entget tx)
)
)
(entmod
(subst '(72 . 1) (assoc 72 tx)
(subst '(73 . 2) (assoc 73 tx)
(subst (cons 10 pt) (assoc 10 tx)
(subst (cons 11 pt) (assoc 11 tx)
(subst
(cons 40
(* 0.8 ;; Text Gap
(-
(cadr (apply 'mapcar (cons 'max pl)))
(cadr (apply 'mapcar (cons 'min pl)))
)
)
)
(assoc 40 tx)
tx
)
)
)
)
)
)
)
(princ)
)
;; Select if Object-Lee Mac
;; Continuously prompts the user for a selection of a specific object
(defun LM:SelectifObject ( msg obj / ent )
(while
(progn (setvar 'errno 0) (setq ent (car (entsel msg)))
(cond
( (= 7 (getvar 'errno))
(princ "\nMissed, try again.")
)
( (= 'ename (type ent))
(if (/= obj (cdr (assoc 0 (entget ent))))
(princ "\nInvalid Object Selected.")
)
)
)
)
)
ent
)
(princ)
如有必要,调整突出显示的文字间距。 李,
这正是我想要的,在看了你的代码后,我找到了一行,如果我需要把文本缩小,我可以。我真的很感谢你们在CadForum上给我的帮助。我正在慢慢地但肯定地学习如何编写小的简单例程,但我在阅读代码和学习每一行通过可视化Lisp编辑器所做的事情方面越来越好,Henrique aka(hmsilvia)向我展示了如何为Lisp例程设置动画,以便我能够理解它的工作原理。
再次感谢各位,
布瑞恩 欢迎您,Brian,当然,如果您对代码有任何问题,请提问。 你好
李,谢谢你的代码,它可以工作,但不是在所有情况下都可以。例如:
https://www.cadtutor.net/forum/image/png;base64,Ivborw0kggoaaansuheugaaamqaaaadycaiaadk5gjmaakzeleqvr4no3d2xabyhiaup7/p3ufcppjxdzg0emney8eddtqddmypbwhaaaaaaaaaaaaaaaaaaaakg8hjkpafaw4ealdwcl2hdz0juarwy4eekdwci23lz0dmarg25eegewia03l70dwmsgm5feqxcv18th9lxvvlyc6pdxcpfw6uvsxyjhnvej5xybjwzfnzfzfzfzfgzfwwzfwwzfwzfwwzfwwzfwzfwzfwzfwzfwwwliulfdueq4/a6u9tey6g3dtmdhazkul6twimyzouo5g31v9pp7j4urp4cqqmcqiovpcjes61dssn5b/Bd+dtnTNPxG0faBaPEQ18e1YljWodhhvL3yL75YO/+BmnSLUFtBqGAI6vMfKQ3LOhQ7hjvL/vrrtWkf2Di7QZxICOrLJdLk8WhBsQO4uebfesk27T/+gmwIQcIgqO/Wh2FZh2Lvdn/Bv/uqbdo/k0byleqfani8owreoxt3q02m+8cJv2Davbt4XtARDU+cowlotq7h2elv7r92m/sjk3bvsqxflwhmudir3jghv++XbZ7fe+it2vdwjgzz1khzehmw5oyyvmhyudlwpa4jg4hv Nykzlnuodl6gzy9bk5hhwydi52vy9rg1irmwdsh2xozlj1utmgfzh2lnzvj2udwjgzz1khzehmww5oyyvmhyudlwpa4nykzlnuodl6gzy9bk9jsytnvmhteh2hpsgpw3ltre1lvc11a1mhp97vymwpi1484rthC6mdXV/Z+5o9/pE+VGJWXTHKF/rSC0dcmynQFMLpDDG32VYVhb1H+DNEG6VUDUYXJ9MU6JR0RPZPPWPBGVKOVJJVFPSTW3WOBRLM9XZDPZH7VIRA1LKO+TCXC5m3oT1XS8+sayrTyzKJ3PdNAfL+Q6QRW7KutolxU6MRXK54/vs8/6JQ4TR5C7SMNZBDM8/SKKdbFYOu85TT3vmydbuFDRvO/BSWAORSIGvrzXTRZXT VT3NN/VhefUt6d51frWZQitxK9q9kUj+b/6+TpoVdYNWrAtf51WoGBUmsavOq5nVm8t+9OpZ0hEtfkPY6+7HIkf+QF58OS1ZVO1C1RZ31HZSZ4JXK1BVOOO6BHL85MAZFW1C1XZOJPTG+0diznCG3ULVuCBHbd4/qegwvxtxnw8zz5yrsolrzhvbfqvhwjltch6lgvlu7vzwvmxo+jltjgud4u25hyjyp4xbsh0qrvdxovc3rzk2mtwrvsyj3klbjepp7bjl9is6zfw1c1xzonm34y9r1bgai9ysw4bil+i4rxuoql5vo1czmpmv6nx2rn8l9uu2u97kow1oqkfxvzlxn68yzjp9urgprnhut60lx9zx5zx5gusefqve1bzopm7yb 8LVE1q3fvxf0vhoy6xz7rlv7vzvvm6mgj4mhnqn02fx5jx9sutrajp1e1c1c1xzounflpsyluvvfbxnor2rmqez3xn8tndmtct96rbelpve1c1bzoedfsjozllvvv1tbx9kp2rmpez3zochpdmt92qbeHpVO1c1rzO+wWcTwzLXrfdqm3h6VTtXNa8zvht2E8My1633apt4elU7VzWvM+9+d7f/dWQQwzLXrfdqm3h6VTtXNa8z72T8Vn06FvMdhmWuW+/VNVH0QNAual5NLMD8OZGD63MZYZNRNU1TTY9QV8PT8CVES3J25XPWnJRDMV1T35Y+T6V7DNKANBFPPKOHES3RHDZ3WB5PN9CKK9KTLNIC5VK/DRB5KE8HLEB3U+lHpZHzid0+7HNCUDGTO/Zauk9XI8TX1gZVoX+SvZh+WR8AkNMnFj3osp0j0ke28R2vfZD69M91L/rcCwPLI9oaGGbpC7MFeZ360sx+823EmVUfA/agzLI9UTGnDu7ro+IXIWDXVADVFWLBCF/HIV1TZVBL+Lf9zzdn5lmncr2wllezyxnkeuljx3dsndmmwfvrmj/+7sMlf4aHVylYXkkeULjX9NzUU3ST1nNuFR6HypR4wWDLIoNyyPDExr8ss2fiJpSfzjXivzL72Jk/wUonXrD8gj/hEa+cudnIbHXYz1jS+l1HFsf1LYdGbCSX/cvejqvmbfjmierpkr56r3aijbcvpqoybebl56b7cidtcvqnyxiabl94blgldzuvvabz5otifaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaawcuvh8phcdjihbgecwia9slnpnabadbeunkuliaa2gs3m8ifbeb74wztuiaac/cbAoXEADthZtN4QICoL1wsylcQAC0F242hQsIgPbCzaZwAQHQXrjZFC4gNnu9BqyJIRfhXc/L/vrKkMB+9PwulBJuRYQLiJ2GbFv2vi2el/270yddduxdqcgcgxenv82q2g7iw2vswel/383NtXfutEy4b/hFsL4QJijz/7116330年1月voyxznxxxnejn4rzguidy4omonwtteutm7x3z39sttauf24vhaui1f7zm+5tVUMuwrtm9G7ID6/5myevhc4qjiqqc+70pcxx zmx2c0zq3fntvkgaacl1p1xabgany8uwpi5w/Q8XEJvZ6fIyLKkjXP/DBcRmdrq8DEvqCNf/cagxmzoul8ososol1p1xabfz7p5pdglnqf5lfwvu/XEBsVn6nK/yphiDD8t5lh1+B3ML1P1xAbFZ+WB51Py8fZ1jeu/LA00kvXP/dbcrmhyblufsb2einy3xh3iufytrf7ia2kzjsdxwfxnbstgg5b3rpzyrisl1xabnznwb6rxlfcjucwvhel22drr7j+hwuizvony2pvezidksf51yw7t3ozrw/q8xej1g5bhalletl7yg25ks944fofliaazgsj28crpffnusfd8bgvx/3ABsVnPYXl8irlACnFOuSFj/RkpXP/DBcRmbYfl8SHs7PFHO+wgpc1Gmhd9f9 DXCQM3uelsfvt6lsjuimw5i6wvu/xebszlimdj7mktfk7qjjot/uIDYrPOw9DLspFMC3oLowi2BcAGxWdth6Q0+804jdx1ycckwgxezj2hpy+otd0lymxjnxccbcqmzuclr6uYPYp269MPuHWQriA2KzbsPwx1Eq57Dpl42XJKtxyCBcQm7UalhfjLJbOk7NMShYJtyLCBcRmfYZlhCEx1u0g9/7SKKK2RBBZUYQLIM2ADMS4LZ8O9CTCXS9HX68QE4RBF+ECYRMO3L2V8B2MTSCTUPWC7C0WGXEZUWH5CPYQZMURJBUNRLICWEL3Z/CJR0VLRPV8FZPR9UU8ILWMCCRDAWGUEQHVHZLO4GABOL9XSCHCQAO2FM03HAGGGVXEL3Z Czkvxaalqxbjafcwia9slnpnabadbeunkuliaa2gs3m8ifbeb74wztuiaac/cbho5ha6hwxhvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgsf8BAJz/gphzokqaaaasuvork5cyii=http://i.imgur.com/x9Cehk3.png
https://www.cadtutor.net/forum/image/png;base64,Ivborw0kggoaaansuheugaaamqaaaadycaiaadk5gjmaakzeleqvr4no3d2xabyhiaup7/p3ufcppjxdzg0emney8eddtqddmypbwhaaaaaaaaaaaaaaaaaaaakg8hjkpafaw4ealdwcl2hdz0juarwy4eekdwci23lz0dmarg25eegewia03l70dwmsgm5feqxcv18th9lxvvlyc6pdxcpfw6uvsxyjhnvej5xybjwzfnzfzfzfzfgzfwwzfwwzfwzfwwzfwwzfwzfwzfwzfwzfwwwliulfdueq4/a6u9tey6g3dtmdhazkul6twimyzouo5g31v9pp7j4urp4cqqmcqiovpcjes61dssn5b/Bd+dtnTNPxG0faBaPEQ18e1YljWodhhvL3yL75YO/+BmnSLUFtBqGAI6vMfKQ3LOhQ7hjvL/vrrtWkf2Di7QZxICOrLJdLk8WhBsQO4uebfesk27T/+gmwIQcIgqO/Wh2FZh2Lvdn/Bv/uqbdo/k0byleqfani8owreoxt3q02m+8cJv2Davbt4XtARDU+cowlotq7h2elv7r92m/sjk3bvsqxflwhmudir3jghv++XbZ7fe+it2vdwjgzz1khzehmw5oyyvmhyudlwpa4jg4hv Nykzlnuodl6gzy9bk5hhwydi52vy9rg1irmwdsh2xozlj1utmgfzh2lnzvj2udwjgzz1khzehmww5oyyvmhyudlwpa4nykzlnuodl6gzy9bk9jsytnvmhteh2hpsgpw3ltre1lvc11a1mhp97vymwpi1484rthC6mdXV/Z+5o9/pE+VGJWXTHKF/rSC0dcmynQFMLpDDG32VYVhb1H+DNEG6VUDUYXJ9MU6JR0RPZPPWPBGVKOVJJVFPSTW3WOBRLM9XZDPZH7VIRA1LKO+TCXC5m3oT1XS8+sayrTyzKJ3PdNAfL+Q6QRW7KutolxU6MRXK54/vs8/6JQ4TR5C7SMNZBDM8/SKKdbFYOu85TT3vmydbuFDRvO/BSWAORSIGvrzXTRZXT VT3NN/VhefUt6d51frWZQitxK9q9kUj+b/6+TpoVdYNWrAtf51WoGBUmsavOq5nVm8t+9OpZ0hEtfkPY6+7HIkf+QF58OS1ZVO1C1RZ31HZSZ4JXK1BVOOO6BHL85MAZFW1C1XZOJPTG+0diznCG3ULVuCBHbd4/qegwvxtxnw8zz5yrsolrzhvbfqvhwjltch6lgvlu7vzwvmxo+jltjgud4u25hyjyp4xbsh0qrvdxovc3rzk2mtwrvsyj3klbjepp7bjl9is6zfw1c1xzonm34y9r1bgai9ysw4bil+i4rxuoql5vo1czmpmv6nx2rn8l9uu2u97kow1oqkfxvzlxn68yzjp9urgprnhut60lx9zx5zx5gusefqve1bzopm7yb 8LVE1q3fvxf0vhoy6xz7rlv7vzvvm6mgj4mhnqn02fx5jx9sutrajp1e1c1c1xzounflpsyluvvfbxnor2rmqez3xn8tndmtct96rbelpve1c1bzoedfsjozllvvv1tbx9kp2rmpez3zochpdmt92qbeHpVO1c1rzO+wWcTwzLXrfdqm3h6VTtXNa8zvht2E8My1633apt4elU7VzWvM+9+d7f/dWQQwzLXrfdqm3h6VTtXNa8z72T8Vn06FvMdhmWuW+/VNVH0QNAual5NLMD8OZGD63MZYZNRNU1TTY9QV8PT8CVES3J25XPWnJRDMV1T35Y+T6V7DNKANBFPPKOHES3RHDZ3WB5PN9CKK9KTLNIC5VK/DRB5KE8HLEB3U+lHpZHzid0+7HNCUDGTO/Zauk9XI8TX1gZVoX+SvZh+WR8AkNMnFj3osp0j0ke28R2vfZD69M91L/rcCwPLI9oaGGbpC7MFeZ360sx+823EmVUfA/agzLI9UTGnDu7ro+IXIWDXVADVFWLBCF/HIV1TZVBL+Lf9zzdn5lmncr2wllezyxnkeuljx3dsndmmwfvrmj/+7sMlf4aHVylYXkkeULjX9NzUU3ST1nNuFR6HypR4wWDLIoNyyPDExr8ss2fiJpSfzjXivzL72Jk/wUonXrD8gj/hEa+cudnIbHXYz1jS+l1HFsf1LYdGbCSX/cvejqvmbfjmierpkr56r3aijbcvpqoybebl56b7cidtcvqnyxiabl94blgldzuvvabz5otifaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaawcuvh8phcdjihbgecwia9slnpnabadbeunkuliaa2gs3m8ifbeb74wztuiaac/cbAoXEADthZtN4QICoL1wsylcQAC0F242hQsIgPbCzaZwAQHQXrjZFC4gNnu9BqyJIRfhXc/L/vrKkMB+9PwulBJuRYQLiJ2GbFv2vi2el/270yddduxdqcgcgxenv82q2g7iw2vswel/383NtXfutEy4b/hFsL4QJijz/7116330年1月voyxznxxxnejn4rzguidy4omonwtteutm7x3z39sttauf24vhaui1f7zm+5tVUMuwrtm9G7ID6/5myevhc4qjiqqc+70pcxx zmx2c0zq3fntvkgaacl1p1xabgany8uwpi5w/Q8XEJvZ6fIyLKkjXP/DBcRmdrq8DEvqCNf/cagxmzoul8ososol1p1xabfz7p5pdglnqf5lfwvu/XEBsVn6nK/yphiDD8t5lh1+B3ML1P1xAbFZ+WB51Py8fZ1jeu/LA00kvXP/dbcrmhyblufsb2einy3xh3iufytrf7ia2kzjsdxwfxnbstgg5b3rpzyrisl1xabnznwb6rxlfcjucwvhel22drr7j+hwuizvony2pvezidksf51yw7t3ozrw/q8xej1g5bhalletl7yg25ks944fofliaazgsj28crpffnusfd8bgvx/3ABsVnPYXl8irlACnFOuSFj/RkpXP/DBcRmbYfl8SHs7PFHO+wgpc1Gmhd9f9 DXCQM3uelsfvt6lsjuimw5i6wvu/xebszlimdj7mktfk7qjjot/uIDYrPOw9DLspFMC3oLowi2BcAGxWdth6Q0+804jdx1ycckwgxezj2hpy+otd0lymxjnxccbcqmzuclr6uYPYp269MPuHWQriA2KzbsPwx1Eq57Dpl42XJKtxyCBcQm7UalhfjLJbOk7NMShYJtyLCBcRmfYZlhCEx1u0g9/7SKKK2RBBZUYQLIM2ADMS4LZ8O9CTCXS9HX68QE4RBF+ECYRMO3L2V8B2MTSCTUPWC7C0WGXEZUWH5CPYQZMURJBUNRLICWEL3Z/CJR0VLRPV8FZPR9UU8ILWMCCRDAWGUEQHVHZLO4GABOL9XSCHCQAO2FM03HAGGGVXEL3Z Czkvxaalqxbjafcwia9slnpnabadbeunkuliaa2gs3m8ifbeb74wztuiaac/cbho5ha6hwxhvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgsf8BAJz/gphzokqaaaasuvork5cyii= 以下情况可能会更好:
(defun c:tfit ( / ln pl pt tx )
(if
(and
(setq tx (LM:selectifobject "\nSelect text: " "TEXT"))
(setq pl (LM:selectifobject "\nSelect polyline: " "LWPOLYLINE"))
(setq pl (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= 10 (car x))) (entget pl)))
pl (mapcar '(lambda ( x ) (apply 'mapcar (cons x pl))) '(min max))
tx (entgettx)
tb (textbox tx)
vc (mapcar '- (avgpt pl) (mapcar '+ (cdr (assoc 10 tx)) (avgpt tb)))
)
)
(entmod
(subst '(72 . 1) (assoc 72 tx)
(subst '(73 . 2) (assoc 73 tx)
(subst (cons 11 (mapcar '+ (cdr (assoc 11 tx)) vc)) (assoc 11 tx)
(subst
(cons 40
(*(cdr (assoc 40 tx)) 0.9 ;; Alter this to suit
(apply 'min
(mapcar '/
(apply 'mapcar (cons '- (reverse pl)))
(apply 'mapcar (cons '- (reverse (textbox tx))))
)
)
)
)
(assoc 40 tx) tx
)
)
)
)
)
)
(princ)
)
(defun avgpt ( lst )
((lambda ( len ) (mapcar '/ (apply 'mapcar (cons '+ lst)) (list len len))) (length lst))
)
;; Select if Object-Lee Mac
;; Continuously prompts the user for a selection of a specific object
(defun LM:selectifobject ( msg obj / ent )
(while
(progn (setvar 'errno 0) (setq ent (car (entsel msg)))
(cond
( (= 7 (getvar 'errno))
(princ "\nMissed, try again.")
)
( (= 'ename (type ent))
(if (/= obj (cdr (assoc 0 (entget ent))))
(princ "\nInvalid Object Selected.")
)
)
)
)
)
ent
)
(princ)
更新后的程序还好吗?
页:
[1]
2