乐筑天下

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

[编程交流] 从lisp插入文本

[复制链接]

2

主题

7

帖子

5

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 15:32:27 | 显示全部楼层
谢谢大家,
上周我忙于做其他事情,
我的意图是从文本文件“插入点就是点本身”中插入一些点的Z值(作为文本),
我成功了,
李的代码和其他人的评论都很有帮助,
再次感谢大家,
这是我最后的代码,为了CadTutor的每个人的利益,
 
 
 
  1. (defun c:spot ( / pt1 file1)
  2. (if (not (tblsearch "Layer" "TEXT"))
  3. (command "-layer" "m" "TEXT" "")
  4. )
  5. (setq file1 (open "E:\\Morgos\\AutoCadd\\sh.csv" "r"))
  6. (setq pt1 (read-line file1))
  7. (while
  8. (/= pt1 nil)
  9. (setq pt (read-line file1))
  10. (setq sx (substr pt 1 9))
  11. (setq sy (substr pt 13 22))
  12. (setq sz (substr pt 26 31))
  13. (setq fx (atof sx))
  14. (setq fy (atof sy))
  15. (setq fz (atof sz))
  16. (setq Lpt (list fx fy fz))
  17. (entmake (list '(0 . "MTEXT")
  18. '(100 . "AcDbEntity")
  19. '(100 . "AcDbMText")
  20. '(8 . "TEXT")
  21. (cons 10 Lpt)
  22. '(40 . 2.5)
  23. (cons 1 sz)
  24. '(50 . 0.0)
  25. '(7 . "STANDARD")
  26. '(71 . 0)
  27. '(72 . 0)
  28. '(73 . 0)
  29. ) ;_ end list
  30. ) ;_ end entmake
  31. ) ;_ end while
  32. (princ)
  33. ) ;_ end defun
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 15:37:29 | 显示全部楼层
谢谢Morgos,这是最后一篇慷慨的帖子
回复

使用道具 举报

0

主题

2

帖子

2

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 15:39:26 | 显示全部楼层
顺便问一下,我们如何使用make text函数插入当前“TEXTWIDTH”的文本?
  1. (defun make_text  (txt_pt txt_val)
  2. (entmake (list '(0 . "TEXT")
  3.                 '(8 . "0")
  4.                 (cons 10 txt_pt)
  5.                 (cons 40 (max 2.5 (getvar "TEXTSIZE")))
  6.                 (cons 1 txt_val)
  7.                 '(50 . 0.0)
  8.                 '(7 . "STANDARD")
  9.                 '(71 . 0)
  10.                 '(72 . 1)
  11.                 '(73 . 2)
  12.                 (cons 11 txt_pt))))
回复

使用道具 举报

0

主题

2

帖子

2

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 15:41:42 | 显示全部楼层
我已经解决了:(assoc 41(tblsearch“Style”(getvar“textstyle”))
但我还有另一个问题:它与shx字体不兼容。文本是用错误的位置创建的,文本在双击后被更正。
回复

使用道具 举报

78

主题

207

帖子

129

银币

后起之秀

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

铜币
395
发表于 2022-7-5 15:44:28 | 显示全部楼层
首先,thx用于代码Leemac。我有个问题。在线上
 
“(8.“文本”);为不同的图层更改此选项(在引号中键入图层名称)
 
我尝试使用(getvar“CLAYER”)而不是“TEXT”,我得到了以下错误
 
命令:;错误:错误的DXF组:(8 GETVAR“CLAYER”)
 
我可以在这里不使用getvar吗?
回复

使用道具 举报

CAB

29

主题

781

帖子

430

银币

中流砥柱

Rank: 25

铜币
526
发表于 2022-7-5 15:47:52 | 显示全部楼层
使用(cons 8(getvar“CLAYER”))
或者省略这行代码&它将默认为当前层。
回复

使用道具 举报

78

主题

207

帖子

129

银币

后起之秀

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

铜币
395
发表于 2022-7-5 15:50:56 | 显示全部楼层
谢谢你,好先生。这就成功了。在过去的两年里,我没有写过任何Lisp程序的东西,我忘了很多!
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 15:53:42 | 显示全部楼层
我花了0.05美元,我会把make text defun添加到一个自动加载的lsp例程中,这个例程包含了你所有常用的库,这样你只需要做一行调用就可以使用它。(make\u text(txt\u pt txt\u val))。另一个(insertblock ins\u pt blkname x y ro)
 
例如,我有一个“getval”defun,它弹出一个漂亮的拨号框进行输入,而不是使用getxxxx,它会在屏幕中间弹出消息等。(谢谢AlanJT)
回复

使用道具 举报

21

主题

97

帖子

70

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
117
发表于 2022-7-5 15:58:09 | 显示全部楼层
你好
在我的程序中,我使用在光标上插入文本,但存在一个问题。
程序完全执行一次,第二次仅在输入文本高度后完成。我不明白为什么。
以下是发生此错误的部分代码:
  1. (if
  2.        (setq *ht*
  3.          (cond
  4.            ((getdist (strcat "\nSpecify the height of the text <" (if *ht* (rtos *ht* 2 3) "") ">:[0.5/1.0/1.5/2.0/2.5/3.0]")))
  5.            (*ht*)
  6.          )
  7.        )
  8.        (progn
  9.          (setq e
  10.            (entmakex
  11.              (list
  12.                '(0 . "MTEXT")
  13.                '(100 . "AcDbEntity")
  14.                '(100 . "AcDbMText")
  15.                (cons 8 "Area")
  16.                (cons 62 256)
  17.                (cons 10 '(0 0 0))
  18.                (cons 7 (getvar 'textstyle))
  19.                (cons 40 *ht*)
  20.                (cons 41 0)
  21.                (cons 1
  22.                      (strcat
  23.                        "Land area is : " oar decl
  24.                  )
  25.                )
  26.              )
  27.            )
  28.          )
  29.          (setq e (vlax-ename->vla-object e))
  30.          (grread t)
  31.           (while (not enter)
  32.            (princ "\nSpecify the insertion point of the text...")
  33.            (setq grp (grread T 5 0)
  34.                  reason (car grp)
  35.                  value (cadr grp)
  36.            )
  37.            (cond
  38.              ((or (member reason '(11 12 25)) (= value 13) (= value 32)) (vla-delete e) (setq enter t))
  39.              ((= reason 5) (vlax-put e 'InsertionPoint (trans value 1 0)))
  40.              ((= reason 3) (setq enter t))
  41.            )
  42.          )
  43.        )
  44.        (princ
  45.          (strcat
  46.            "\n\tLand area is : " oar decl
  47.                
  48.          )
  49.        )
  50.     )

请告诉我为什么会出现这个问题。
非常感谢。
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 16:01:28 | 显示全部楼层
 
嗨,也许“enter”变量没有本地化?
  1. (defun c:test (  / [color="red"] enter[/color] )
  2. ...
  3. ...
  4. ([color="blue"]while[/color] ( not[color="red"] enter [/color])
  5. ...
  6. ...

 
或者在while循环后尝试此操作。。
  1. 9
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-15 03:26 , Processed in 1.591119 second(s), 70 queries .

© 2020-2025 乐筑天下

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