明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3483|回复: 16

[求助]如何才能用VL创建一个现存的Layout的Copy ?

  [复制链接]
发表于 2003-9-15 16:59 | 显示全部楼层 |阅读模式
如何才能用VL创建一个现存的Layout的Copy,产生一个和用layout命令的copy选项的到相同结果的NewLayout ?
迷惑中...

一下sample code怎么不能成功?

(setq AcadObject (vlax-get-acad-object))
(setq CDoc (vla-get-ActiveDocument AcadObject))
(setq Layouts (vla-get-Layouts CDoc))
(setq Layouts-list '() )
(setq CLayout (vla-get-ActiveLayout CDoc))
(setq PlotConfigs (vla-get-PlotConfigurations CDoc))
(setq PlotConfigs-list '())
(vlax-for item PlotConfigs
  (setq PlotConfigs-list (cons item PlotConfigs-list))
)

(setq NewLayout (vla-Add Layouts "NewLayout"))
(vla-CopyFrom NewLayout (nth 0 PlotConfigs-list)) ;; ???????
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2014-10-23 14:08 | 显示全部楼层
顶起来 ,这么好的东西不能被人遗忘了。
回复 支持 1 反对 0

使用道具 举报

发表于 2003-9-15 21:28 | 显示全部楼层
只能复制布局的页面配置部分,而不能复制布局中视口。
对于视口的操作,在对象模型中是存在缺陷的,无法完成在交互操作中的很多操作,而且经常会得到一些与交互操作不相同的结果。
发表于 2003-9-16 11:45 | 显示全部楼层
试过了,完全可能实现。
以下是VBA的方法,你可以把它改到VL中:
  1. Sub Add_layout()
  2.     Dim LayName As String
  3.     LayName = "明经"
  4.     Dim NewLayout As AcadLayout
  5.     Set NewLayout = ThisDrawing.Layouts.Add(LayName)
  6.     NewLayout.CopyFrom ThisDrawing.ActiveLayout
  7.     Dim ActLayBlk As AcadBlock
  8.     Dim NewLayBLk As AcadBlock
  9.     Set ActLayBlk = ThisDrawing.ActiveLayout.Block
  10.     Set NewLayBLk = NewLayout.Block
  11.     Dim EntCount As Integer
  12.     EntCount = ActLayBlk.Count
  13.     Dim Ent() As AcadObject
  14.     ReDim Ent(EntCount - 1) As AcadObject
  15.     Dim i As Integer
  16.     For i = 0 To EntCount - 1
  17.         Set Ent(i) = ActLayBlk(i)
  18.     Next
  19.     ThisDrawing.CopyObjects Ent, NewLayBLk
  20.     ThisDrawing.ActiveLayout = NewLayout
  21. End Sub
发表于 2003-9-16 11:53 | 显示全部楼层
为什么想的这么复杂?这样不行?

.....
(command "-layout"  "c"  layname1 layname2)
......

什么都有呀!
 楼主| 发表于 2003-9-16 12:06 | 显示全部楼层
这里的意思就是不能使用command来作这个事啊
发表于 2003-9-16 12:13 | 显示全部楼层
为什么不能?此时对话框未关闭?
发表于 2003-9-16 12:40 | 显示全部楼层
因為要透明執行
发表于 2003-9-16 12:48 | 显示全部楼层
如何透明?象pan zoom ?在执行其他命令时执行?到底什么效果?我也在迷惑中.....
发表于 2003-9-16 16:48 | 显示全部楼层
有待改進

  1. (defun TT (NEWLAYOUTNAME)
  2.   (setq ACADOBJECT (vlax-get-acad-object))
  3.   (setq CDOC (vla-get-activedocument ACADOBJECT))
  4.   (setq LAYOUTS (vla-get-layouts CDOC))
  5.   (setq CLAYOUT (vla-get-activelayout CDOC))
  6.   (setq CLAYOUT_BLK (vla-get-block CLAYOUT))
  7.   (setq NEWLAYOUT (vla-add LAYOUTS NEWLAYOUTNAME))
  8.   (setq NEWLAYOUT_BLK (vla-get-block NEWLAYOUT))
  9.   (vlax-for ENT        CLAYOUT_BLK
  10.     (vla-copyobjects
  11.       CDOC
  12.       (vlax-safearray-fill
  13.         (vlax-make-safearray
  14.           vlax-vbobject
  15.           '(0 . 0)
  16.         )
  17.         (list ENT)
  18.       )
  19.       NEWLAYOUT_BLK
  20.     )
  21.   )
  22.   (vla-copyfrom NEWLAYOUT CLAYOUT)
  23.   (princ)
  24. )
 楼主| 发表于 2003-9-17 15:51 | 显示全部楼层
请问龙哥 :
这个函数为什么按照以下注释掉的部分编写不行呢?


  1. defun lkpt:Layout:MultiCopy:CopyFrom (SourceLayout sNewLayoutName /)
  2.   (setq SourceLayoutBlock (vla-get-Block SourceLayout)
  3. ;;;        iCount (vla-get-Count SourceLayoutBlock)
  4. ;;;        SourceLayoutBlock-Objects-list '()
  5.   )
  6. ;;;  (vlax-for item SourceLayoutBlock
  7. ;;;    (setq SourceLayoutBlock-Objects-list (cons item SourceLayoutBlock-Objects-list))
  8. ;;;  )
  9.   (setq NewLayout (vla-Add Layouts sNewLayoutName)
  10.         NewLayoutBlock (vla-get-Block NewLayout)
  11.   )
  12. ;;;  (vla-copyobjects
  13. ;;;    CDoc
  14. ;;;    (vlax-safearray-fill
  15. ;;;      (vlax-make-safearray
  16. ;;;        vlax-vbobject
  17. ;;;        (cons 0 (1- iCount))
  18. ;;;      )
  19. ;;;      SourceLayoutBlock-Objects-list
  20. ;;;    )
  21. ;;;    NewLayoutBlock
  22. ;;;  )
  23.   
  24.   (vlax-for item SourceLayoutBlock
  25.     (vla-copyobjects
  26.       CDoc
  27.       (vlax-safearray-fill
  28.         (vlax-make-safearray vlax-vbobject '(0 . 0))
  29.         (list item)
  30.       )
  31.       NewLayoutBlock
  32.     )       
  33.   )
  34.   
  35.   (vla-CopyFrom NewLayout SourceLayout)
  36.   (mapcar 'vlax-release-object (list SourceLayoutBlock NewLayoutBlock NewLayout))
  37.   (setq return nil)
  38. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-19 07:08 , Processed in 0.578266 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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