注:此代码在ACAD 2019和ZWCAD 2022,2023可行;Kean大佬2007年那个代码已不能用于新版ACAD;感谢ZWCAD的周工!
public static Bitmap GetImage_Kernel_Entity(Color backgroundColor, Entity tEnt, Extents3d? viewExt, Size imageSize, double zoomFactor = 1.0)
{
#if _ACAD
try
{
if (imageSize.Width == 0 || imageSize.Height == 0) return null;
if (viewExt == null)
{
viewExt = tEnt.GetExtents_3d();// aEnt.GetExtend3d( tEnt);
if (viewExt == null || viewExt.Value.Length_X() == 0 || viewExt.Value.Length_Y() == 0) return null;
}
var doc = ac.doc;
var m_Manager = doc.GraphicsManager;
KernelDescriptor kDecs = new KernelDescriptor();
kDecs.addRequirement(KernelDescriptor.Drawing3D);
GraphicsKernel gk = Manager.AcquireGraphicsKernel(kDecs);
var m_Device = m_Manager.Create
AutoCADOffScreenDevice(gk);
var m_Model = m_Manager.CreateAutoCADModel(gk);
var m_View = new View();
try
{
m_Device.BackgroundColor = backgroundColor;
m_Device.OnSize(imageSize);
var center = viewExt.Value.Center_XY();
m_View.EraseAll();
m_View.SetView(center, center, Vector3d.YAxis, viewExt.Value.Length_X(), viewExt.Value.Length_Y());
m_View.ZoomExtents(viewExt.Value.MinPoint, viewExt.Value.MaxPoint);
m_View.Zoom(m_View.FieldWidth * zoomFactor / imageSize.Width);
m_Device.Add(m_View);
Entity tEnt2 = GetOppositeColorEntity(backgroundColor, tEnt);
m_View.Add(tEnt2, m_Model);
m_View.Invalidate();
m_View.Update();
Rectangle rect = new Rectangle(0, 0, imageSize.Width, imageSize.Height);
return m_View.GetSnapshot(rect);
}
catch (System.Exception ex2)
{
ae.WriteMessage(ex2);
return null;
}
finally
{
if (m_Device != null) m_Device.Erase(m_View);
if (m_View != null)
{
m_View.EraseAll();
m_View.Dispose();
m_View = null;
}
if (m_Manager != null)
{
if (m_Model != null)
{
m_Model.Dispose();
m_Model = null;
}
if (m_Device != null)
{
m_Device.Dispose();
m_Device = null;
}
}
}
}
catch (System.Exception ex1)
{
ae.WriteMessage(ex1);
return null;
}
#else
try
{
if (imageSize.Width == 0 || imageSize.Height == 0) return null;
if (viewExt == null)
{
viewExt = tEnt.GetExtents_3d();// aEnt.GetExtend3d( tEnt);
if (viewExt == null || viewExt.Value.Length_X() == 0 || viewExt.Value.Length_Y() == 0) return null;
}
var doc = ac.doc;
var m_Manager = doc.GraphicsManager;
var gk = new GraphicsKernel();
var m_Device = m_Manager.CreateZWCADOffScreenDevice(gk);
var m_Model = m_Manager.CreateZWCADModel(gk);
var m_View = new View();
try
{
m_Device.BackgroundColor = backgroundColor;
m_Device.OnSize(imageSize);
m_Device.Add(m_View);
if (!SetView_Extents3d(m_View, viewExt.Value, imageSize.Width, imageSize.Height, zoomFactor))
{
return null;
}
Display_Entity(backgroundColor, m_View, m_Model, tEnt);
return m_Device.GetSnapshot(m_View.Viewport);
}
catch (System.Exception ex2)
{
ae.WriteMessage(ex2);
return null;
}
finally
{
if (m_Device != null) m_Device.Erase(m_View);
if (m_View != null)
{
m_View.EraseAll();
m_View.Dispose();
m_View = null;
}
if (m_Manager != null)
{
if (m_Model != null)
{
m_Model.Dispose();
m_Model = null;
}
if (m_Device != null)
{
m_Device.Dispose();
m_Device = null;
}
}
}
}
catch (System.Exception ex1)
{
ae.WriteMessage(ex1);
return null;
}
#endif
}