乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 77|回复: 5

[编程交流] 将文本附加到文件

[复制链接]

16

主题

119

帖子

109

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
82
发表于 2022-7-6 08:44:19 | 显示全部楼层 |阅读模式
我有一个非常有用的mass properties lisp(mp.lsp)。我已经有很多年了,我不记得我从哪里得到它。
 
  1. ;
  2. ; CALCULATION OF MASS PROPERTIES (This won't work if C: drive is locked
  3. by your administrator)
  4. ;
  5. (defun c:mp()
  6. (setq fn
  7. "c:/mass.mpr")
  8. (princ "\n Please select a region:")
  9. (setq ss
  10. (ssget))
  11. (command "massprop" ss "" "y" fn)
  12. (setq fn1 (open fn
  13. "r"))
  14. (setq x (read-line fn1))
  15. (setq n 1)
  16. (while (/=
  17. n 5)
  18. (setq x (read-line fn1))
  19. (setq y
  20. (read-line fn1))
  21. (setq n (+ n 1))
  22. )
  23. (close
  24. fn1)
  25. (setq x1 (read (substr x 26)))
  26. (setq y1 (read (substr y
  27. 26)))
  28. (setq pt1 (list x1 y1))
  29. (command "point"
  30. pt1)
  31. (command "ucs" "o" pt1)
  32. (command "massprop" ss "" "y"
  33. fn)
  34. (textscr)
  35. (command "ucs" "w")
  36. )

 
它创建了一个扩展名为的临时文本文件。可以用任何文本编辑器打开的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沿[1.000 0.000]
J: 520833.333沿[0.000 1.000]
 
 
 
这是我希望最终文本的示例,每行都添加了一个后缀:-
 
 
----------------地区-------------
面积: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沿[1.000 0.000]mm^4
J: 520833.333沿[0.000 1.000]mm^4
 
 
我进行了搜索,可以通过手动为每一行输入一个后缀,找到在单个文本行上应用后缀的lisp例程。但如果我能把它自动化,那就更好了。
 
另一个充满希望的帖子是我在寻求帮助。
回复

使用道具 举报

16

主题

119

帖子

109

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
82
发表于 2022-7-6 09:03:28 | 显示全部楼层
我确实找到了一种相对快速、简单的方法,不用lisp就能做到这一点。
 
打开。在记事本中复制mpr文件,然后将文本粘贴到excel文件中,在该文件中,可以通过连接轻松地将单位附加到文本中。
 
复制生成的文本并将特殊文本粘贴回AutoCAD dwg。
094424lmxl6zfxfdrz78mq.jpg
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 09:10:35 | 显示全部楼层
只需阅读lisp帮助中关于如何打开文件的内容,这非常简单
我会的
选择一个pt
打开“r”
读入一行
添加额外文本strcat
pt处的文字计算下一点1.4倍car下方文字高度,拾取pt的cadr为x和y
 
 
 
代码令人困惑,似乎做了两次相同的事情,但读取行是你想要的。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 09:21:48 | 显示全部楼层
  1. (defun c:mp2 (/ ss ptx fn fn1 str)
  2. (defun Text (pt hgt str sty)
  3.    (entmakex (list (cons 0 "TEXT")
  4.      (cons 10 pt)
  5.      (cons 40 hgt)
  6.      (cons 7 sty)
  7.      (cons 1 str)
  8.       )
  9.    )
  10. )
  11. (setq txtlst nil)
  12. (if (setq ss (ssget "_+.:E:S" '((0 . "REGION"))))
  13.    (progn
  14.      (command "_.UCS"
  15.        "_Origin"
  16.         (setq ptx (vlax-safearray->List
  17.      (variant-value
  18.        (vlax-get-property
  19.          (vlax-ename->vla-object
  20.     (cadar (ssnamex ss))
  21.          )
  22.          'centroid
  23.        )
  24.      )
  25.    )
  26. )
  27.      )
  28.      (command "point" "0,0,0")
  29.      (command "massprop"
  30.        ss
  31.        ""
  32.        "y"
  33.        (setq fn
  34.        "c:/mass.mpr"
  35.        )
  36.      )
  37.      (terpri)
  38.      (command "ucs" "w")
  39.      (progn
  40. (setq fn1 (open fn "r"))
  41. (read-line fn1)
  42. (while
  43.   (setq str (read-line fn1))
  44.    (setq txtlst (cons str txtlst))
  45. )
  46. (close fn1)
  47.      )
  48.      (textscr)
  49.      (setq Txtpt (list (car ptx)
  50.   (- (cadr ptx) (* (getvar 'Textsize) 1.70) )
  51.   (last ptx)
  52.    )
  53.      )
  54.      (mapcar (function (lambda (lst1 lst2)
  55.     (Text (trans (setq Txtpt
  56.           (list
  57.      (car Txtpt)
  58.      (- (cadr Txtpt)
  59.         (* (getvar 'Textsize)
  60.            1.70
  61.         )
  62.      )
  63.      (last Txtpt)
  64.           )
  65.    ) 1 0)
  66.    (getvar 'Textsize)
  67.    (strcat lst1 lst2)(getvar 'Textstyle)
  68.     )
  69.   )
  70.       )
  71.       (reverse txtlst)
  72.       '(""  ""   " mm^2"  " mm"    " mm"    " mm"
  73. " mm"  " mm"   " mm^4"  " mm^4"  " mm^2"  " mm"
  74. " mm"  ""   " mm^4"  " mm^4"
  75.        )
  76.      )
  77.    )
  78. )
  79. (princ)
  80. )
回复

使用道具 举报

16

主题

119

帖子

109

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
82
发表于 2022-7-6 09:37:16 | 显示全部楼层
太棒了。工作是一种享受。非常感谢你。
再一次,你帮了我很大的忙。
 
这段代码我会经常使用,即使像我这样一个没有lisp的人也可以很容易地修改代码以适应厘米单位和英制单位。
 
比格尔,谢谢你的评论。我认为这促使pBe陷入困境。
 
我真的相信世界各地的许多人都会进行搜索,找到并使用这段极其有用的代码。
 
我自己的代码:-
 
  1. Cadtutor (pBe, Lee Mac, et al) = Fantastic Forum
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 09:48:43 | 显示全部楼层
 
欢迎马尼拉·沃尔夫,这都是比格尔的想法,真的,它本来可以写得完全不同,但我真的不想重写整个代码,作为对原作者的尊重,但它仍然适合你。
 
干杯
 
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-7 08:16 , Processed in 0.391462 second(s), 66 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表