autolisp删除重复块

autolisp删除重复块

问:CAD 的autolisp编程问题:我用下面这个程序还去掉重合的点,但这个程序不能够循环。
  1. 答:(defun c:ere ( )
    (setq ss (ssget (list (cons 0 "POINT"))) li '() si 0 ei 0)
    (repeat (sslength ss)
    (setq cs (ssname ss si) si (1+ si) ce (entget cs))
    (if (member (vl-princ-to-string (cdr (assoc 10 ce))) li)
    (progn
    (command "_.Erase" cs "")
    (setq ei (1+ ei))
    )
    (setq li (cons (vl-princ-to-string (cdr (assoc 10 ce))) li))
    )
    )
    (princ (strcat "\n在选择的" (itoa (sslength ss)) "个点中,删除了" (itoa ei) "个重复的点!"))
    (princ)
    )
    上面的程序,我用的是REPEAT,用WHILE也是一样的效果。另外,循环里面套循环个人觉得不太可取,若对象过多会运算很大。
  2. 答:不妨试试下面的代码:
    (defun c:ere()
    (setq a (ssget (list(cons 0 "point"))))
    (setq i (sslength a))
    (setq j (1- i))
    (while (> j -1)
    (setq b (ssname a j))
    (setq c (entget b))
    (if (/= c nil)
    (progn
    (setq zb(cdr (assoc 10 c)))
    (setq cfdj(ssget "x" (list (cons 10 Zb)(cons 0 "point"))))
    (if (/= cfdj nil)(progn(setq cfdj(ssdel b cfdj))(command "erase" cfdj "")))
    )
    )
    (setq j(1- j))
    )
    )
  3. 答:可以用(repeat (sslength i)
    .................)试试,用while循环i值没有在循环体中修正啊,这样不成死循环了。。
  4. 答:fgrdtgrrfg
  5. 答:请问朋友是否有删除重复线的LISP命令
问:autocad中块文件如何分解,删除一部分图形
  1. 答:选中你要分解的块,然后单击右键,在下拉菜单中选中块编辑器,在块编辑器中删除你不要的部分,在关闭块编辑器,提示保存,点击是。就OK了~!~!
  2. 答:选中,分解,再删除你要删的部分,就OK了
  3. 答:双击块会弹出块编辑对话框选择块点确定就可以开始编辑块了,编辑完了右击鼠标选关闭块编辑器弹出是否保存修改选是就好了。
  4. 答:utoCAD如何消除dwg文件中多余的图层和图块
    对于绘制CAD图纸后残留的一些多余的图层、文字样式、线型和图块等,可以通过以下方法将它们清除:
    (1)利用CAD文件菜单下的“输出”命令,填写输出图形文件名称,选择形式为block(*.dwg),图块名称不填,选择基本点为(0,0),然后选择要输出的图形内容,图形经过如此处理后不会再有多余的信息。
    (2)利用CAD文件菜单下的“清理”命令,当命令行提示“Verify each name to be purged? <Y>(验证每个要清理的名称)”时:,键入“n”不用验证是否清理,可加快清理速度。多重复几次PURGE命令后也不会再有多余的图形信息了。
    (3)编制一个小巧的AutoLISP程序,可以减少手工操作。
    (defun C:QHTX ()
    (ar "cmdecho" 0);关闭命令回显
    (repeat 10
    (command "purge" "a" "" "n")
    );重复执行purge命令10次
    (princ)
    );end defun C:QHTX ()
    将以上代码复制在新文本文件中,另存为QHTX.lsp,然后在“工具”菜单下加载运行,便能清除图形中的残余信息。
  5. 答:选定要分解的“块”,然后在默认工具栏里,找到“块菜单”,左键单击“块编辑器”。
  6. 答:输入X 选择要分解的块 就可以了
  7. 答:选中你要编辑的块,再按“X”分解 就可以了
  8. 答:输入X再回车就可以了编辑图形,也可以双击块进入编辑块修改图形,关闭时记得保存
  9. 答:选中你要编辑的块,单击分解命令,你的块就分解成单个对象,然后选择你要删除的图形,右击,选择删除即可。
  10. 答:为什么标注分解后变成?号呢
问:求一autolisp程序,要求是选择一个文字,那么能够把这个相同的文字全部选择出来
  1. 答:;先框选范围,再选择一个想筛选的文字,w为快捷键,可以自己更改
    (defun c:w()
    (ar "cmdecho" 0)
    (setq ss (ssget '((0 . "TEXT,MTEXT"))))
    (setq en (entsel "请选择一个文字:"))
    (setq en_data (entget (car en)))
    (setq text1 (cdr (assoc 1 en_data)))
    (setq n 0)
    (setq SX (ssadd))
    (setq SX (ssadd (car en) SX))
    (repeat (sslength ss)
    (setq ssn (ssname ss n))
    (setq ssn_data (entget ssn))
    (setq text2 (cdr (assoc 1 ssn_data)))
    (if (= text1 text2) (setq SX (ssadd ssn SX)))
    (setq n (1+ n))
    )
    (sssetfirst ss sx)
    (prin1)
    )
autolisp删除重复块
下载Doc文档

猜你喜欢