乐筑天下

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

[编程交流] 从LIS设置AECC_点

[复制链接]

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 07:17:00 | 显示全部楼层 |阅读模式
关于从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中的每个圆向其提供中心点坐标。
 
任何帮助都将不胜感激。
 
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 07:35:14 | 显示全部楼层
欢迎来到CADTutor。
 
遗憾的是,Land Desktop使用外部数据库,内部命令不能像通用AutoCAD命令那样暂停以供用户输入。
 
唯一可以做到这一点的方法是与外部ActiveX COM AeccApplication对象进行交互。
 
请考虑位于\\帮助\目录:
 
  1. (defun c:LAG () (c:LandAutoGuide))
  2. (defun c:LandAutoGuide (/ file path)
  3. (if (setq path (findfile (setq file "landauto-guide.chm")))
  4.    (startapp "explorer" path)
  5.    (prompt (strcat "\n** "" file "" cannot be found ** "))
  6. )
  7. (princ)
  8. )
  9. (defun c:LAR () (c:LandAutoReference))
  10. (defun c:LandAutoReference (/ file path)
  11. (if (setq path (findfile (setq file "landauto-reference.chm")))
  12.    (startapp "explorer" path)
  13.    (prompt (strcat "\n** "" file "" cannot be found ** "))
  14. )
  15. (princ)
  16. )
回复

使用道具 举报

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 07:48:00 | 显示全部楼层
谢谢你的回复。我觉得在LISP中放置点会很困难。考虑到我的土气和缺乏时间,我可能不会追求这一更复杂的方法。
 
我决定简化这个问题。由于LDD命令“自动创建点”将在任意数量的互连线的末端设置点,所以我所要做的就是循环通过每个圆元素并创建一个长的互连线串。然后,在LISP之外,我可以简单地运行“自动创建点”命令,选择由LISP创建的长线段,点将放置在每个圆心。
 
这个解决方案没有那么优雅,但编写起来要简单得多,执行起来也几乎一样快。
 
再次感谢。
回复

使用道具 举报

4

主题

2143

帖子

2197

银币

限制会员

铜币
-24
发表于 2022-7-6 08:03:22 | 显示全部楼层
请阅读代码发布指南,并编辑您的帖子以包含代码标签。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 08:25:28 | 显示全部楼层
考虑到您使用的是“哑”圆(不读取点编号、属性或对象数据等),为什么不直接将每个圆的坐标导出到ASCII文本文件(PNEZ?)中呢,然后作为点导入?
 
我认为这比试图在每个圆上执行Land Desktop命令(速度慢得出奇)要高效得多。
 
  1. (vl-load-com)
  2. (defun c:CTOA () (c:CircleToAscii))
  3. (defun c:CircleToAscii
  4.       (/ *error* ss n i path acApp acDoc oShell file pt)
  5. (princ "\rCIRCLETOASCII ")
  6. (defun *error* (msg)
  7.    (if oShell
  8.      (vlax-release-object oShell)
  9.    )
  10.    (if file
  11.      (close file)
  12.    )
  13.    (cond ((not msg))                                                   ; Normal exit
  14.          ((member msg '("Function cancelled" "quit / exit abort")))    ; <esc> or (quit)
  15.          ((princ (strcat "\n** Error: " msg " ** ")))                  ; Fatal error, display it
  16.    )
  17.    (princ)
  18. )
  19. (if (and (setq ss (ssget "_:L" '((0 . "CIRCLE"))))
  20.           (setq n (sslength ss))
  21.           (setq i 0)
  22.           (setq path
  23.                  (strcat (vl-filename-directory (vl-filename-mktemp))
  24.                          "\"
  25.                          (vl-filename-base (getvar 'dwgname))
  26.                          "_"
  27.                          (menucmd "M=$(edtime,$(getvar,date),YYYY-MO-DD)")
  28.                          "_PNEZ"
  29.                          ".txt"
  30.                  )
  31.           )
  32.           (setq acApp (vlax-get-acad-object))
  33.           (setq acDoc (vla-get-activedocument acApp))
  34.           (princ "\nWorking, please wait...")
  35.           (princ)
  36.           (setq oShell
  37.                  (vla-getinterfaceobject acApp "Shell.Application")
  38.           )
  39.      )
  40.    (progn
  41.      (if (findfile path)
  42.        (vl-file-delete path)
  43.      )
  44.      (setq file (open path "w"))
  45.      (vlax-for x (setq ss (vla-get-activeselectionset acDoc))
  46.        (write-line
  47.          (strcat
  48.            (itoa (setq i (1+ i)))
  49.            ","
  50.            (rtos (cadr (setq pt (vlax-get x 'center))))
  51.            ","
  52.            (rtos (car pt))
  53.            ","
  54.            (rtos (last pt))
  55.          )
  56.          file
  57.        )
  58.      )
  59.      (setq file (close file))
  60.      (vla-delete ss)
  61.      (prompt (strcat "\n** " (itoa n) " circles processed ** "))
  62.      (vlax-invoke oShell 'open path)
  63.      (*error* nil)
  64.    )
  65.    (cond (acDoc
  66.           (*error* "Unable to create "Shell.Application Object"")
  67.          )
  68.          (n (*error* "Unable to create temporary file"))
  69.          ((*error* "No circles selected"))
  70.    )
  71. )
  72. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 10:18 , Processed in 0.713359 second(s), 62 queries .

© 2020-2025 乐筑天下

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