从LIS设置AECC_点
关于从AECC_点提取信息,似乎有很多主题,但在LISP例程中设置AECC_点,我找不到任何主题。自2000年初以来,我没有编写过多少lisp,但现在我们需要一个在LDD 2004中运行的例程,该例程将在DWG中大约500个小圆圈的集合中心放置一个AECC_点。我创建一个圆的选择集并通过SS循环以获得中心点不会有任何问题,但我不知道如何使用lisp执行“放置点手册”。
与图标相关的命令是:
^C^C^C^P(cr\U mnl)(zz\U sdsk’(cg:设置:手动));LDD公司
我只需要能够从lisp中执行一个“命令”,该命令将触发放置点手动命令。然后,我将从SS中的每个圆向其提供中心点坐标。
任何帮助都将不胜感激。
本 欢迎来到CADTutor。
遗憾的是,Land Desktop使用外部数据库,内部命令不能像通用AutoCAD命令那样暂停以供用户输入。
唯一可以做到这一点的方法是与外部ActiveX COM AeccApplication对象进行交互。
请考虑位于\\帮助\目录:
(defun c:LAG () (c:LandAutoGuide))
(defun c:LandAutoGuide (/ file path)
(if (setq path (findfile (setq file "landauto-guide.chm")))
(startapp "explorer" path)
(prompt (strcat "\n** \"" file "\" cannot be found ** "))
)
(princ)
)
(defun c:LAR () (c:LandAutoReference))
(defun c:LandAutoReference (/ file path)
(if (setq path (findfile (setq file "landauto-reference.chm")))
(startapp "explorer" path)
(prompt (strcat "\n** \"" file "\" cannot be found ** "))
)
(princ)
)
谢谢你的回复。我觉得在LISP中放置点会很困难。考虑到我的土气和缺乏时间,我可能不会追求这一更复杂的方法。
我决定简化这个问题。由于LDD命令“自动创建点”将在任意数量的互连线的末端设置点,所以我所要做的就是循环通过每个圆元素并创建一个长的互连线串。然后,在LISP之外,我可以简单地运行“自动创建点”命令,选择由LISP创建的长线段,点将放置在每个圆心。
这个解决方案没有那么优雅,但编写起来要简单得多,执行起来也几乎一样快。
再次感谢。 请阅读代码发布指南,并编辑您的帖子以包含代码标签。 考虑到您使用的是“哑”圆(不读取点编号、属性或对象数据等),为什么不直接将每个圆的坐标导出到ASCII文本文件(PNEZ?)中呢,然后作为点导入?
我认为这比试图在每个圆上执行Land Desktop命令(速度慢得出奇)要高效得多。
(vl-load-com)
(defun c:CTOA () (c:CircleToAscii))
(defun c:CircleToAscii
(/ *error* ss n i path acApp acDoc oShell file pt)
(princ "\rCIRCLETOASCII ")
(defun *error* (msg)
(if oShell
(vlax-release-object oShell)
)
(if file
(close file)
)
(cond ((not msg)) ; Normal exit
((member msg '("Function cancelled" "quit / exit abort"))) ; <esc> or (quit)
((princ (strcat "\n** Error: " msg " ** "))) ; Fatal error, display it
)
(princ)
)
(if (and (setq ss (ssget "_:L" '((0 . "CIRCLE"))))
(setq n (sslength ss))
(setq i 0)
(setq path
(strcat (vl-filename-directory (vl-filename-mktemp))
"\\"
(vl-filename-base (getvar 'dwgname))
"_"
(menucmd "M=$(edtime,$(getvar,date),YYYY-MO-DD)")
"_PNEZ"
".txt"
)
)
(setq acApp (vlax-get-acad-object))
(setq acDoc (vla-get-activedocument acApp))
(princ "\nWorking, please wait...")
(princ)
(setq oShell
(vla-getinterfaceobject acApp "Shell.Application")
)
)
(progn
(if (findfile path)
(vl-file-delete path)
)
(setq file (open path "w"))
(vlax-for x (setq ss (vla-get-activeselectionset acDoc))
(write-line
(strcat
(itoa (setq i (1+ i)))
","
(rtos (cadr (setq pt (vlax-get x 'center))))
","
(rtos (car pt))
","
(rtos (last pt))
)
file
)
)
(setq file (close file))
(vla-delete ss)
(prompt (strcat "\n** " (itoa n) " circles processed ** "))
(vlax-invoke oShell 'open path)
(*error* nil)
)
(cond (acDoc
(*error* "Unable to create \"Shell.Application Object\"")
)
(n (*error* "Unable to create temporary file"))
((*error* "No circles selected"))
)
)
)
页:
[1]