乐筑天下

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

[编程交流] [LISP]仅缩放“x”an

[复制链接]

11

主题

44

帖子

33

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
55
发表于 2022-7-5 16:16:38 | 显示全部楼层
 
我希望去掉它的“entsel”部分,只让lisp选择图形中的唯一实体,而不需要用户的任何输入。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 16:21:32 | 显示全部楼层
 
我认为OP不想选择任何块,因此需要使用模式为“_X”的ssget函数,逐个迭代选择集实体名称。
回复

使用道具 举报

1

主题

80

帖子

79

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 16:23:56 | 显示全部楼层
Chiimayred,我已经更新了我在上一页发布的代码。根据您的描述,我假设当您使用此命令时,图形中只有一个块。
 
Tharwat,请检查我的更新,并让我知道我是否在正确的轨道上(当然,如果时间允许)
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 16:27:49 | 显示全部楼层
 
很好,但请在下面的例程中查找代码的新更改。
 
让我们希望用户将所有层解锁,以避免意外的错误消息。
  1. (defun c:test (/ sset blk newscl n)
  2. (if (setq sset (ssget "_x" (list '(0 . "INSERT") (cons 410 (getvar "ctab")))))
  3.    (repeat (setq n (sslength sset))
  4.      (setq blk (ssname sset (setq n (1- n))))
  5.      (entmod  (append  (entget blk) (list (cons 41 1.025) (cons 42 1.025))))
  6.      (command "_.explode" blk "")
  7.    )
  8.    (prompt "\nNo blocks in drawing!")
  9. )
  10. (princ)
  11. )
回复

使用道具 举报

1

主题

80

帖子

79

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 16:32:05 | 显示全部楼层
 
我懂了!以防出现多个块,对吗?
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 16:35:22 | 显示全部楼层
 
如果你说的是代码中的变化,那么是正确的,但是如果你说的是第二段,那么我可以告诉你,如果在锁定层中的任何选定块,代码不能改变比例,也不能分解它。
回复

使用道具 举报

1

主题

80

帖子

79

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 16:36:32 | 显示全部楼层
 
是的,我在回复第一段。但我会记住这两点
回复

使用道具 举报

11

主题

44

帖子

33

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
55
发表于 2022-7-5 16:40:31 | 显示全部楼层
  1. (defun c:utm2bp (/ blk)
  2. (command
  3.    "_.scale"
  4.    "_all"
  5.    ""
  6.    '(0 0)
  7.    3.28084
  8.    "_block"
  9.    "1"
  10.    '(0 0)
  11.    "_all"
  12.    ""
  13.    )
  14. (if (setq sset (ssget "_x" (list '(0 . "INSERT") (cons 410 (getvar "ctab")))))
  15.    (repeat (setq n (sslength sset))
  16.      (setq blk (ssname sset (setq n (1- n))))
  17.      (entmod  (append  (entget blk) (list (cons 41 1.025) (cons 42 1.025))))
  18.      (command "_.explode" blk "")
  19.    )
  20.    (prompt "\nNo blocks in drawing!")
  21.    )
  22. (princ)
  23. )

 
下面是它的样子。。。当我运行这个lisp时,我不断得到一个“绘图中没有块”提示。。。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 16:41:55 | 显示全部楼层
我建议如下:
  1. (defun c:utm2bp ( / blk sel )
  2.    (if (= 1 (getvar 'cvport))
  3.        (princ "\nCommand only available in Modelspace.")
  4.        (if (setq sel (ssget "_X" '((410 . "Model"))))
  5.            (progn
  6.                (setq blk 0)
  7.                (while (tblsearch "block" (itoa (setq blk (1+ blk)))))
  8.                (setq blk (itoa blk))
  9.                (command
  10.                    "_.scale" sel "" "_non" '(0 0) 3.28084
  11.                    "_.-block"  blk  "_non" '(0 0) sel ""
  12.                    "_.-insert" blk  "_non" '(0 0) 1.025 1.025 0.0
  13.                    "_.explode" (entlast)
  14.                    "_.-purge" "_b" blk "_N"
  15.                )
  16.            )
  17.            (princ "\nNo objects found in Modelspace.")
  18.        )
  19.    )
  20.    (princ)
  21. )
回复

使用道具 举报

11

主题

44

帖子

33

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
55
发表于 2022-7-5 16:47:22 | 显示全部楼层
 
嘿,我现在正在试。。。你能解释一下while命令、tblsearch、progn和这段代码的用法吗
 
  1.    (setq blk 0)
  2.                (while (tblsearch "block" (itoa (setq blk (1+ blk)))))
  3.                (setq blk (itoa blk))

谢谢你的时间、帮助和耐心。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 00:28 , Processed in 0.486895 second(s), 81 queries .

© 2020-2025 乐筑天下

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