明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 382|回复: 8

[提问] 使用vla-sendcommand函数绘制图形后、无法用entlast获取生成的图元名

[复制链接]
发表于 2024-1-20 09:56 | 显示全部楼层 |阅读模式
请教一下各位大神!


  1. (vla-sendcommand
  2.         (vla-get-ActiveDocument (vlax-get-acad-object))
  3.         "MVIEW "
  4.       )
复制代码
我现在用上面的代码去绘制视口、绘制完成后、无法用entlast获取到生成视口的图元名。

想请教一下有没有其他方法、可以获取到最新生成对象的图元名
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2024-1-20 11:36 | 显示全部楼层
  1. (command "MVIEW" (setq pt1 (getpoint)) (getcorner pt1))
  2. (setq ty(entlast))       
  3. (sssetfirst nil (ssadd ty))
 楼主| 发表于 2024-1-20 13:35 | 显示全部楼层

你好、你这个我会操作、我主要是想执行程序的时候、可以用CAD原生命令一样的提示和操作
发表于 2024-1-20 13:41 | 显示全部楼层
xiaocainiao 发表于 2024-1-20 13:35
你好、你这个我会操作、我主要是想执行程序的时候、可以用CAD原生命令一样的提示和操作

哦 那这种命令得有交互类的东西拦着点 要不他会在 MVIEW 命令结束之前运行后面的代码
 楼主| 发表于 2024-1-20 15:32 | 显示全部楼层
飞雪神光 发表于 2024-1-20 13:41
哦 那这种命令得有交互类的东西拦着点 要不他会在 MVIEW 命令结束之前运行后面的代码

嗯嗯 我加了判断、就是不知道为啥视口线画完以后、无法用entlast和ssget里面的L模式来获取生成的图元名
发表于 2024-1-20 15:42 | 显示全部楼层
什么样的判断呢 entlast和ssget 得到的是 在MVIEW结束之前的图元
 楼主| 发表于 2024-1-20 15:44 | 显示全部楼层
飞雪神光 发表于 2024-1-20 15:42
什么样的判断呢 entlast和ssget 得到的是 在MVIEW结束之前的图元

我就是想用MV之前的ENTLAST和MV之后的ENTLAST判断、现在就MV以后这个图元名搞不出来
发表于 2024-1-20 15:50 | 显示全部楼层
xiaocainiao 发表于 2024-1-20 15:44
我就是想用MV之前的ENTLAST和MV之后的ENTLAST判断、现在就MV以后这个图元名搞不出来

那肯定的啊 前后得到的图元名是一样的 就得通过交互函数拦着点命令的运行 让MV命令先运行结束再运行后面的 entlast
发表于 2024-1-31 16:06 | 显示全部楼层
那必须可以,就是路子有点偏

(vl-load-com)
(defun Vlr_getlast1 (rea cde / )
        (if (= (car cde) "MVIEW")(setq e (entlast)))
        )
(defun Vlr_getlast2 (rea cde / )
        (if (= (car cde) "MVIEW")(progn
                                 ;(print (vlr-reactors))
                                                         (print (setq e2 (entnext e)))
                                                         ;中间加上其他想要处理的代码,但是不要再出现COMMAND命令
                                                         (setq e nil e2 nil)
                                                         (mapcar 'vlr-remove-all '(:vlr-command-reactor))
                                                         ;(print (vlr-reactors))
                                                         ))
        )
(defun c:ttt ( / )
        (mapcar 'vlr-remove-all '(:vlr-command-reactor))
        (vlr-command-reactor nil (list (cons :vlr-commandWillStart (function Vlr_getlast1))
                                               (cons :vlr-commandEnded (function Vlr_getlast2)) ))
        (vlax-invoke-method (vlax-get (vlax-get-acad-object) 'activedocument) 'sendcommand "mview ")
        )

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-3 01:11 , Processed in 0.298905 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表