明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3890|回复: 27

[已解答] 如何获得“布局”空间的“页面设置”列表?

[复制链接]
发表于 2014-8-28 16:22 | 显示全部楼层 |阅读模式
下面函数可以获得“模型”空间“页面设置”列表,如何获得“布局”空间的“页面设置”列表?
  1. (defun allPageSetupsOfModelType  (/ aps pc)
  2.   (setq acaddoc (vla-get-activedocument (vlax-get-acad-object)))
  3.   (vlax-for pc (vla-get-plotconfigurations acaddoc)
  4.     (if  (= (vla-get-ModelType pc) :vlax-true)
  5.       (setq aps (cons (vla-get-name pc) aps))
  6.     )
  7.   )
  8.   (vl-sort aps '<)
  9. )
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2014-9-1 08:20 | 显示全部楼层
顶顶,沉的自己都找不到了。
发表于 2014-9-1 08:50 | 显示全部楼层
本帖最后由 自贡黄明儒 于 2014-9-1 08:52 编辑

下面没有用vlax-for,便于清楚看到各成员
是否符合你的要求未知,但可参考一下
(defun C:w1 ()
  (cond ((not *DOC*) (setq *DOC* (vla-get-ActiveDocument *ACAD*))))
  (setq n (vla-get-Count (vla-get-Blocks *DOC*)))            ;当有文档块集合数量
  (repeat n
    (setq obj (vla-item (vla-get-Blocks *DOC*) (setq n (1- n))))
    (princ (strcat "\n" (vla-get-objectname obj) " " (vla-get-name obj)))
  )
  ;|
AcDbBlockTableRecord TYBTL
AcDbBlockTableRecord bjg
AcDbBlockTableRecord base
AcDbBlockTableRecord ccd1
AcDbBlockTableRecord _DotSmall
AcDbBlockTableRecord *Paper_Space0
AcDbBlockTableRecord *Paper_Space
AcDbBlockTableRecord *Model_Space,模型空间也算块
|;
  (setq obj (vla-item (vla-get-Blocks *DOC*) 4))            ;AcDbBlockTableRecord ccd1第5
  (setq n (vla-get-Count obj))                                    ;此块由4个元素组成,说明上句obj也算集合
  (repeat n
    (setq i (vla-item obj (setq n (1- n))))
    (princ (strcat "\n" (vla-get-objectname i)))
  )
  ;|
AcDbAttributeDefinition
AcDbLine
AcDbLine
AcDbLine
|;
  (setq i (vla-item obj 3))                                    ;AcDbAttributeDefinition
)
;;打开的文件
(defun C:w2 ()
  (cond ((not *ACAD*) (setq *ACAD* (vlax-get-acad-object))))
  (cond ((not *DOCS*) (setq *DOCS* (vla-get-Documents *ACAD*))))
  ;;(setq n (vlax-get *DOCS* 'Count))
  ;;(vlax-get-property *DOCS* 'count)
  ;;(vla-get-Count *DOCS*)
  (setq n -1)
  (repeat (vlax-get-property *DOCS* 'count)
    (spin* "请稍侯...")
    (setq doc (vla-item *DOCS* (setq n (1+ n))))
    (setq LOUTS (vla-get-Layouts doc))
    ;;(setq docname (vlax-get doc 'fullname))未保存时为""
    (setq docname
           (strcat
             (vlax-get-property doc 'Path)
             "\\"
             (vlax-get-property doc 'Name)
           )
    )                                                            ;"C:\\Program Files\\AutoCAD 2005\

\Drawing2.dwg"
  )
)
;;当前文件
(defun C:w3 ()
  (cond ((not *ACAD*) (setq *ACAD* (vlax-get-acad-object))))
  (cond ((not *DOC*) (setq *DOC* (vla-get-ActiveDocument *ACAD*))))
  (setq LOUTS (vla-get-Layouts *DOC*))
  (repeat (setq n (vla-get-Count LOUTS))
    (setq layout (vla-item LOUTS (setq n (1- n))))
    (princ (strcat "\n" (vla-get-objectname layout) " " (vla-get-name layout)))
    ;|
AcDbLayout Model
AcDbLayout Layout2
AcDbLayout Layout1
|;
  )
  (setq layout (vla-item LOUTS 0))
  (princ (strcat "\n" (vla-get-objectname layout) " " (vla-get-name layout)))
  (setq objs (vla-get-block layout))                            ;这是模空间下的5个对象,不是我平常说的块,是指

任何实体
  (repeat (setq i (vlax-get objs 'count))
    (setq obj (vla-item objs (setq i (1- i))))
    (princ (strcat "\n" (vla-get-objectname obj)))            ;不是每个对象(vla-get-name obj)
    ;|AcDbLine
AcDbBlockReference
AcDbBlockReference
AcDbBlockReference
AcDbBlockReference|;
    (if        (= (vla-get-objectname obj) "AcDbBlockReference")
      (if (and
            (= (vla-get-hasattributes obj) :vlax-true)
            (safearray-value
              (setq atts
                     (vlax-variant-value
                       (vla-getattributes obj)
                     )
              )
            )
          )
        (foreach tag (vlax-safearray->list atts)
          (if
            (vla-get-tagstring tag)
             (setq vals (cons (vla-get-TextString tag) vals))
          )
        )
      )
    )
  )
)

评分

参与人数 1明经币 +1 金钱 +50 收起 理由
smartstar + 1 + 50

查看全部评分

发表于 2014-9-1 08:52 | 显示全部楼层
学习学习
 楼主| 发表于 2014-9-1 16:38 | 显示全部楼层
自贡黄明儒 发表于 2014-9-1 08:50
下面没有用vlax-for,便于清楚看到各成员
是否符合你的要求未知,但可参考一下
**** 本内容被作者隐藏 *** ...

谢谢黄老!这个不是我想要的结果。
发表于 2014-9-1 17:06 | 显示全部楼层
(defun allPageSetupsOfModelType  (/ aps pc)
  (setq acaddoc (vla-get-activedocument (vlax-get-acad-object)))
  (vlax-for pc (vla-get-plotconfigurations acaddoc)
    (if  (= (vla-get-ModelType pc) :vlax-true)
      (setq aps (cons (vla-get-name pc) aps))
    )
  )
  (vl-sort aps '<)
)
ALLPAGESETUPSOFMODELTYPE
_$ (ALLPAGESETUPSOFMODELTYPE)
nil
_$ (defun allPageSetupsOfModelType  (/ aps pc)
  (setq acaddoc (vla-get-activedocument (vlax-get-acad-object)))
  (vlax-for pc (vla-get-plotconfigurations acaddoc)
    (if  (= (vla-get-ModelType pc) :vlax-false)
      (setq aps (cons (vla-get-name pc) aps))
    )
  )
  (vl-sort aps '<)
)
ALLPAGESETUPSOFMODELTYPE
_$ (ALLPAGESETUPSOFMODELTYPE)
("Setup1")
_$

评分

参与人数 1明经币 +1 收起 理由
lucas_3333 + 1 神马都是浮云

查看全部评分

发表于 2014-9-1 17:13 | 显示全部楼层
以上是获得属于布局 的命名打印配置,千万不要说是layout1 layout2之内的布局名。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2014-9-2 08:05 | 显示全部楼层
edata 发表于 2014-9-1 17:13
以上是获得属于布局 的命名打印配置,千万不要说是layout1 layout2之内的布局名。

长老,为什么我不能用此函数得到“属于布局命名打印配置”呢?
 楼主| 发表于 2014-9-2 08:10 | 显示全部楼层



(defun allPageSetupsOfModelType  (/ aps pc)
  (setq acaddoc (vla-get-activedocument (vlax-get-acad-object)))
  (vlax-for pc (vla-get-plotconfigurations acaddoc)
    (if  (= (vla-get-ModelType pc) :vlax-true)
      (setq aps (cons (vla-get-name pc) aps))
    )
  )
  (vl-sort aps '<)
)

ALLPAGESETUPSOFMODELTYPE、


_$ (ALLPAGESETUPSOFMODELTYPE)
("2")
_$

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2014-9-2 22:14 | 显示全部楼层
    (if  (= (vla-get-ModelType pc) :vlax-false)
你这句排除了非模型的命名配置。要改成:vlax-false只显示布局的命名配置

评分

参与人数 1明经币 +1 金钱 +50 收起 理由
smartstar + 1 + 50 神马都是浮云

查看全部评分

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

本版积分规则

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

GMT+8, 2024-4-27 01:09 , Processed in 0.250830 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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