xiaocainiao 发表于 2024-1-20 09:56:17

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

请教一下各位大神!


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

想请教一下有没有其他方法、可以获取到最新生成对象的图元名

飞雪神光 发表于 2024-1-20 11:36:59

(command "MVIEW" (setq pt1 (getpoint)) (getcorner pt1))
(setq ty(entlast))       
(sssetfirst nil (ssadd ty))

xiaocainiao 发表于 2024-1-20 13:35:20

飞雪神光 发表于 2024-1-20 11:36


你好、你这个我会操作、我主要是想执行程序的时候、可以用CAD原生命令一样的提示和操作

飞雪神光 发表于 2024-1-20 13:41:22

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

哦 那这种命令得有交互类的东西拦着点 要不他会在 MVIEW 命令结束之前运行后面的代码

xiaocainiao 发表于 2024-1-20 15:32:36

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

嗯嗯 我加了判断、就是不知道为啥视口线画完以后、无法用entlast和ssget里面的L模式来获取生成的图元名

飞雪神光 发表于 2024-1-20 15:42:03

什么样的判断呢 entlast和ssget 得到的是 在MVIEW结束之前的图元

xiaocainiao 发表于 2024-1-20 15:44:49

飞雪神光 发表于 2024-1-20 15:42
什么样的判断呢 entlast和ssget 得到的是 在MVIEW结束之前的图元

我就是想用MV之前的ENTLAST和MV之后的ENTLAST判断、现在就MV以后这个图元名搞不出来

飞雪神光 发表于 2024-1-20 15:50:32

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

那肯定的啊 前后得到的图元名是一样的 就得通过交互函数拦着点命令的运行 让MV命令先运行结束再运行后面的 entlast

aihuyujian 发表于 2024-1-31 16:06:05

那必须可以,就是路子有点偏

(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 ")
        )

页: [1]
查看完整版本: 使用vla-sendcommand函数绘制图形后、无法用entlast获取生成的图元名