swtool

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Runtime.InteropServices;

using Autodesk.AutoCAD.Runtime;

using Autodesk.AutoCAD.ApplicationServices;

using Autodesk.AutoCAD.DatabaseServices;

using Autodesk.AutoCAD.Geometry;

using Autodesk.AutoCAD.EditorInput;

using AcGi = Autodesk.AutoCAD.GraphicsInterface;

 

namespace sample

{

    public class paperViewport

    {

        //for 2013 cad

        [DllImport("accore.dll", CallingConvention = CallingConvention.Cdecl,

        EntryPoint = "?acedSetCurrentVPort@@YA?AW4ErrorStatus@Acad@@PEBVAcDbViewport@@@Z")]

        //[DllImport("acad.exe", CallingConvention = CallingConvention.Cdecl,

        // EntryPoint = "?acedSetCurrentVPort@@YA?AW4ErrorStatus@Acad@@PBVAcDbViewport@@@Z")]

        extern static private int acedSetCurrentVPort(IntPtr AcDbVport);

 

        [CommandMethod("CreateFloatingViewport")]

        public static void CreateFloatingViewport()

        {

            // Get the current document and database, and start a transaction

            Document acDoc = Application.DocumentManager.MdiActiveDocument;

            Database acCurDb = acDoc.Database;

 

            using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())

            {

                // Open the Block table for read

                BlockTable acBlkTbl;

                acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,

                                             OpenMode.ForRead) as BlockTable;

 

                // Open the Block table record Paper space for write

                BlockTableRecord acBlkTblRec;

                acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.PaperSpace],

                                                OpenMode.ForWrite) as BlockTableRecord;

 

                // Switch to the previous Paper space layout

                Application.SetSystemVariable("TILEMODE", 0);

                acDoc.Editor.SwitchToPaperSpace();

 

                // Create a Viewport

                Viewport acVport = new Viewport();

                acVport.CenterPoint = new Point3d(3.25, 3, 0);

                acVport.Width = 6;

                acVport.Height = 5;

 

                // Add the new object to the block table record and the transaction

                acBlkTblRec.AppendEntity(acVport);

                acTrans.AddNewlyCreatedDBObject(acVport, true);

 

                // Change the view direction

                acVport.ViewDirection = new Vector3d(1, 1, 1);

 

                // Enable the viewport

                acVport.On = true;

 

                // Activate model space in the viewport

                acDoc.Editor.SwitchToModelSpace();

 

                // Set the new viewport current via an imported ObjectARX function

                acedSetCurrentVPort(acVport.UnmanagedObject);

 

                // Save the new objects to the database

                acTrans.Commit();

            }

        }

 

    }

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2021-10-02
  • 2022-02-28
  • 2022-12-23
  • 2022-12-23
  • 2021-12-12
  • 2021-07-24
  • 2022-01-05
猜你喜欢
  • 2021-12-26
  • 2021-12-12
  • 2022-12-23
  • 2021-09-28
  • 2021-04-19
  • 2018-01-07
  • 2022-01-22
相关资源
相似解决方案