用于中继李的Lisp例程
大家好,我是这个论坛的新手,对AutoCAD也比较陌生,但我希望有人能帮我摆脱困境
问题
我需要隔离图形中的每条线,并根据线号将它们附着到新创建的图层。类似于xyz010层的第10行,xyz011层的第11行,等等(……大约20000行!!)
我们中的一些人尝试过不同的软件,导出dxf,在excel中打开csv文件,来回切换,但都没有用。
我可以在VBScript中进行一些修改,但不能达到AutoCAD中的任何真正标准。我希望这里有人能为我指出一些代码(Lisp或VB)的方向,以挽救这一天!
提前感谢
尼尔 当你说行号的时候,我会假设这些行都有注释?
我只是想确定如何在数千行中识别一行和另一行。 不幸的是,他们不是
它只是一个文件中的大量行(都在第0层),然而,当我在另一个程序中以dxf格式打开图形时,我可以看到字符串编号(以及行的起点、所有中点和终点)
过去,我们在AutoCAD中隔离了该线,创建了一个唯一的层(xyz001),并将该线添加到新层。对于几百行来说,手动(或不手动)这样做是可以的。不适用于20000多条线路
归根结底,只要每一层上只有一条线,哪条线走都无关紧要 啊,如果哪条线在哪一层上没有关系,它们都在第0层上,这应该不会太难。。
我看看能想出什么 试试这个:
如果你有任何问题,请告诉我
示例见附件
重新分层线条。拉链 还有一个:
;;;WIZMAN 09DEC08
(defun c:Lline (/ lline_count lline_set)
(defun pad_0000 (startnumber)
(setq pad_var (strcat "0000" (itoa startnumber)))
) ;_ end_defun
(defun pad_000 (startnumber)
(setq pad_var (strcat "000" (itoa startnumber)))
) ;_ end_defun
(defun pad_00 (startnumber)
(setq pad_var (strcat "00" (itoa startnumber)))
) ;_ end_defun
(defun pad_0 (startnumber)
(setq pad_var (strcat "0" (itoa startnumber)))
) ;_ end_defun
(defun no_pad (startnumber)
(setq pad_var (itoa startnumber))
) ;_ end_defun
(if (and (setq lline_set (ssget '((0 . "LINE"))))
(setq lline_count 0)
) ;_ end_and
(while (< lline_count (sslength lline_set))
(entmod
(subst
(cons 8
(strcat "XYZ"
(cond
((< -1 lline_count 9) (pad_0000 (1+ lline_count)))
((< 8 lline_count 99) (pad_000 (1+ lline_count)))
((< 98 lline_count 999) (pad_00 (1+ lline_count)))
((< 998 lline_count 9999) (pad_0 (1+ lline_count)))
(t (no_pad (1+ lline_count)))
) ;_ end_cond
) ;_ end_strcat
) ;_ end_cons
(assoc 8
(entget (ssname lline_set lline_count))
) ;_ end_assoc
(entget (ssname lline_set lline_count))
) ;_ end_subst
) ;_ end_entmod
(setq lline_count (1+ lline_count))
) ;_ end_while
) ;_ end_if
(princ)
) ;_ end_defun 李/威兹曼
这太棒了,现在唯一限制我的是一台速度较慢的电脑,当它看到500多行时就会停下来
现在是下一个挑战!!。。。
如果我有一条由许多较小的线组成的线(见附图),而不是将每条线放在一个唯一的层上,我将整条线(高亮显示)放在一个唯一的层上,会怎么样?
今天早上我还进行了一些黑客攻击,试图扩展代码,这样就不用把所有东西都放在xyz层上,而是得到一个命令行,上面写着“你想把这些点放在哪一层?”,输入图层,例如abc,然后是中继线,然后输出abc01、abc02等,但我似乎无法管理代码。
我在哪里可以找到Lisp编程的基本命令和语法列表?任何事情都可以提高我有限的技术能力!!
这将提示输入图层前缀:
关于LISP的帮助,我主要是从这个论坛和AutoLISP R.11参考手册(列出语法等)中学到的。。。这是一个有点老,但帮助我开始进入LISP-但最近我发现了一个ACAD 2000参考手册在网上-留言给我你的电子邮件地址,我会把它发送给你,如果你想(太大的文件张贴在论坛上-甚至压缩)。
至于您对多条线的问题,很难告诉ACAD何时识别一组线而不仅仅是一条线,除非您将该组线制作成多段线,然后在:
你可以包括:,
然后,它也适用于一组线,但这意味着将图形中的所有线组制作成多段线,这不是一项容易的任务。以下LISP将有所帮助,但这可能不是最佳解决方案:
希望这有帮助。 下午好!
看起来需要一段时间才能赶上进度。如果它是在为excel编写VB宏,我会点击记录并返回到代码中,看看命令做了什么。这在AutoCAD中没有那么容易
谢谢李的帮助,这给了我一个工作的起点。我会让你知道在6个月左右,当我终于得到我的头周围!!!
尼尔 请尝试,完成的测试最少:
限制是线条之间不应有(编辑)间隙
6
页:
[1]