Zoom Extents in .Net
来源:互联网 发布:淘宝hd官网下载 编辑:程序博客网 时间:2024/06/09 23:20
原文:来自ADN
缩放模型空间到最合适屏幕,即Zoom E命令
public void SetViewportToExtents(Database db, ViewportTableRecord viewportTableRec) { //lets update the database extents first //true gives the best fit but will take time db.UpdateExt(true); //get the screen aspect ratio to calculate the height and width double scrRatio = (viewportTableRec.Width / viewportTableRec.Height); //prepare Matrix for DCS to WCS transformation Matrix3d matWCS2DCS = Matrix3d.PlaneToWorld(viewportTableRec.ViewDirection); //for DCS target point is the origin matWCS2DCS = Matrix3d.Displacement(viewportTableRec.Target-Point3d.Origin) * matWCS2DCS; //WCS Xaxis is twisted by twist angle matWCS2DCS = Matrix3d.Rotation(-viewportTableRec.ViewTwist, viewportTableRec.ViewDirection, viewportTableRec.Target) * matWCS2DCS; matWCS2DCS = matWCS2DCS.Inverse(); //tranform the extents to the DCS defined by the viewdir Extents3d extents = new Extents3d(db.Extmin, db.Extmax); extents.TransformBy(matWCS2DCS); //width of the extents in current view double width = (extents.MaxPoint.X - extents.MinPoint.X); //height of the extents in current view double height = (extents.MaxPoint.Y - extents.MinPoint.Y); //get the view center point Point2d 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 ratio if (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
- 实现ZOOM命令的Extents选项的几种方法
- Extents
- OpenInventor zoom in & zoom out实现方法
- OpenInventor zoom in & zoom out实现方法
- Web Zoom in and Zoom out plugin
- 支持zoom in, zoom out的TouchImageViewActivity组件
- Zoom
- zoom
- DHTML Zoom In and Out Script
- Android Browser zoom In/Out 分析
- [WP7]Correct pinch zoom in Silverlight
- ActiveReport for net WebViewer 设置zoom
- Zoom In and Out camera[ binocular effect ] in Unity
- -zoom-in、zoom-out与图形放大、图形缩小的差别
- 用css3的cursor:zoom-in/zoom-out实现微博看图片放大镜效果
- 用css3的cursor:zoom-in/zoom-out实现微博看图片放大镜效果
- MSSQL---extents
- ERP SYSTEM 架构初探
- 转载:Linux 性能监测:IO
- Eratosthenes筛法求1——100000之间所有的素数(32位汇编语言)
- hdu 1242 (bfs+优先队列)
- 使用printf()函数输出数据时,占位符的快速入门。(初学者)
- Zoom Extents in .Net
- 外部中断(2)
- 金士顿U盘才购买18天已经换过一次。京东客服最无耻客服7944公然耍无赖
- Web Services--gSOAP 2.7.6 第七章(7.1)
- C++ 友元
- Ecological Premium
- Kindergarten Counting Game
- Machined Surfaces
- Rotating Sentences