明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2356|回复: 5

布局视口编程求教

[复制链接]
发表于 2006-2-9 11:12 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2006-2-10 15:40:07 编辑

     对下面的函数,为什么在模型窗口或布局1窗口中执行,会在布局1中创建新视口, 而不是期望的在布局2中创建新视口? 请帮忙指导,谢谢.

  1. ;在布局2上创建一个视口
  2. (defun CPV2()
  3.   (vl-load-com)
  4.   (setq AcadObject   (vlax-get-acad-object)
  5.         AcadDocument (vla-get-ActiveDocument Acadobject)
  6.         mSpace       (vla-get-ModelSpace Acaddocument)
  7.         pSpace       (vla-get-PaperSpace AcadDocument)
  8.         LayoutSel    (vla-get-Layouts AcadDocument)
  9.   )
  10.   (setvar "TILEMODE" 0)
  11.   ;获得布局2对象Layout2
  12.   (setq Layout1(vla-item LayoutSel "布局1"))
  13.   (setq Layout2 (vla-item LayoutSel "布局2"))
  14.   ;设置Layou2为活动布局
  15.   (setq layoutSel(vla-get-Layouts AcadDocument))
  16.   (setq documentSel(vla-get-Documents AcadObject))
  17.   (setq name(vla-get-Name (vla-get-ActiveDocument AcadObject)))
  18.   (vla-put-ActiveLayout (vla-Item documentSel name) Layout2)
  19.   
  20.   (setq CenterPnt(vlax-make-safearray vlax-vbDouble '(0 . 2)))
  21.   (vlax-safearray-fill CenterPnt '(40 40 0))
  22.   (vla-AddPViewport pSpace CenterPnt 20 20)
  23. )
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2006-2-9 15:12 | 显示全部楼层
;;(setvar "TILEMODE" 0)取消这句
 楼主| 发表于 2006-2-10 09:01 | 显示全部楼层

首先谢谢龙龙仔的帮助,祝新年好。

但我在取消(setvar "TILEMODE" 0)这句后,对运行结果没有影响,即:

1.当在布局2中运行(cpv2),可在布局2中创建一个视口;

2.鼠标操作,激活布局2窗口,再激活模型窗口,然后运行(cpv2),可在布局2中创建一个视口;

3.在在布局1中运行(cpv2),却布局1中创建一个视口;

4.鼠标操作,激活布局1窗口,再激活模型窗口,然后运行(cpv2),也是在布局1中创建一个视口.

还请龙龙仔和各位网友帮忙.

 

发表于 2006-2-10 10:01 | 显示全部楼层
  1. ;;不行就用mview吧!
  2. (defun C:PV2 ()
  3.   (vl-load-com)
  4.   (setq ACADOBJECT   (vlax-get-acad-object)
  5. ACADDOCUMENT (vla-get-activedocument ACADOBJECT)
  6. LAYOUTSEL    (vla-get-layouts ACADDOCUMENT)
  7.   )
  8.   (setq LAYOUT2 (vla-item LAYOUTSEL "配置2"))
  9.   (vla-put-activelayout ACADDOCUMENT LAYOUT2)
  10.   (setvar "TILEMODE" 0)
  11.   (command "_.MVIEW" '(30 30 0) '(50 50 0))
  12.   (princ)
  13. )
 楼主| 发表于 2006-2-10 15:33 | 显示全部楼层

如果用(command)函数,mview 或 vports命令都可达到预期效果。
但为什么不用(command)函数就不行?
我跟踪了一下,SPace对象的Layout还是指向layout1,而不是Layout2
我没有找到设置sPace的Layout指向的函数,也许这是问题的症结所在.
还请各位网友继续给与指点.
再次谢谢龙龙仔.

 

 楼主| 发表于 2006-2-11 14:02 | 显示全部楼层

问题找到了:即sPace对象的获取时机不对。
把语句
    (setq pSpace(vla-get-PaperSpace AcadDocument)
放到
    (vla-put-activelayout ACADDOCUMENT LAYOUT2)
的后面,SPace对象的Layout就指向layout2了。问题就解决了。

 

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

本版积分规则

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

GMT+8, 2024-5-3 05:17 , Processed in 0.498529 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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