We will discuss few workarounds to tackle the problem with the creation of an off-screen View in .NET,
For C++ interested user, following comprehensive sample should help.
Problem 1:
The problem is that the off-screen view that I have to create looks as a “mirror” or “upside down” of the initial view that i want to render.
Workaround: Currently .NET API gives in-correct results, to work around the behaviour, use
using (Bitmap bitmap = offscreenView.RenderToImage(mySettings, myRectangle)) { if (File.Exists("D:\Temp\RenderTestImage.Jpg")) File.Delete("D:\Temp\RenderTestImage.Jpg"); bitmap.RotateFlip(RotateFlipType.Rotate180FlipX); bitmap.Save("D:\Temp\RenderTestImage.Jpg", System.Drawing.Imaging.ImageFormat.Jpeg); }
Problem 2:
How to enable the SUN for my off-screen view.
public void RND() { Document acDoc = Application.DocumentManager.MdiActiveDocument; Database acDb = acDoc.Database; Editor ed = acDoc.Editor; /*Turn on SUN*/ // Application.SetSystemVariable("SUNSTATUS", 1); ViewportTableRecord vport = null; Sun sun = new Sun(); sun.IsOn = true; using (Transaction acTrans = acDb.TransactionManager.StartTransaction()) { vport = (ViewportTableRecord)acTrans.GetObject(acDoc.Editor.ActiveViewportId, OpenMode.ForWrite); vport.SetSun(sun); acTrans.Commit(); } Autodesk.AutoCAD.Geometry.Point2d myScreenSize = (Point2d)Application.GetSystemVariable("screensize"); double myWidth = myScreenSize.X; double myHeight = myScreenSize.Y; if (File.Exists("D:\Temp\RndImage.bmp")) File.Delete("D:\Temp\RndImage.bmp"); ed.Command("_render", "", "render", myWidth.ToString(), myHeight.ToString(), "yes", "D:\Temp\RndImage.bmp"); ed.Command("RENDERWINDOWCLOSE"); }
I have not used renderToImage API, as of now, when SUN is enabled, rendering on off-screen does not display the effects of Sun, hence above workaround is proposed now.

Leave a Reply