乐筑天下

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

[编程交流] 用于中继李的Lisp例程

[复制链接]

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 17:04:34 | 显示全部楼层 |阅读模式
大家好,
 
我是这个论坛的新手,对AutoCAD也比较陌生,但我希望有人能帮我摆脱困境
 
问题
我需要隔离图形中的每条线,并根据线号将它们附着到新创建的图层。类似于xyz010层的第10行,xyz011层的第11行,等等(……大约20000行!!)
 
我们中的一些人尝试过不同的软件,导出dxf,在excel中打开csv文件,来回切换,但都没有用。
 
我可以在VBScript中进行一些修改,但不能达到AutoCAD中的任何真正标准。我希望这里有人能为我指出一些代码(Lisp或VB)的方向,以挽救这一天!
 
提前感谢
 
尼尔
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 17:14:31 | 显示全部楼层
当你说行号的时候,我会假设这些行都有注释?
 
我只是想确定如何在数千行中识别一行和另一行。
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 17:19:06 | 显示全部楼层
不幸的是,他们不是
 
它只是一个文件中的大量行(都在第0层),然而,当我在另一个程序中以dxf格式打开图形时,我可以看到字符串编号(以及行的起点、所有中点和终点)
 
过去,我们在AutoCAD中隔离了该线,创建了一个唯一的层(xyz001),并将该线添加到新层。对于几百行来说,手动(或不手动)这样做是可以的。不适用于20000多条线路
 
归根结底,只要每一层上只有一条线,哪条线走都无关紧要
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 17:25:57 | 显示全部楼层
啊,如果哪条线在哪一层上没有关系,它们都在第0层上,这应该不会太难。。
 
我看看能想出什么
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 17:33:01 | 显示全部楼层
试试这个:
 
如果你有任何问题,请告诉我
 
示例见附件
重新分层线条。拉链
回复

使用道具 举报

1

主题

316

帖子

311

银币

初来乍到

Rank: 1

铜币
29
发表于 2022-7-6 17:38:51 | 显示全部楼层
还有一个:
 
 
 
  1. ;;;WIZMAN 09DEC08
  2. (defun c:Lline (/ lline_count lline_set)
  3.    (defun pad_0000 (startnumber)
  4. (setq pad_var (strcat "0000" (itoa startnumber)))
  5.    ) ;_ end_defun
  6.    (defun pad_000 (startnumber)
  7. (setq pad_var (strcat "000" (itoa startnumber)))
  8.    ) ;_ end_defun
  9.    (defun pad_00 (startnumber)
  10. (setq pad_var (strcat "00" (itoa startnumber)))
  11.    ) ;_ end_defun
  12.    (defun pad_0 (startnumber)
  13. (setq pad_var (strcat "0" (itoa startnumber)))
  14.    ) ;_ end_defun
  15.    (defun no_pad (startnumber)
  16. (setq pad_var (itoa startnumber))
  17.    ) ;_ end_defun
  18.    (if        (and (setq lline_set (ssget '((0 . "LINE"))))
  19.      (setq lline_count 0)
  20. ) ;_ end_and
  21. (while (< lline_count (sslength lline_set))
  22.     (entmod
  23.         (subst
  24.             (cons 8
  25.                   (strcat "XYZ"
  26.                           (cond
  27.                               ((< -1 lline_count 9) (pad_0000 (1+ lline_count)))
  28.                               ((< 8 lline_count 99) (pad_000 (1+ lline_count)))
  29.                               ((< 98 lline_count 999) (pad_00 (1+ lline_count)))
  30.                               ((< 998 lline_count 9999) (pad_0 (1+ lline_count)))
  31.                               (t (no_pad (1+ lline_count)))
  32.                           ) ;_ end_cond
  33.                   ) ;_ end_strcat
  34.             ) ;_ end_cons
  35.             (assoc 8
  36.                    (entget (ssname lline_set lline_count))
  37.             ) ;_ end_assoc
  38.             (entget (ssname lline_set lline_count))
  39.         ) ;_ end_subst
  40.     ) ;_ end_entmod
  41.     (setq lline_count (1+ lline_count))
  42. ) ;_ end_while
  43.    ) ;_ end_if
  44.    (princ)
  45. ) ;_ end_defun
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 17:46:07 | 显示全部楼层
李/威兹曼
 
这太棒了,现在唯一限制我的是一台速度较慢的电脑,当它看到500多行时就会停下来
 
现在是下一个挑战!!。。。
 
如果我有一条由许多较小的线组成的线(见附图),而不是将每条线放在一个唯一的层上,我将整条线(高亮显示)放在一个唯一的层上,会怎么样?
 
 
今天早上我还进行了一些黑客攻击,试图扩展代码,这样就不用把所有东西都放在xyz层上,而是得到一个命令行,上面写着“你想把这些点放在哪一层?”,输入图层,例如abc,然后是中继线,然后输出abc01、abc02等,但我似乎无法管理代码。
 
我在哪里可以找到Lisp编程的基本命令和语法列表?任何事情都可以提高我有限的技术能力!!
180435x8ojlqgbiiilp8ic.jpg
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 17:52:16 | 显示全部楼层
这将提示输入图层前缀:
 
关于LISP的帮助,我主要是从这个论坛和AutoLISP R.11参考手册(列出语法等)中学到的。。。这是一个有点老,但帮助我开始进入LISP-但最近我发现了一个ACAD 2000参考手册在网上-留言给我你的电子邮件地址,我会把它发送给你,如果你想(太大的文件张贴在论坛上-甚至压缩)。
 
至于您对多条线的问题,很难告诉ACAD何时识别一组线而不仅仅是一条线,除非您将该组线制作成多段线,然后在:
 
你可以包括:,
 
然后,它也适用于一组线,但这意味着将图形中的所有线组制作成多段线,这不是一项容易的任务。以下LISP将有所帮助,但这可能不是最佳解决方案:
 
希望这有帮助。
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 18:00:03 | 显示全部楼层
下午好!
 
 
看起来需要一段时间才能赶上进度。如果它是在为excel编写VB宏,我会点击记录并返回到代码中,看看命令做了什么。这在AutoCAD中没有那么容易
 
谢谢李的帮助,这给了我一个工作的起点。我会让你知道在6个月左右,当我终于得到我的头周围!!!
 
尼尔
回复

使用道具 举报

1

主题

316

帖子

311

银币

初来乍到

Rank: 1

铜币
29
发表于 2022-7-6 18:05:49 | 显示全部楼层
请尝试,完成的测试最少:
限制是线条之间不应有(编辑)间隙
  1. 6
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 19:06 , Processed in 0.690519 second(s), 74 queries .

© 2020-2025 乐筑天下

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