明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: e2002

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

  [复制链接]
 楼主| 发表于 2003-9-17 16:40 | 显示全部楼层
发现一个问题:
layout命令生成的NewLayout保持了和SourceLayout相同的系统变量psltscale的值
程序生成的NewLayout如果不作一些工作,系统变量psltscale的值是系统默认值1

这看起来系统变psltscale是随Layout对象保存的?
如果是,Layout对象怎么没有这个属性?也就是没有方法通过Layout对象来设定这个值?
发表于 2003-9-17 17:09 | 显示全部楼层
再試試看

  1. ;|
  2. (setq *ACADOBJECT* (vlax-get-acad-object))
  3. (setq *CDOC* (vla-get-activedocument *ACADOBJECT*))
  4. (setq *SOURCELAYOUT* (vla-get-activelayout *CDOC*))
  5. (setq SNEWLAYOUTNAME "LAI")
  6. (setq *LAYOUTS* (vla-get-layouts *CDOC*))
  7. |;

  8. ;;(LKPT:LAYOUT:MULTICOPY:COPYFROM *SOURCELAYOUT* SNEWLAYOUTNAM)

  9. (defun LKPT:LAYOUT:MULTICOPY:COPYFROM (SOURCELAYOUT SNEWLAYOUTNAM)
  10.   (setq        SOURCELAYOUTBLOCK
  11.          (vla-get-block SOURCELAYOUT)
  12. ;;; iCount (vla-get-Count SourceLayoutBlock)
  13. ;;; SourceLayoutBlock-Objects-list '()
  14.   )
  15. ;;;  (vlax-for item SourceLayoutBlock
  16. ;;;    (setq SourceLayoutBlock-Objects-list (cons item SourceLayoutBlock-Objects-list))
  17. ;;;  )
  18.   (setq        NEWLAYOUT      (vla-add *LAYOUTS* SNEWLAYOUTNAME)
  19.         NEWLAYOUTBLOCK (vla-get-block NEWLAYOUT)
  20.   )
  21. ;;;  (vla-copyobjects
  22. ;;;    CDoc
  23. ;;;    (vlax-safearray-fill
  24. ;;;      (vlax-make-safearray
  25. ;;; vlax-vbobject
  26. ;;; (cons 0 (1- iCount))
  27. ;;;      )
  28. ;;;      SourceLayoutBlock-Objects-list
  29. ;;;    )
  30. ;;;    NewLayoutBlock
  31. ;;;  )

  32.   (vlax-for ITEM SOURCELAYOUTBLOCK
  33.     (vla-copyobjects
  34.       *CDOC*
  35.       (vlax-safearray-fill
  36.         (vlax-make-safearray vlax-vbobject '(0 . 0))
  37.         (list ITEM)
  38.       )
  39.       NEWLAYOUTBLOCK
  40.     )
  41.   )

  42.   (vla-copyfrom NEWLAYOUT SOURCELAYOUT)
  43.   (mapcar 'vlax-release-object
  44.           (list SOURCELAYOUTBLOCK NEWLAYOUTBLOCK NEWLAYOUT)
  45.   )
  46. )

 楼主| 发表于 2003-9-17 17:29 | 显示全部楼层
这个CopyObjects不是复制多个对象吗?
怎么不能把多个对象fill到SafeArray中来作呢?
一定要一个一个来for ?
发表于 2003-9-18 09:55 | 显示全部楼层
;;TRY因看來也不會比較快!

  1. (defun TTT (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.   (setq ELIST '())
  10.   (setq        SSARRAY        (vlax-safearray-fill
  11.                   (vlax-make-safearray
  12.                     vlax-vbobject
  13.                     (cons 0 (- (vla-get-count CLAYOUT_BLK) 1))
  14.                   )
  15.                   (vlax-for ENT        CLAYOUT_BLK
  16.                     (setq ELIST (cons ENT ELIST))
  17.                   )
  18.                 )
  19.   )
  20.   (vla-copyobjects CDOC SSARRAY NEWLAYOUT_BLK)
  21.   (vla-copyfrom NEWLAYOUT CLAYOUT)
  22.   (princ)
  23. )
 楼主| 发表于 2003-9-20 10:34 | 显示全部楼层
e2002发表于2003-9-17 16:40:00发现一个问题:
layout命令生成的NewLayout保持了和SourceLayout相同的系统变量psltscale的值
程序生成的NewLayout如果不作一些工作,系统变量psltscale的值是系统默认值1

这看起来系统变


看书上这一节终于明白了....
"AutoCAD 2000 对象开发从入门到精通" 真是绝版好书!
原版书名 : Mastering AutoCAD 2000 Objects
作者 : Dietmar Rudolph
书号 : isbn7-5053-6172-4/TP.3312

点评

这么好的书,能不能共享一下。  发表于 2014-10-23 17:29
发表于 2014-10-23 14:08 | 显示全部楼层
顶起来 ,这么好的东西不能被人遗忘了。
回复 支持 1 反对 0

使用道具 举报

发表于 2014-10-23 14:57 | 显示全部楼层
自贡黄明儒 发表于 2014-10-23 14:08
顶起来 ,这么好的东西不能被人遗忘了。

呵呵,黄大哥又发现好东西了,具体有什么作用呢?

点评

03年这些高手就研究得比较深了。现在倒少有人研究了。  发表于 2014-10-23 15:36
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-25 08:41 , Processed in 0.879009 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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