乐筑天下

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

[编程交流] 请改进我的Lisp程序

[复制链接]

23

主题

89

帖子

66

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
115
发表于 2022-7-6 08:07:41 | 显示全部楼层 |阅读模式
大家好,
 
我想在插入文本之前预览它。我最后总是在插入文本后移动它。我到处找都找不到。非常感谢。
 
  1. (defun C:test (/ e d p)
  2. (setq e (cdr (assoc 2 (entget (car (entsel))))))
  3. (setq d
  4. (cond
  5.   ((= e "p1") "1"")
  6.   ((= e "p1.5") "1-1\\2"")
  7.   ((= e "p2") "2"")
  8.   ;;etc..;;
  9.   (t (princ))
  10. )
  11. )
  12. (setq p (getpoint "\nPick insertion point"))
  13. (setq text
  14.    (entmakex
  15.      (list
  16.        (cons 0 "TEXT")
  17.        (cons 7 "romans")       
  18.        (cons 40 10)
  19.        (cons 8 "TEXT")
  20.        (cons 10 p)
  21.        (cons 210 '(0. 0. 1.))
  22.        (cons 1 d)
  23.        (cons 41 0.
  24.        (cons 50 0)
  25.          
  26.       )
  27.      
  28.     )
  29.   )
  30. (princ)
  31. )
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 08:12:24 | 显示全部楼层
可以使用grread移动文本并将其附着到光标。但是,您将丢失osnaps/orthomode/etc。
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 08:18:17 | 显示全部楼层
你可以用一个临时街区。效率不高,但可能有用
 
  1. [b][color=BLACK]([/color][/b]defun c:mt [b][color=FUCHSIA]([/color][/b][b][color=FUCHSIA])[/color][/b]
  2. [b][color=FUCHSIA]([/color][/b]if [b][color=NAVY]([/color][/b]setq e [b][color=MAROON]([/color][/b]entget [b][color=GREEN]([/color][/b]car [b][color=BLUE]([/color][/b]entsel[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  3.      [b][color=NAVY]([/color][/b]progn
  4.        [b][color=MAROON]([/color][/b]setvar [color=#2f4f4f]"DRAGMODE"[/color] 2[b][color=MAROON])[/color][/b]
  5.        [b][color=MAROON]([/color][/b]setq bn [color=#2f4f4f]"TEMP1"[/color] bc 1[b][color=MAROON])[/color][/b]
  6.        [b][color=MAROON]([/color][/b]while [b][color=GREEN]([/color][/b]tblsearch [color=#2f4f4f]"BLOCK"[/color] bn[b][color=GREEN])[/color][/b]
  7.               [b][color=GREEN]([/color][/b]setq bn [b][color=BLUE]([/color][/b]strcat [color=#2f4f4f]"TEMP"[/color] [b][color=RED]([/color][/b]itoa [b][color=PURPLE]([/color][/b]setq bc [b][color=TEAL]([/color][/b]1+ bc[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  8.        [b][color=MAROON]([/color][/b]entmake [b][color=GREEN]([/color][/b]list [b][color=BLUE]([/color][/b]cons 0 [color=#2f4f4f]"BLOCK"[/color][b][color=BLUE])[/color][/b][b][color=BLUE]([/color][/b]cons 2 bn[b][color=BLUE])[/color][/b][b][color=BLUE]([/color][/b]cons 70 0[b][color=BLUE])[/color][/b]
  9.                       [b][color=BLUE]([/color][/b]assoc 10 e[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  10.        [b][color=MAROON]([/color][/b]entmake [b][color=GREEN]([/color][/b]list [b][color=BLUE]([/color][/b]cons 0 [color=#2f4f4f]"TEXT"[/color][b][color=BLUE])[/color][/b]
  11.                       [b][color=BLUE]([/color][/b]assoc 1 e[b][color=BLUE])[/color][/b]
  12.                       [b][color=BLUE]([/color][/b]if [b][color=RED]([/color][/b]assoc 6 e[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]assoc 6 e[b][color=RED])[/color][/b] '[b][color=RED]([/color][/b]6 . [color=#2f4f4f]"BYLAYER"[/color][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
  13.                       [b][color=BLUE]([/color][/b]assoc 7 e[b][color=BLUE])[/color][/b]
  14.                       [b][color=BLUE]([/color][/b]assoc 8 e[b][color=BLUE])[/color][/b]
  15.                       [b][color=BLUE]([/color][/b]assoc 10 e[b][color=BLUE])[/color][/b]
  16.                       [b][color=BLUE]([/color][/b]assoc 11 e[b][color=BLUE])[/color][/b]
  17.                       [b][color=BLUE]([/color][/b]if [b][color=RED]([/color][/b]assoc 39 e[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]assoc 39 e[b][color=RED])[/color][/b] '[b][color=RED]([/color][/b]39 . 0[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
  18.                       [b][color=BLUE]([/color][/b]assoc 40 e[b][color=BLUE])[/color][/b]
  19.                       [b][color=BLUE]([/color][/b]assoc 41 e[b][color=BLUE])[/color][/b]
  20.                       [b][color=BLUE]([/color][/b]assoc 50 e[b][color=BLUE])[/color][/b]
  21.                       [b][color=BLUE]([/color][/b]assoc 51 e[b][color=BLUE])[/color][/b]
  22.                       [b][color=BLUE]([/color][/b]if [b][color=RED]([/color][/b]assoc 62 e[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]assoc 62 e[b][color=RED])[/color][/b] '[b][color=RED]([/color][/b]62 . 256[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
  23.                       [b][color=BLUE]([/color][/b]assoc 71 e[b][color=BLUE])[/color][/b]
  24.                       [b][color=BLUE]([/color][/b]assoc 72 e[b][color=BLUE])[/color][/b]
  25.                       [b][color=BLUE]([/color][/b]assoc 73 e[b][color=BLUE])[/color][/b]
  26.                       [b][color=BLUE]([/color][/b]assoc 210 e[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  27.        [b][color=MAROON]([/color][/b]entmake [b][color=GREEN]([/color][/b]list [b][color=BLUE]([/color][/b]cons 0 [color=#2f4f4f]"ENDBLK"[/color][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  28.        [b][color=MAROON]([/color][/b]princ [color=#2f4f4f]"\nInsert Point: "[/color][b][color=MAROON])[/color][/b]
  29.        [b][color=MAROON]([/color][/b]setvar [color=#2f4f4f]"CMDECHO"[/color] 0[b][color=MAROON])[/color][/b]
  30.        [b][color=MAROON]([/color][/b]command [color=#2f4f4f]"_.INSERT"[/color] bn pause 1 1 0
  31.                 [color=#2f4f4f]"_.EXPLODE"[/color] [b][color=GREEN]([/color][/b]entlast[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  32.        [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

 
你需要根据自己的需要修改它。
 
-大卫
回复

使用道具 举报

23

主题

89

帖子

66

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
115
发表于 2022-7-6 08:23:41 | 显示全部楼层
谢谢你,大卫,但这对我不起作用。对不起,误会了。要插入的文本基于所选块的名称,这就是为什么我有一个cond函数。不用担心,你的努力不会白费,我会把这个添加到我的命令库中。
 
 
 
艾伦,我知道我需要使用grread来编写这段代码,但我真的不知道该怎么做。它工作很好,我只需要在插入之前预览一下。
你介意再给我一个提示吗?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:28:45 | 显示全部楼层
 
 
..........
回复

使用道具 举报

23

主题

89

帖子

66

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
115
发表于 2022-7-6 08:32:12 | 显示全部楼层
Lee,我想使用David的代码,但我每次运行命令时都需要清除图形,因为“temp_block”效率低下,或者在我完成绘图任务时清除,这是不推荐的。温度块一直充满。我在代码中添加了(命令“-PURGE”“\u B”“TEMP1”“n”),但我的系统滞后。
 
此外,我有一些lisp,我需要改进使用grread和entmake文本。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 08:36:39 | 显示全部楼层
这是我几年前做的一个糟糕的例子:http://www.theswamp.org/index.php?topic=12813.msg369811#msg369811
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 08:41:45 | 显示全部楼层
另一种解决方案:
  1. [color=blue](setq pointIns '(0.0 0.0 0.0))[/color]
  2. (setq text
  3.    (entmakex
  4.      (list
  5.        (cons 0 "TEXT")
  6.        (cons 7 "romans")
  7.        (cons 40 10)
  8.        (cons 8 "TEXT")
  9.        (cons 10 [color=#0000ff]pointIns[/color])
  10.        (cons 210 '(0. 0. 1.))
  11.        (cons 1 d)
  12.        (cons 41 0.
  13.        (cons 50 0)
  14.       )))
  15. [color=blue](redraw text 2)   ;hide new entity[/color]
  16. [color=blue](command "_MOVE" text "" pointIns pause)[/color]

 
可能需要将示例中的原点替换为要位于绘图区域中的源图元的插入点。
 
当做
米尔恰
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 08:45:50 | 显示全部楼层
米尔恰。
 
只是一个建议:
  1. (setq text
  2.    (entmakex
  3.      (list
  4.        (cons 0 "TEXT")
  5.        (cons 7 "romans")
  6.        (cons 40 10)
  7.        (cons 8 "TEXT")
  8.        (cons 10
  9.        [color=blue](setq p (getpoint "\nPick insertion point")))
  10. [/color]        (cons 1 d)
  11.        (cons 41 0.
  12.        (cons 50 0)
  13.          
  14.       )
  15.      
  16.     )
  17.   )

 
然后调用(命令“_move”text“”p)的循环,直到用户满意该位置。
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 08:48:04 | 显示全部楼层
不知道你的意思是什么,那么谁不需要再挑选一次来获得最终位置呢?
 
请在下面找到我是如何看到OP代码调整的:
 
  1. (defun C:test ( / e d assocEnt pointIns )
  2. (if (setq e (car (entsel)))
  3. (progn
  4.   (setq assocEnt (entget e)
  5.         e        (cdr (assoc 2 assocEnt))
  6.         pointIns (cdr (assoc 10 assocEnt)))
  7.   (setq d (cond
  8.            ((= e "p1") "1"")
  9.            ((= e "p1.5") "1-1\\2"")
  10.            ((= e "p2") "2"")
  11.            ;;etc..;;
  12.            (t nil)
  13.            )
  14.         )
  15.   (if (and d
  16.            (setq text (entmakex
  17.                        (list (cons 0 "TEXT")
  18.                              (cons 7 "romans")
  19.                              (cons 40 10)
  20.                              (cons 8 "TEXT")
  21.                              (cons 10 pointIns)
  22.                              (cons 210 '(0. 0. 1.))
  23.                              (cons 1 d)
  24.                              (cons 41 0.
  25.                              (cons 50 0)
  26.                              )
  27.                        )
  28.                  )
  29.            )
  30.    (progn
  31.     (redraw text 2)                    ;hide new entity
  32.     (command "_MOVE" text "" pointIns pause)
  33.     )
  34.    )
  35.   )
  36. )
  37. (princ)
  38. )

 
当做
米尔恰
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-9 09:40 , Processed in 0.452454 second(s), 72 queries .

© 2020-2025 乐筑天下

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