Lee Mac 发表于 2022-7-6 00:05:02

我很乐意帮忙,但现在没有太多时间来考虑这个问题——如果我有时间的话,可能在周末。

steven-g 发表于 2022-7-6 00:08:25

你真的需要整整一分钟吗。

Lee Mac 发表于 2022-7-6 00:11:46

 
.......

Lee Mac 发表于 2022-7-6 00:14:47

我花了一些时间来研究这个问题,并快速编写了以下草稿,但是该程序目前仅限于在viewtwist为零的视口中使用:

;; Modelspace to Paperspace-Lee Mac

(defun c:ms2ps ( / doc idx lst mat org sel )
   (cond
       (   (= 1 (getvar 'tilemode))
         (prompt "\nCommand only available in Paperspace.")
       )
       (   (= 1 (getvar 'cvport))
         (prompt "\nPlease activate a viewport.")
       )
       (   (setq sel (ssget '((410 . "Model"))))
         (repeat (setq idx (sslength sel))
               (setq lst (cons (vlax-ename->vla-object (ssname sel (setq idx (1- idx)))) lst))
         )
         (setq mat
               (vlax-tmatrix
                   (append
                     (mapcar
                        '(lambda ( a b )
                               (append (mapcar '- (trans (trans a 0 2) 2 3) org) (list b))
                           )
                        '(
                               (1.0 0.0 0.0)
                               (0.0 1.0 0.0)
                               (0.0 0.0 1.0)
                           )
                           (setq org (trans (trans '(0.0 0.0 0.0) 0 2) 2 3))
                     )
                      '((0.0 0.0 0.0 1.0))
                   )
               )
         )
         (foreach obj
               (vlax-invoke (setq doc (vla-get-activedocument (vlax-get-acad-object))) 'copyobjects lst
                   (vla-get-block
                     (vla-item
                           (vla-get-layouts doc)
                           (getvar 'ctab)
                     )
                   )
               )
               (vla-transformby obj mat)
         )
       )
   )
   (princ)
)
(vl-load-com) (princ)

nod684 发表于 2022-7-6 00:17:35

这是我们以前在办公室使用的。
命令包括:
 
C2P=复制到纸面空间&M2P=移动到纸面空间
C2M=复制到模型空间&M2M=移动到模型空间
 
然而,它有这个“买我”的东西。
 
将所有内容放在一个文件夹中,该文件夹应列在autocad的支持文件夹中
SP2SP。LSP
sp2sp。dcl
SP2SP。拉链

shailujp 发表于 2022-7-6 00:20:39

 
谢谢李抽出时间做这件事。以下是我的观察结果:
 
1) 可以让用户激活视口而不是终止命令吗?
2) 它不会提取所选实体。目前它正在复制整个区块(这是一件必备品)
3) 视口显示是否可以临时锁定?否则,如果用户在模型空间模式下放大,可能会弄乱图形。(安全功能)
4) 选择完成后,是否可以自动返回到图纸空间,然后关闭命令。
 
我不确定哪一个不能做到,但我还是想提一提,这样你们可以更好地做出决定。
 
Nod684:我不能使用你发布的代码,因为里面有一些版权的东西。谢谢你的帮助。

shailujp 发表于 2022-7-6 00:22:12

嗨,李,
 
我看到你在网站上添加了MS2P。是否有可能添加我在第16篇文章中列出的一些愿望/要求。

Bhull1985 发表于 2022-7-6 00:27:59

以下是如何锁定/解锁视口(vpObj)
(vla put DisplayLocked vpObj[:vlax true/:vlax false])
其中:vlax true锁定它,而:vlax false解锁它。
 
然后,要在lisp例程中在图纸空间和模型空间之间切换,可以按以下方式使用TILEMODE:
以下内容归功于Zorg:

(defun c:mm( / )
(command "_tilemode" "1")
)
(defun c:pm( / )
(command "_tilemode" "0")
)

 
 
不确定“提取”实体是什么意思。。。。
 
然后不是终止命令,而是允许用户选择视口。。。。你可以使用这个函数,由Lee Mac编写

(defun c:vpon ( / d s )
   (vl-load-com)
   (if (setq s (ssget "_+.:S:E:L" '((0 . "VIEWPORT"))))
       (progn
         (setq d (vla-get-activedocument (vlax-get-acad-object)))
         (vla-put-mspace d :vlax-true)
         (vla-put-activeviewport d (vlax-ename->vla-object (ssname s 0)))
       )
   )
   (princ)
)

(defun c:vpoff ( )
   (vla-put-mspace (vla-get-activedocument (vlax-get-acad-object)) :vlax-false)
   (princ)
)


 
您可以将这些代码合并到Lee的完整例程中,为您自己的需要创建自定义版本。我不希望李根据你的需要修改他的完整程序,但如果这些升级比个人修改更多,那么他可能会!
我知道这也需要你付出一些努力,但我希望我给了你足够的领先优势,让你成功。
HTH公司

shailujp 发表于 2022-7-6 00:30:01

bhull1985,
 
我要试试看。让我们看看我能用我有限的LISP知识做些什么。谢谢你的有用提示。

Bhull1985 发表于 2022-7-6 00:31:53

不客气。
至少你可以找到要更换的零件,然后来这里询问如何更换
页: 1 [2]
查看完整版本: 从模型空间t复制对象