KEAN 的c#截图程序,哪位用c#帮忙编译一下
本帖最后由 jack093 于 2013-7-8 09:49 编辑KEAN 的c#截图程序,哪位用c#帮忙编译一下
这个功能如果autodesk公司做的话应该是小菜一碟。me.support@autodesk.comme.support.china@autodesk.com期待...
http://through-the-interface.typepad.com/through_the_interface/2007/04/taking_a_snapsh_1.html
1 using Autodesk.AutoCAD.ApplicationServices;
2 using Autodesk.AutoCAD.DatabaseServices; 3 using Autodesk.AutoCAD.EditorInput; 4 using Autodesk.AutoCAD.GraphicsInterface; 5 using Autodesk.AutoCAD.GraphicsSystem; 6 using Autodesk.AutoCAD.Runtime; 7 using Autodesk.AutoCAD.Interop; 8 using System.Drawing; 9 10 namespace OffscreenImageCreation 11 { 12 public class Commands 13 { 14 15 static public void OffscreenSnapshot() 16 { 17 CreateSphere(); 18 SnapshotToFile( 19 "c:\\sphere-Wireframe2D.png", 20 VisualStyleType.Wireframe2D 21 ); 22 SnapshotToFile( 23 "c:\\sphere-Hidden.png", 24 VisualStyleType.Hidden 25 ); 26 SnapshotToFile( 27 "c:\\sphere-Basic.png", 28 VisualStyleType.Basic 29 ); 30 SnapshotToFile( 31 "c:\\sphere-ColorChange.png", 32 VisualStyleType.ColorChange 33 ); 34 SnapshotToFile( 35 "c:\\sphere-Conceptual.png", 36 VisualStyleType.Conceptual 37 ); 38 SnapshotToFile( 39 "c:\\sphere-Flat.png", 40 VisualStyleType.Flat 41 ); 42 SnapshotToFile( 43 "c:\\sphere-Gouraud.png", 44 VisualStyleType.Gouraud 45 ); 46 SnapshotToFile( 47 "c:\\sphere-Realistic.png", 48 VisualStyleType.Realistic 49 ); 50 } 51 52 static public void CreateSphere() 53 { 54 Document doc = 55 Application.DocumentManager.MdiActiveDocument; 56 Database db = doc.Database; 57 Editor ed = doc.Editor; 58 59 Transaction tr = 60 doc.TransactionManager.StartTransaction(); 61 using (tr) 62 { 63 BlockTable bt = 64 (BlockTable)tr.GetObject( 65 db.BlockTableId, 66 OpenMode.ForRead 67 ); 68 BlockTableRecord btr = 69 (BlockTableRecord)tr.GetObject( 70 bt, 71 OpenMode.ForWrite 72 ); 73 Solid3d sol = new Solid3d(); 74 sol.CreateSphere(10.0); 75 76 const string matname = 77 "Sitework.Paving - Surfacing.Riverstone.Mortared"; 78 DBDictionary matdict = 79 (DBDictionary)tr.GetObject( 80 db.MaterialDictionaryId, 81 OpenMode.ForRead 82 ); 83 if (matdict.Contains(matname)) 84 { 85 sol.Material = matname; 86 } 87 else 88 { 89 ed.WriteMessage( 90 "\nMaterial (" + matname + ") not found" + 91 " - sphere will be rendered without it.", 92 matname 93 ); 94 } 95 btr.AppendEntity(sol); 96 97 tr.AddNewlyCreatedDBObject(sol, true); 98 tr.Commit(); 99 }100 AcadApplication acadApp =101 (AcadApplication)Application.AcadApplication;102 acadApp.ZoomExtents();103 }104105 static public void SnapshotToFile(106 string filename,107 VisualStyleType vst108 )109 {110 Document doc =111 Application.DocumentManager.MdiActiveDocument;112 Editor ed = doc.Editor;113 Database db = doc.Database;114 Manager gsm = doc.GraphicsManager;115116 // Get some AutoCAD system variables117 int vpn =118 System.Convert.ToInt32(119 Application.GetSystemVariable("CVPORT")120 );121122 using (View view = new View())123 {124 gsm.SetViewFromViewport(view, vpn);125126 // Set the visual style to the one passed in127 view.VisualStyle = new VisualStyle(vst);128129 Device dev =130 gsm.CreateAutoCADOffScreenDevice();131 using (dev)132 {133 dev.OnSize(gsm.DisplaySize);134135 // Set the render type and the background color136 dev.DeviceRenderType = RendererType.Default;137 dev.BackgroundColor = Color.White;138139 // Add the view to the device and update it140 dev.Add(view);141 dev.Update();142143 using (Model model = gsm.CreateAutoCADModel())144 {145 Transaction tr =146 db.TransactionManager.StartTransaction();147 using (tr)148 {149 // Add the modelspace to the view150 // It's a container but also a drawable151 BlockTable bt =152 (BlockTable)tr.GetObject(153 db.BlockTableId,154 OpenMode.ForRead155 );156 BlockTableRecord btr =157 (BlockTableRecord)tr.GetObject(158 bt,159 OpenMode.ForRead160 );161 view.Add(btr, model);162 tr.Commit();163 }164 // Take the snapshot165 Rectangle rect = view.Viewport;166 using (Bitmap bitmap = view.GetSnapshot(rect))167 {168 bitmap.Save(filename);169 ed.WriteMessage(170 "\nSnapshot image saved to: " +171 filename172 );173 // Clean up174 view.EraseAll();175 dev.Erase(view);176 }177 }178 }179 }180 }181 }182 }在国外网站KEAN WALMSLEY用c#写的,哪位用c#帮忙编译一下
我的水平有点看不懂哦 以后估计能看懂。。。 本帖最后由 xgr 于 2013-12-3 21:43 编辑
运行成功,在C盘生成了图纸的png图片using System;
using System.Drawing;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.GraphicsInterface;
using Autodesk.AutoCAD.GraphicsSystem;
using Autodesk.AutoCAD.Interop;
using Autodesk.AutoCAD.Runtime;
namespace 截图工具
{
public class Commands
{
public static void OffscreenSnapshot()
{
CreateSphere();
SnapshotToFile(
"c:\\sphere-Wireframe2D.png",
VisualStyleType.Wireframe2D
);
SnapshotToFile(
"c:\\sphere-Hidden.png",
VisualStyleType.Hidden
);
SnapshotToFile(
"c:\\sphere-Basic.png",
VisualStyleType.Basic
);
SnapshotToFile(
"c:\\sphere-ColorChange.png",
VisualStyleType.ColorChange
);
SnapshotToFile(
"c:\\sphere-Conceptual.png",
VisualStyleType.Conceptual
);
SnapshotToFile(
"c:\\sphere-Flat.png",
VisualStyleType.Flat
);
SnapshotToFile(
"c:\\sphere-Gouraud.png",
VisualStyleType.Gouraud
);
SnapshotToFile(
"c:\\sphere-Realistic.png",
VisualStyleType.Realistic
);
}
public static void CreateSphere()
{
Document doc =
Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
Editor ed = doc.Editor;
Transaction tr =
doc.TransactionManager.StartTransaction();
using (tr)
{
var bt =
(BlockTable) tr.GetObject(
db.BlockTableId,
OpenMode.ForRead
);
var btr =
(BlockTableRecord) tr.GetObject(
bt,
OpenMode.ForWrite
);
var sol = new Solid3d();
sol.CreateSphere(10.0);
const string matname =
"Sitework.Paving - Surfacing.Riverstone.Mortared";
var matdict =
(DBDictionary) tr.GetObject(
db.MaterialDictionaryId,
OpenMode.ForRead
);
if (matdict.Contains(matname))
{
sol.Material = matname;
}
else
{
ed.WriteMessage(
"\nMaterial (" + matname + ") not found" +
" - sphere will be rendered without it.",
matname
);
}
btr.AppendEntity(sol);
tr.AddNewlyCreatedDBObject(sol, true);
tr.Commit();
}
var acadApp =
(AcadApplication)Application.AcadApplication;
acadApp.ZoomExtents();
}
public static void SnapshotToFile(
string filename,
VisualStyleType vst
)
{
Document doc =
Application.DocumentManager.MdiActiveDocument;
Editor ed = doc.Editor;
Database db = doc.Database;
Manager gsm = doc.GraphicsManager;
// Get some AutoCAD system variables
int vpn =
Convert.ToInt32(
Application.GetSystemVariable("CVPORT")
);
using (var view = new View())
{
gsm.SetViewFromViewport(view, vpn);
// Set the visual style to the one passed in
view.VisualStyle = new VisualStyle(vst);
Device dev =
gsm.CreateAutoCADOffScreenDevice();
using (dev)
{
dev.OnSize(gsm.DisplaySize);
// Set the render type and the background color
dev.DeviceRenderType = RendererType.Default;
dev.BackgroundColor = Color.White;
// Add the view to the device and update it
dev.Add(view);
dev.Update();
using (Model model = gsm.CreateAutoCADModel())
{
Transaction tr =
db.TransactionManager.StartTransaction();
using (tr)
{
// Add the modelspace to the view
// It's a container but also a drawable
var bt =
(BlockTable) tr.GetObject(
db.BlockTableId,
OpenMode.ForRead
);
var btr =
(BlockTableRecord) tr.GetObject(
bt,
OpenMode.ForRead
);
view.Add(btr, model);
tr.Commit();
}
// Take the snapshot
Rectangle rect = view.Viewport;
using (Bitmap bitmap = view.GetSnapshot(rect))
{
bitmap.Save(filename);
ed.WriteMessage(
"\nSnapshot image saved to: " +
filename
);
// Clean up
view.EraseAll();
dev.Erase(view);
}
}
}
}
}
}
}注意添加引用。
路过并表示强烈支持! 在windows server 2003 上 view.GetSnapshot(rect) GDI+中发生一般性错误
页:
[1]