jack093 发表于 2013-6-13 08:50:00

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 *****

cooolseee 发表于 2013-11-18 22:00:00

我的水平有点看不懂哦

pengfei2010 发表于 2013-11-30 11:47:00

以后估计能看懂。。。

xgr 发表于 2013-12-3 21:39:00


运行成功,在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);
                        }
                  }
                }
            }
      }
    }
}注意添加引用。


sdaulj 发表于 2014-5-6 23:06:00

路过并表示强烈支持!

沵的_浅笑 发表于 2014-10-17 14:45:00

在windows server 2003 上 view.GetSnapshot(rect) GDI+中发生一般性错误
页: [1]
查看完整版本: KEAN 的c#截图程序,哪位用c#帮忙编译一下