.NET

Reply
Distinguished Contributor spu
Distinguished Contributor
spu
Posts: 141
Registered: ‎02-21-2007
Message 1 of 3 (1,454 Views)

Creating new Layout with A3 Paper Size

1454 Views, 2 Replies
01-23-2012 01:06 AM

Hi,

 

I want to add a new layout to drawing with paper size "A3". Please help me to do it properly. this is want i am trying with.  We had a VBA script before as shown bellow.

For Each tlAcadLayout In ThisDrawing.layouts
        If tlAcadLayout.Name = "A3" Then
            blnLayout = True
            tlCurMedia = tlAcadLayout.CanonicalMediaName
            tlConfig = tlAcadLayout.ConfigName
            oldOrg = tlAcadLayout.PlotOrigin
            Exit For
        End If
    Next
 
 With tlAcadLayout
        .RefreshPlotDeviceInfo
        .ConfigName = "None"
        .CanonicalMediaName = "ISO_A3_(420.00_x_297.00_MM)"
        .PlotRotation = ac0degrees
        .PaperUnits = acMillimeters
        .PlotOrigin = ptOrigin
        Call .GetPaperSize(wid, ht)

  End With

 

And I tried to write it to .Net as shown bellow.

 

name ="A3";
            Autodesk.AutoCAD.ApplicationServices.Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
           Autodesk.AutoCAD.EditorInput.Editor ed = doc.Editor;
            Autodesk.AutoCAD.ApplicationServices.DocumentLock doclock = doc.LockDocument();
            Autodesk.AutoCAD.DatabaseServices.Database db = doc.Database;
            Autodesk.AutoCAD.DatabaseServices.TransactionManager trm = db.TransactionManager;
            Autodesk.AutoCAD.DatabaseServices.ObjectId oLayoutObjId;
            try
            {
                using (Autodesk.AutoCAD.DatabaseServices.Transaction tr = trm.StartTransaction())
                {

                    Autodesk.AutoCAD.DatabaseServices.LayoutManager  oLayoutManager = Autodesk.AutoCAD.DatabaseServices.LayoutManager.Current;
                    try
                    {

                        oLayoutObjId = oLayoutManager.CreateLayout(name);
                        Autodesk.AutoCAD.DatabaseServices.Layout oLayout = tr.GetObject(oLayoutObjId, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForWrite) as Autodesk.AutoCAD.DatabaseServices.Layout; 
                        oLayout.Initialize();
                        //ed.SwitchToPaperSpace(
                        // Get the PlotInfo from the layout
                        Autodesk.AutoCAD.PlottingServices.PlotInfo acPlInfo = new Autodesk.AutoCAD.PlottingServices.PlotInfo();
                        acPlInfo.Layout = oLayout.ObjectId;
                        // Get a copy of the PlotSettings from the layout
                        Autodesk.AutoCAD.DatabaseServices.PlotSettings acPlSet = new Autodesk.AutoCAD.DatabaseServices.PlotSettings(oLayout.ModelType);
                        acPlSet.CopyFrom(oLayout);
                        // Update the PlotConfigurationName property of the PlotSettings object
                        Autodesk.AutoCAD.DatabaseServices.PlotSettingsValidator acPlSetVdr = Autodesk.AutoCAD.DatabaseServices.PlotSettingsValidator.Current;


                        acPlSetVdr.SetPlotType(acPlSet,Autodesk.AutoCAD.DatabaseServices.PlotType.Extents);

                        acPlSetVdr.SetUseStandardScale(acPlSet, true);

                        acPlSetVdr.SetStdScaleType(acPlSet, Autodesk.AutoCAD.DatabaseServices.StdScaleType.ScaleToFit);

                        acPlSetVdr.SetPlotCentered(acPlSet, true);

                        acPlSetVdr.SetPlotPaperUnits(acPlSet, Autodesk.AutoCAD.DatabaseServices.PlotPaperUnit.Millimeters);

                      acPlSetVdr.SetPlotConfigurationName(acPlSet, "DWG To PDF.pc3", "ISO A3 (420.00 x 297.00 MM" );
                      acPlSetVdr.RefreshLists(acPlSet);
                                                   
                      oLayout.CopyFrom(acPlSet);
                        oLayout.CopyFrom(acPlSet);
                        tr.Commit();
                        // initialize the layout
                        ed.Regen();
                       
                    }
                    catch (Exception ex)
                    {
                        System.Windows.Forms.MessageBox.Show(name + " CreateNewLayout  Exception:" + ex.GetType() + "  Message:" + ex.Message);
                        tr.Abort();
                        ed.Regen();
                    }
                  
                }
               
                doclock.Dispose();

            }
            catch(Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(name +  " CreateNewLayout  Exception:" + ex.GetType() + "  Message:" + ex.Message);
            }

 It always throws exception einvalid input at acPlSetVdr.SetPlotConfigurationName(acPlSet, "DWG To PDF.pc3", "ISO A3 (420.00 x 297.00 MM" );

 

Please advice

Regards,

Shijith

Mentor
SENL1362
Posts: 174
Registered: ‎07-20-2011
Message 2 of 3 (1,445 Views)

Re: Creating new Layout with A3 Paper Size

01-23-2012 03:09 AM in reply to: spu

Reading the source it looks you mixed the paper and modelspaces.

Layout== paperspace, therefore you have to define the new PlotSettings using

PlotSettings np = new PlotSettings(false);  //paperspace

You specified: Autodesk.AutoCAD.DatabaseServices.PlotSettings acPlSet =

new  Autodesk.AutoCAD.DatabaseServices.PlotSettings(oLayout.ModelType);

 

Switch to Layout using:

            db.TileMode = false;        //goto Paperspace if not already
            ed.SwitchToPaperSpace();    //turn PVP off

 

Don't you want to save the newly created NamedPlotStyle ?     //tr.Abort();

 

 

 

Distinguished Contributor spu
Distinguished Contributor
spu
Posts: 141
Registered: ‎02-21-2007
Message 3 of 3 (1,442 Views)

Re: Creating new Layout with A3 Paper Size

01-23-2012 04:28 AM in reply to: spu

Thanks man that worked perfectly for me. This is my code, though not final yet may be useful for somebody latter.

 private void CreateNewLayout(string name)
        {
            Autodesk.AutoCAD.ApplicationServices.Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
           Autodesk.AutoCAD.EditorInput.Editor ed = doc.Editor;
            Autodesk.AutoCAD.ApplicationServices.DocumentLock doclock = doc.LockDocument();
            Autodesk.AutoCAD.DatabaseServices.Database db = doc.Database;
            Autodesk.AutoCAD.DatabaseServices.TransactionManager trm = db.TransactionManager;
            Autodesk.AutoCAD.DatabaseServices.ObjectId oLayoutObjId;
            try
            {
                using (Autodesk.AutoCAD.DatabaseServices.Transaction tr = trm.StartTransaction())
                {
                    Autodesk.AutoCAD.DatabaseServices.LayoutManager  oLayoutManager = Autodesk.AutoCAD.DatabaseServices.LayoutManager.Current;
                    try
                    {
                        oLayoutObjId = oLayoutManager.CreateLayout(name);
                        Autodesk.AutoCAD.DatabaseServices.Layout oLayout = tr.GetObject(oLayoutObjId, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForWrite) as Autodesk.AutoCAD.DatabaseServices.Layout; 
                        oLayout.Initialize();                     
                        Autodesk.AutoCAD.PlottingServices.PlotInfo acPlInfo = new Autodesk.AutoCAD.PlottingServices.PlotInfo();
                        acPlInfo.Layout = oLayout.ObjectId;
                        // Get a copy of the PlotSettings from the layout
                      
                     //   Autodesk.AutoCAD.DatabaseServices.PlotSettings acPlSet = new Autodesk.AutoCAD.DatabaseServices.PlotSettings(oLayout.ModelType);

                        Autodesk.AutoCAD.DatabaseServices.PlotSettings acPlSet = new Autodesk.AutoCAD.DatabaseServices.PlotSettings(false);  //paperspace
  



                        acPlSet.CopyFrom(oLayout);
                        // Update the PlotConfigurationName property of the PlotSettings object
                        Autodesk.AutoCAD.DatabaseServices.PlotSettingsValidator acPlSetVdr = Autodesk.AutoCAD.DatabaseServices.PlotSettingsValidator.Current;
                        acPlSetVdr.SetPlotConfigurationName(acPlSet, "DWG to PDF.pc3", "ISO_A3_(420.00_x_297.00_MM)");
                        acPlSetVdr.SetPlotRotation(acPlSet, Autodesk.AutoCAD.DatabaseServices.PlotRotation.Degrees000);
                        acPlSetVdr.SetPlotPaperUnits(acPlSet, Autodesk.AutoCAD.DatabaseServices.PlotPaperUnit.Millimeters);
                        oLayout.CopyFrom(acPlSet);                
                        tr.Commit();
                        oLayoutManager.CurrentLayout = name;
                        db.TileMode = false;        //goto Paperspace if not already
                        ed.SwitchToPaperSpace();    //turn PVP off
                        // initialize the layout
                        ed.Regen();                       
                    }
                    catch (Exception ex)
                    {
                        System.Windows.Forms.MessageBox.Show(name + " CreateNewLayout  Exception:" + ex.GetType() + "  Message:" + ex.Message);
                        tr.Abort();
                        ed.Regen();
                    } 
                }
                doclock.Dispose();
            }
            catch(Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(name +  " CreateNewLayout  Exception:" + ex.GetType() + "  Message:" + ex.Message);
            }
        }

 

Announcements
Are you familiar with the Autodesk Expert Elites? The Expert Elite program is made up of customers that help other customers by sharing knowledge and exemplifying an engaging style of collaboration. To learn more, please visit our Expert Elite website.
Need installation help?

Start with some of our most frequented solutions or visit the Installation and Licensing Forum to get help installing your software.