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

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#帮忙编译一下


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

我的水平有点看不懂哦

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

以后估计能看懂。。。

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

本帖最后由 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);
                        }
                  }
                }
            }
      }
    }
}注意添加引用。


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

路过并表示强烈支持!

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

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