KEAN 的c#截图程序,哪位用c#帮忙编译一下
KEAN 的c#截图程序,哪位用c#帮忙编译一下这个功能如果autodesk公司做的话应该是小菜一碟。me.support@autodesk.com期待...
1 using Autodesk..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 }
104
105 static public void SnapshotToFile(
106 string filename,
107 VisualStyleType vst
108 )
109 {
110 Document doc =
111 Application.DocumentManager.MdiActiveDocument;
112 Editor ed = doc.Editor;
113 Database db = doc.Database;
114 Manager gsm = doc.GraphicsManager;
115
116 // Get some AutoCAD system variables
117 int vpn =
118 System.Convert.ToInt32(
119 Application.GetSystemVariable("CVPORT")
120 );
121
122 using (View view = new View())
123 {
124 gsm.SetViewFromViewport(view, vpn);
125
126 // Set the visual style to the one passed in
127 view.VisualStyle = new VisualStyle(vst);
128
129 Device dev =
130 gsm.CreateAutoCADOffScreenDevice();
131 using (dev)
132 {
133 dev.OnSize(gsm.DisplaySize);
134
135 // Set the render type and the background color
136 dev.DeviceRenderType = RendererType.Default;
137 dev.BackgroundColor = Color.White;
138
139 // Add the view to the device and update it
140 dev.Add(view);
141 dev.Update();
142
143 using (Model model = gsm.CreateAutoCADModel())
144 {
145 Transaction tr =
146 db.TransactionManager.StartTransaction();
147 using (tr)
148 {
149 // Add the modelspace to the view
150 // It's a container but also a drawable
151 BlockTable bt =
152 (BlockTable)tr.GetObject(
153 db.BlockTableId,
154 OpenMode.ForRead
155 );
156 BlockTableRecord btr =
157 (BlockTableRecord)tr.GetObject(
158 bt,
159 OpenMode.ForRead
160 );
161 view.Add(btr, model);
162 tr.Commit();
163 }
164 // Take the snapshot
165 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 filename
172 );
173 // Clean up
174 view.EraseAll();
175 dev.Erase(view);
176 }
177 }
178 }
179 }
180 }
181 }
182 }
在国外网站KEAN WALMSLEY用c#写的,哪位用c#帮忙编译一下
**** Hidden Message ***** 我的水平有点看不懂哦 以后估计能看懂。。。
运行成功,在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]