Freerefill 发表于 2022-7-6 12:51:42

多个布局选项卡。图纸

有没有办法从中生成布局选项卡列表。您没有打开的dwg?我最初的想法是创建一个新的AutoCAD对象并链接一个文件,就像处理Excel文件一样。。然而,这样做打开了一个新的AutoCAD实例,我宁愿避免使用它。
 
该功能必须存在,因为ADCENTER将允许您拖动内容,包括布局选项卡。有没有办法通过LISP实现这一点?
 
任何建议都会有帮助。^

Lee Mac 发表于 2022-7-6 12:58:08

也许可以使用ObjectDBX访问未打开的图形?
 
可能是一个值得考虑的选项。

Lee Mac 发表于 2022-7-6 13:07:37

例如:
 

;; ObjectDBX Example, by Lee McDonnell

(defun ODBX (fname / doc dbx lst flag)
(vl-load-com)

(vlax-for doc (vla-get-Documents (vlax-get-acad-object))
   (and (eq (strcase (vla-get-fullname doc)) (strcase fname))
      (setq dbx doc)))

(and (not dbx) (setq flag t)
      (setq dbx
      (vlax-create-object
          (if (< (setq acVer (atoi (getvar "ACADVER"))) 16)
            "ObjectDBX.AxDbDocument"
            (strcat "ObjectDBX.AxDbDocument." (itoa acVer))))))

(cond ((and flag
          (vl-catch-all-error-p
            (vl-catch-all-apply 'vla-open
            (list dbx fname))))
      (princ (strcat "\n** Error Opening: " (vl-filename-base fname) " **")))
       (t
      (vlax-for lay (vla-get-Layouts dbx)
          (setq lst (cons (vla-get-name lay) lst)))))   

(ObjRel (list dbx)) (gc) (gc)

lst)

;; Release Objects ~ Requires List of Variables
         
(defun ObjRel (lst)
(mapcar
   (function
   (lambda (x)
       (if (and (eq (type x) 'VLA-OBJECT)
                (not (vlax-object-released-p x)))
         (vl-catch-all-apply
         'vlax-release-object (list x))))) lst))

(defun c:test ( )
(odbx (getfiled "select" "" "dwg" 16)))


Freerefill 发表于 2022-7-6 13:10:00

非常好,谢谢你,李我试了几次才弄明白发生了什么,但我想我明白了。我必须进一步研究ObjectDBX以获得更完整的理解。
 
再次感谢。^

Lee Mac 发表于 2022-7-6 13:17:42

很乐意帮忙伙计

JohnM 发表于 2022-7-6 13:24:22

我不知道如何链接到另一个帖子,所以我从patric_35的另一个帖子中删除了这个帖子。
这会让你朝着正确的方向前进
 
 

(defun c:lstdwg(/ dirbox Ouvrir_dessin_dbx rep lst fic dbx lay)
(defun dirbox(/ cdl rep)
   (if (setq cdl (vlax-create-object "Shell.Application"))
   (progn
   (and (setq rep (vlax-invoke cdl 'browseforfolder 0 "Choose a directory" 512 ""))
      (setq rep (vlax-get-property (vlax-get-property rep 'self) 'path))
   )
   (vlax-release-object cdl)
   )
   )
   rep
)
(defun Ouvrir_dessin_dbx(dwg / dbx doc lan)
   (vl-load-com)
   (setq dwg (findfile dwg))
   (vlax-for doc (vla-get-documents (vlax-get-acad-object))
   (and (eq (strcase (vla-get-fullname doc)) (strcase dwg))
   (setq dbx doc lan T)
   )
   )
   (or dbx
   (progn
   (if (< (atoi (substr (getvar "ACADVER") 1 2)) 16)
   (setq dbx (vlax-create-object "ObjectDBX.AxDbDocument"))
   (setq dbx (vlax-create-object (strcat "ObjectDBX.AxDbDocument." (substr (getvar "ACADVER") 1 2))))
   )
   (vla-open dbx dwg)
   )
   )
   (list dbx lan)
)
(vl-load-com)
(if (setq rep (dirbox))
   (if (setq lst (vl-directory-files rep "*.dwg" 1))
   (foreach fic lst
   (if (setq dbx (ouvrir_dessin_dbx (strcat rep "/" fic)))
   (progn
       (princ (strcat "\n Working in " fic))(princ)
       (vlax-for lay (vla-get-layouts (car dbx))
         (princ (strcat "\n\t\tLayout : " (vla-get-name lay)))(princ)
       )
       (or (cadr dbx)(vlax-release-object (car dbx)))
   )
   (princ (strcat "\n Can't read file " fic))
   )
   )
   (alert "No dwg's File")
   )
)
(princ)
)

Freerefill 发表于 2022-7-6 13:28:57

谢谢JohnM。我也会好好看看的。^。^

Commandobill 发表于 2022-7-6 13:31:27

作为该问题的增编。有没有vla方法可以复制布局?我不想让命令行闪开。我知道怎么做。任何帮助都将不胜感激。

Lee Mac 发表于 2022-7-6 13:37:04

我想可能是复制方法,但这是我认为唯一的设置

JohnM 发表于 2022-7-6 13:43:14

我将查看vla add以创建一个新的布局选项卡,然后使用ssget获取旧对象并复制以将其放入新选项卡
页: [1] 2
查看完整版本: 多个布局选项卡。图纸