明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1675|回复: 4

请教版主关于多个视口同时缩放的问题~

[复制链接]
发表于 2013-4-26 22:24:32 | 显示全部楼层 |阅读模式
2明经币
    大家好,小弟最近在做一个程序,需要用到4个视口,然后在4个视口中同时缩放显示图形,但是发现只能缩放最后一个视口,之前的缩放都会无效,不知道高手有没有什么好方法?急求~谢谢了

 楼主| 发表于 2013-4-30 09:59:42 | 显示全部楼层
悲剧的没有人回答,自己琢磨了一下做出了,写下来给大家一些灵感~
回复

使用道具 举报

 楼主| 发表于 2013-4-30 10:10:43 | 显示全部楼层
我是打算用4个模型视口,分别显示显示零件的4个不同的方向,并且自动缩放至合适尺寸,因为四个视口无法直接使用zoomextens缩放,只能缩放后再保存当前的视图位置,并且要转至相应的UCS才能够正常缩放,代码如下:
Function changeto3d()
Dim vport As AcadViewport
Dim viewpt(0 To 2) As Double
Dim vSize As Double
Dim sSize As Variant
Dim vCenter As Variant
Dim portcenter As Variant
Dim currucs As AcadUCS
builducs   '用函数建立topucs,frontucs,leftucs,3ducs 这四不同的ucs,分别代表前视,俯视、左视与轴侧图
'保存当前ucs
    If ThisDrawing.GetVariable("UCSNAME") = "" Then
        ' Current UCS is not saved so get the data and save it
        With ThisDrawing
            Set currucs = .UserCoordinateSystems.Add( _
                            .GetVariable("UCSORG"), _
                            .Utility.TranslateCoordinates(.GetVariable("UCSXDIR"), acUCS, acWorld, 0), _
                            .Utility.TranslateCoordinates(.GetVariable("UCSYDIR"), acUCS, acWorld, 0), _
                            "OriginalUCS")
        End With
    Else
        Set currucs = ThisDrawing.activeucs  'current UCS is saved
    End If
'删除之前的分割视口
If ThisDrawing.Viewports.count > 1 Then
  ThisDrawing.Viewports.DeleteConfiguration ("四视图")
End If
ThisDrawing.Regen acAllViewports
'将视口分为4个
Set vport = ThisDrawing.Viewports.Add("四视图")
vport.Split acViewport4

For Each vport In ThisDrawing.Viewports
On Error Resume Next
If vport.Name = "四视图" Then    '定义每个视口的视图方向
If vport.LowerLeftCorner(0) = 0 And vport.LowerLeftCorner(1) = 0 Then
     viewpt(0) = 0
     viewpt(1) = 0
     viewpt(2) = 1
     ThisDrawing.activeucs = topUCS
  End If
  If vport.LowerLeftCorner(0) = 0 And vport.LowerLeftCorner(1) = 0.5 Then
     viewpt(0) = 0
     viewpt(1) = -1
     viewpt(2) = 0
     ThisDrawing.activeucs = frontUCS
  End If
  If vport.LowerLeftCorner(0) = 0.5 And vport.LowerLeftCorner(1) = 0.5 Then
     viewpt(0) = -1
     viewpt(1) = 0
     viewpt(2) = 0
     ThisDrawing.activeucs = leftUCS
  End If
  If vport.LowerLeftCorner(0) = 0.5 And vport.LowerLeftCorner(1) = 0 Then
     viewpt(0) = -1
     viewpt(1) = -1
     viewpt(2) = Sqr(2)
     ThisDrawing.activeucs = 3DUCS
  End If
'将视图方向转化并激活
  vport.Direction = viewpt
  vport.SnapRotationAngle = 0
  ThisDrawing.ActiveViewport = vport

'保存缩放后的视图方向
  ZoomExtents
  vSize = ThisDrawing.GetVariable("VIEWSIZE")'取得屏幕高度
  sSize = ThisDrawing.GetVariable("SCREENSIZE")'取得屏幕分辨率比例
  vCenter = ThisDrawing.GetVariable("VIEWCTR")'取得中心点位置
  vport.Height = vSize
  vport.Width = sSize(0) / sSize(1) * vSize
  portcenter = vport.center
  portcenter(0) = vCenter(0): portcenter(1) = vCenter(1)
  vport.center = portcenter
  ThisDrawing.ActiveViewport = vport'修改视图参数并激活
End If
Next vport
'恢复ucs
    ThisDrawing.activeucs = currucs
End Function
回复

使用道具 举报

发表于 2014-4-24 20:54:41 | 显示全部楼层
回复

使用道具 举报

发表于 2014-4-25 22:47:33 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 11:32 , Processed in 0.174032 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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