Zoom Extents in .Net

2024-06-10 11:32
文章标签 net zoom extents

本文主要是介绍Zoom Extents in .Net,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文:来自ADN

缩放模型空间到最合适屏幕,即Zoom E命令

public void SetViewportToExtents(Database db, ViewportTableRecord viewportTableRec) 
{ //lets update the database extents first//true gives the best fit but will take timedb.UpdateExt(true);//get the screen aspect ratio to calculate the height and widthdouble scrRatio = (viewportTableRec.Width / viewportTableRec.Height);//prepare Matrix for DCS to WCS transformationMatrix3d matWCS2DCS = Matrix3d.PlaneToWorld(viewportTableRec.ViewDirection);//for DCS target point is the originmatWCS2DCS = Matrix3d.Displacement(viewportTableRec.Target-Point3d.Origin) * matWCS2DCS; //WCS Xaxis is twisted by twist anglematWCS2DCS = Matrix3d.Rotation(-viewportTableRec.ViewTwist,viewportTableRec.ViewDirection,viewportTableRec.Target) * matWCS2DCS;matWCS2DCS = matWCS2DCS.Inverse();//tranform the extents to the DCS defined by the viewdirExtents3d extents = new Extents3d(db.Extmin, db.Extmax);extents.TransformBy(matWCS2DCS);//width of the extents in current viewdouble width = (extents.MaxPoint.X - extents.MinPoint.X);//height of the extents in current viewdouble height = (extents.MaxPoint.Y - extents.MinPoint.Y);//get the view center pointPoint2d center = new Point2d((extents.MaxPoint.X  + extents.MinPoint.X)*0.5, (extents.MaxPoint.Y  + extents.MinPoint.Y)*0.5);//check if the width 'fits' in current window//if not then get the new height as per the viewports aspect ratioif (width > (height * scrRatio)) height = width / scrRatio;viewportTableRec.Height = height; viewportTableRec.Width = height * scrRatio;viewportTableRec.CenterPoint = center;
}

[CommandMethod("ModelZoomExtents")]
public void ModelZoomExtents()
{Document doc = Application.DocumentManager.MdiActiveDocument;Database db = doc.Database;Editor ed = doc.Editor;using (Transaction Tx = db.TransactionManager.StartTransaction()){ed.UpdateTiledViewportsInDatabase();ViewportTableRecord viewportTableRec = Tx.GetObject(ed.ActiveViewportId, OpenMode.ForWrite) as ViewportTableRecord;SetViewportToExtents(db, viewportTableRec);ed.UpdateTiledViewportsFromDatabase();Tx.Commit();}
}
[CommandMethod("PaperZoomExtents")]
static public void PaperZoomExtents()
{Document doc = Application.DocumentManager.MdiActiveDocument;Database db = doc.Database;Editor ed = doc.Editor;PromptEntityOptions peo = new PromptEntityOptions("\nSelect a viewport: ");peo.SetRejectMessage("\nMust be a viewport...");peo.AddAllowedClass(typeof(Viewport), true);PromptEntityResult per = ed.GetEntity(peo);if (per.Status != PromptStatus.OK) return;using (Transaction Tx = db.TransactionManager.StartTransaction()){Viewport vp = Tx.GetObject(per.ObjectId, OpenMode.ForWrite) as Viewport;db.UpdateExt(true);double scrRatio = (vp.Width / vp.Height);Matrix3d matWCS2DCS = Matrix3d.PlaneToWorld(vp.ViewDirection);matWCS2DCS = Matrix3d.Displacement(vp.ViewTarget-Point3d.Origin) * matWCS2DCS; matWCS2DCS = Matrix3d.Rotation(-vp.TwistAngle,vp.ViewDirection,vp.ViewTarget) * matWCS2DCS;matWCS2DCS = matWCS2DCS.Inverse();Extents3d extents = new Extents3d(db.Extmin, db.Extmax);extents.TransformBy(matWCS2DCS);double width = (extents.MaxPoint.X - extents.MinPoint.X);double height = (extents.MaxPoint.Y - extents.MinPoint.Y);Point2d center = new Point2d((extents.MaxPoint.X  + extents.MinPoint.X)*0.5, (extents.MaxPoint.Y  + extents.MinPoint.Y)*0.5);if (width > (height * scrRatio)) height = width / scrRatio;vp.ViewHeight = height;vp.ViewCenter = center;Tx.Commit();}
}



这篇关于Zoom Extents in .Net的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1048041

相关文章

C#借助Spire.XLS for .NET实现在Excel中添加文档属性

《C#借助Spire.XLSfor.NET实现在Excel中添加文档属性》在日常的数据处理和项目管理中,Excel文档扮演着举足轻重的角色,本文将深入探讨如何在C#中借助强大的第三方库Spire.... 目录为什么需要程序化添加Excel文档属性使用Spire.XLS for .NET库实现文档属性管理Sp

C#借助Spire.XLS for .NET实现Excel工作表自动化样式设置

《C#借助Spire.XLSfor.NET实现Excel工作表自动化样式设置》作为C#开发者,我们经常需要处理Excel文件,本文将深入探讨如何利用C#代码,借助强大的Spire.XLSfor.N... 目录为什么需要自动化工作表样式使用 Spire.XLS for .NET 实现工作表整体样式设置样式配置

C#利用Free Spire.XLS for .NET复制Excel工作表

《C#利用FreeSpire.XLSfor.NET复制Excel工作表》在日常的.NET开发中,我们经常需要操作Excel文件,本文将详细介绍C#如何使用FreeSpire.XLSfor.NET... 目录1. 环境准备2. 核心功能3. android示例代码3.1 在同一工作簿内复制工作表3.2 在不同

在.NET项目中嵌入Python代码的实践指南

《在.NET项目中嵌入Python代码的实践指南》在现代开发中,.NET与Python的协作需求日益增长,从机器学习模型集成到科学计算,从脚本自动化到数据分析,然而,传统的解决方案(如HTTPAPI或... 目录一、CSnakes vs python.NET:为何选择 CSnakes?二、环境准备:从 Py

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Go语言使用net/http构建一个RESTful API的示例代码

《Go语言使用net/http构建一个RESTfulAPI的示例代码》Go的标准库net/http提供了构建Web服务所需的强大功能,虽然众多第三方框架(如Gin、Echo)已经封装了很多功能,但... 目录引言一、什么是 RESTful API?二、实战目标:用户信息管理 API三、代码实现1. 用户数据

在ASP.NET项目中如何使用C#生成二维码

《在ASP.NET项目中如何使用C#生成二维码》二维码(QRCode)已广泛应用于网址分享,支付链接等场景,本文将以ASP.NET为示例,演示如何实现输入文本/URL,生成二维码,在线显示与下载的完整... 目录创建前端页面(Index.cshtml)后端二维码生成逻辑(Index.cshtml.cs)总结

解决hive启动时java.net.ConnectException:拒绝连接的问题

《解决hive启动时java.net.ConnectException:拒绝连接的问题》Hadoop集群连接被拒,需检查集群是否启动、关闭防火墙/SELinux、确认安全模式退出,若问题仍存,查看日志... 目录错误发生原因解决方式1.关闭防火墙2.关闭selinux3.启动集群4.检查集群是否正常启动5.

解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题

《解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题》:本文主要介绍解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4... 目录未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘打开pom.XM

javax.net.ssl.SSLHandshakeException:异常原因及解决方案

《javax.net.ssl.SSLHandshakeException:异常原因及解决方案》javax.net.ssl.SSLHandshakeException是一个SSL握手异常,通常在建立SS... 目录报错原因在程序中绕过服务器的安全验证注意点最后多说一句报错原因一般出现这种问题是因为目标服务器