块编辑和旋转lisp req
嗨,朋友们,我需要一个lisp文件将块转换为所需格式的文本(如附图所示)。实际上,我的绘图中有很多块,都要转换为下图所示的格式,之前我正在手动执行以下步骤
1、块编辑
2、删除第三行文字(f8007:21-24)。
3.将字体高度更改为2.0,样式为Arial Black
4、退出块编辑器
5.使用ATTSYNC命令反映所有块中所做的更改,
6.选择相似的所有块并旋转到0度。
另附。有了这个,请帮帮我。
谢谢
Amb。
注释重新排列_1。图纸
你必须自己解决这个问题。如果你试一试,我会帮你带路。你可以从另一篇文章的代码开始。
嗨,ronjonp,很抱歉回复太晚,我在家乡处理一些紧急工作,
实际上,我不知道这个dxf代码,但正如u所说,我试着通过编辑您之前给定的lisp,
但它没有发生,所以请你检查和引导我请。
(defun c:Koo(/a p s)
(entmakex’((0。“样式”)
(100.“AcDbSymbolTableRecord”)
(100.“AcDbTextStyleTableRecord”)
(2.“阿里尔布莱克”)
(70 . 0)
(40 . 0.0)
(41 . 1.0)
(50 . 0.0)
(71 . 0)
(42 . 0.125)
(3.“ariblk.ttf”)
(4 . "")
)
)
(if(setq s(ssget’((0。“insert”)(2。“CUSTOM\u MPE\u EQUIP\u TYPE”)(66.1)))
(foreach b(vl remove if'listp(mapcar'cadr(ssnamex s)))
(和(setq p(cdr(assoc 10(entget b)))
(setq a(vl some’(λ(x))
(if(=“ADRESSE”(vla get tagstring x))
(vla get textstring x)
)
)
(vlax invoke(vlax ename->vla object b)'getattributes)
)
)
(entmake(列表)(0。“文本”)
“(100.“AcDbEntity”)
'(67 . 0)
“(8.“MPE_ANNO”)
'(62 . 1)
“(6.“ByBlock”)
'(100.“AcDbText”)
(cons 10 p)
'(40 . 2.0)
(cons 1 a)
'(50 . 0.0)
'(41 . 1.0)
'(51 . 0.0)
“(7.“阿里亚尔布莱克”)
'(71 . 0)
'(72 . 1)
(cons 11(cdr(assoc 10(entget b)))
'(100.“AcDbText”)
'(73 . 0)
)
)
(entdel b)
)
)
)
(普林斯)
) 下面是一些注释代码。。。请花点时间研究一下。
(defun c:goo (/ a c c2 i p s)
;; Create 'ArialBlack' Style
(entmakex '((0 . "STYLE")
(100 . "AcDbSymbolTableRecord")
(100 . "AcDbTextStyleTableRecord")
(2 . "ArialBlack")
(70 . 0)
(40 . 0.0)
(41 . 1.0)
(50 . 0.0)
(71 . 0)
(42 . 0.125)
(3 . "ariblk.ttf")
(4 . "")
)
)
(defun _ps (str del / pos)
(if (setq pos (vl-string-search del str))
(vl-remove "" (cons (substr str 1 pos) (_ps (substr str (+ pos 1 (strlen del))) del)))
(list str)
)
)
(if (setq s (ssget '((0 . "insert") (2 . "CUSTOM_MPE_EQUIP_TYPE") (66 . 1))))
(foreach b (vl-remove-if 'listp (mapcar 'cadr (ssnamex s)))
;; Get the block insertion point
(setq p (cdr (assoc 10 (entget b))))
;; You have to look for the correct attribute tagnames to populate the correct information
(foreach x (vlax-invoke (vlax-ename->vla-object b) 'getattributes)
(cond ((= "TYPE" (vla-get-tagstring x)) (setq a (vla-get-textstring x)))
((= "READING" (vla-get-tagstring x)) (setq c (_ps (vla-get-textstring x) "\n")))
)
)
(if
(progn (entmake
(list '(0 . "MTEXT")
'(100 . "AcDbEntity")
'(67 . 0)
'(8 . "MPE_ANNO")
'(62 . 1)
'(6 . "Continuous")
'(100 . "AcDbMText")
(cons 10 p)
'(40 . 2.0)
'(41 . 0.0)
'(46 . 0.0)
'(71 . 5)
'(72 . 5)
;; Join the resultant text together
(cons 1
(if (and a c)
(strcat a
"\\P"
(cond ((< (length c) 3) (car c))
((apply 'strcat
(mapcar '(lambda (x) (strcat x "\\P"))
(list (nth (- (length c) 2) c) (last c))
)
)
)
)
)
"Something is not right!"
)
)
'(7 . "ArialBlack")
'(11 1.0 0.0 0.0)
'(50 . 0.0)
'(73 . 1)
'(44 . 1.0)
)
)
;; Delete the block
(entdel b)
)
)
)
)
(princ)
)
;; Loads ActiveX extensions
(vl-load-com)
下面是如何在论坛中添加代码标签。
嗨,Ronjonp,
谢谢你的解释,你能把DXF代码的lisp发给我吗?这对我学习它很有用。
另外,在执行给定的lisp时,它显示以下错误,您能检查一下吗
; 错误:错误的参数类型:VLA-OBJECT nil
再次从上面下载代码。。我转置了一个函数。
嗨,Ronjonp,
非常感谢您的帮助,现在一切都很好,
如果可能的话,你能把dxf代码发给我吗?我很想学习这类代码 我不知道你要什么?你可以从这里开始参考。
嗨,Ronjonp,
一些块包含5行(如附件所示),我之前没有注意到,很抱歉。。
所有包含3行的块都可以很好地使用lisp。
你能帮我一下吗。
我试着编辑(setq c(substr c(+2 I)))
但这并没有发生,请帮帮我。
实际上,概念是我想在完成后保持多行文字有3行,(第一行以4 FO开头……第二行以F8010开头:……第三行以M开头:600……)
如果块有3行,我需要前2行,
如果块有5行,我需要3行(包括M:600….)
希望你能理解我的要求,因为它很紧急,请帮助我。
ronjonp1.dwg
替换:
(strcat a“\\P”c)
使用:
(strcat a“\\P”(vl string subst“\\P”“\n”c))
页:
[1]
2