Aller au contenu

Création fenetre FMULT


Messages recommandés

Salut,

 

Un exemple qui crée une fenêtre par présentation.

La fenêtre prend les dimensions maximum en fonction de l'orientation du papier et des marges de l'imprimante (comme l'option "Zonegraph") :

 

using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;

namespace ViewportTest
{
   public class Class1
   {
       [CommandMethod("Test")]
       public void Test()
       {
           Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
           Database db = HostApplicationServices.WorkingDatabase;
           try
           {
               using (Transaction tr = db.TransactionManager.StartTransaction())
               {
                   // Ouverture du dictionnaire des objets nommés
                   DBDictionary NOD = (DBDictionary)tr.GetObject(db.NamedObjectsDictionaryId, OpenMode.ForRead);

                   // Ouverture du dictionnaire "ACAD_LAYOUT"
                   DBDictionary layouts = (DBDictionary)tr.GetObject(NOD.GetAt("ACAD_LAYOUT"), OpenMode.ForRead);

                   // Pour chaque entrée dans le dictionnaire "ACAD_LAYOUT"
                   foreach (DBDictionaryEntry entry in layouts)
                   {
                       if (entry.Key != "Model")
                       {
                           // Calcul des dimension de la fenêtre en fonction du format du papier,
                           // des marges du traceur et de l'orientation du dessin
                           Layout lay = (Layout)tr.GetObject(entry.Value, OpenMode.ForRead);
                           Point2d
                               minPt = lay.PlotPaperMargins.MinPoint,
                               maxPt = lay.PlotPaperMargins.MaxPoint,
                               pSize = lay.PlotPaperSize;
                           double width, height;
                           if ((int)lay.PlotRotation % 2 == 0)
                           {
                               width = pSize.X - maxPt.X - minPt.X;
                               height = pSize.Y - maxPt.Y - minPt.Y;
                           }
                           else
                           {
                               width = pSize.Y - maxPt.Y - minPt.Y;
                               height = pSize.X - maxPt.X - minPt.X;
                           }

                           // Ajout de la fenêtre dans le "bloc" de la présentation
                           BlockTableRecord btr = (BlockTableRecord)tr.GetObject(lay.BlockTableRecordId, OpenMode.ForWrite);
                           Viewport vp = new Viewport();
                           vp.Width = width;
                           vp.Height = height;
                           vp.CenterPoint = new Point3d(width / 2.0, height / 2.0, 0.0);
                           btr.AppendEntity(vp);
                           tr.AddNewlyCreatedDBObject(vp, true);
                       }
                   }
                   tr.Commit();
               }
           }
           catch (System.Exception ex)
           {
               ed.WriteMessage("\nErreur: " + ex.Message);
           }
       }
   }
}

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Alors, que je te tienne au courant de mes avancées.

 

La routine semble fonctionner, mais avec quelques bizareries.

 

J'ai fais le test dans un plan qui contient 3 présentations.

 

Sur la première, la fmult d'origine est détruite et remplacée par celle crée par la routine ;)

 

Sur la deuxième, la fmult d'origine est conservée, et la nouvelle non crée :casstet:

 

Sur la troisième, la fmult d'origine est conservée, et la nouvelle est crée :casstet:

 

Donc un comportement différent selon la présentation :(

http://www.carpetdiem.net

Plugins pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité