将文本附加到文件
我有一个非常有用的mass properties lisp(mp.lsp)。我已经有很多年了,我不记得我从哪里得到它。;
; CALCULATION OF MASS PROPERTIES (This won't work if C: drive is locked
by your administrator)
;
(defun c:mp()
(setq fn
"c:/mass.mpr")
(princ "\n Please select a region:")
(setq ss
(ssget))
(command "massprop" ss "" "y" fn)
(setq fn1 (open fn
"r"))
(setq x (read-line fn1))
(setq n 1)
(while (/=
n 5)
(setq x (read-line fn1))
(setq y
(read-line fn1))
(setq n (+ n 1))
)
(close
fn1)
(setq x1 (read (substr x 26)))
(setq y1 (read (substr y
26)))
(setq pt1 (list x1 y1))
(command "point"
pt1)
(command "ucs" "o" pt1)
(command "massprop" ss "" "y"
fn)
(textscr)
(command "ucs" "w")
)
它创建了一个扩展名为的临时文本文件。可以用任何文本编辑器打开的mpr。它将文本文件放在C:drive中。
我要找的是一个lisp,它可以打开文本文件,然后在每行的末尾添加预定义的文本,然后将修改后的文本插入到图形中。
例如,这是文本文件中的典型读数。它始终具有相同的文本行数:-
----------------地区-------------
面积:2500.000
周长:200.000
边界框:X:-25.000--25.000
Y: -25.000--25.000
质心:X:0.000
Y: 0.000
惯性矩:X:520833.334
Y: 520833.334
惯性积:XY:0.000
回转半径:X:14.434
Y: 14.434
关于质心的主矩和X-Y方向:
一: 520833.333沿
J: 520833.333沿
这是我希望最终文本的示例,每行都添加了一个后缀:-
----------------地区-------------
面积:2500.000 mm^2
周长:200.000 mm
边界框:X:-25.000--25.000 mm
Y: -25.000-25.000毫米
质心:X:0.000 mm
Y: 0.000毫米
惯性矩:X:520833.334 mm^4
Y: 520833.334毫米
惯性积:XY:0.000 mm^2
回转半径:X:14.434 mm
Y: 14.434毫米
关于质心的主矩和X-Y方向:
一: 520833.333沿mm^4
J: 520833.333沿mm^4
我进行了搜索,可以通过手动为每一行输入一个后缀,找到在单个文本行上应用后缀的lisp例程。但如果我能把它自动化,那就更好了。
另一个充满希望的帖子是我在寻求帮助。 我确实找到了一种相对快速、简单的方法,不用lisp就能做到这一点。
打开。在记事本中复制mpr文件,然后将文本粘贴到excel文件中,在该文件中,可以通过连接轻松地将单位附加到文本中。
复制生成的文本并将特殊文本粘贴回AutoCAD dwg。
只需阅读lisp帮助中关于如何打开文件的内容,这非常简单
我会的
选择一个pt
打开“r”
读入一行
添加额外文本strcat
pt处的文字计算下一点1.4倍car下方文字高度,拾取pt的cadr为x和y
代码令人困惑,似乎做了两次相同的事情,但读取行是你想要的。
(defun c:mp2 (/ ss ptx fn fn1 str)
(defun Text (pt hgt str sty)
(entmakex (list (cons 0 "TEXT")
(cons 10 pt)
(cons 40 hgt)
(cons 7 sty)
(cons 1 str)
)
)
)
(setq txtlst nil)
(if (setq ss (ssget "_+.:E:S" '((0 . "REGION"))))
(progn
(command "_.UCS"
"_Origin"
(setq ptx (vlax-safearray->List
(variant-value
(vlax-get-property
(vlax-ename->vla-object
(cadar (ssnamex ss))
)
'centroid
)
)
)
)
)
(command "point" "0,0,0")
(command "massprop"
ss
""
"y"
(setq fn
"c:/mass.mpr"
)
)
(terpri)
(command "ucs" "w")
(progn
(setq fn1 (open fn "r"))
(read-line fn1)
(while
(setq str (read-line fn1))
(setq txtlst (cons str txtlst))
)
(close fn1)
)
(textscr)
(setq Txtpt (list (car ptx)
(- (cadr ptx) (* (getvar 'Textsize) 1.70) )
(last ptx)
)
)
(mapcar (function (lambda (lst1 lst2)
(Text (trans (setq Txtpt
(list
(car Txtpt)
(- (cadr Txtpt)
(* (getvar 'Textsize)
1.70
)
)
(last Txtpt)
)
) 1 0)
(getvar 'Textsize)
(strcat lst1 lst2)(getvar 'Textstyle)
)
)
)
(reverse txtlst)
'("""" " mm^2"" mm" " mm" " mm"
" mm"" mm" " mm^4"" mm^4"" mm^2"" mm"
" mm""" " mm^4"" mm^4"
)
)
)
)
(princ)
)
太棒了。工作是一种享受。非常感谢你。
再一次,你帮了我很大的忙。
这段代码我会经常使用,即使像我这样一个没有lisp的人也可以很容易地修改代码以适应厘米单位和英制单位。
比格尔,谢谢你的评论。我认为这促使pBe陷入困境。
我真的相信世界各地的许多人都会进行搜索,找到并使用这段极其有用的代码。
我自己的代码:-
Cadtutor (pBe, Lee Mac, et al) = Fantastic Forum
欢迎马尼拉·沃尔夫,这都是比格尔的想法,真的,它本来可以写得完全不同,但我真的不想重写整个代码,作为对原作者的尊重,但它仍然适合你。
干杯
页:
[1]