coyotte Posté(e) le 24 juin 2009 Posté(e) le 24 juin 2009 Bonjour à tous, je programme en csharp, et je parviens à créer des onglets de présentation. Mon souscis est de placer une FMULT dans chaque présentation :( Dans l'espoir que l'un d'entre vous aura une solution, merci d'avance. http://www.carpetdiem.netPlugins pour AutoCAD
(gile) Posté(e) le 25 juin 2009 Posté(e) le 25 juin 2009 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
(gile) Posté(e) le 26 juin 2009 Posté(e) le 26 juin 2009 J'ai un peu modifié le code pour qu'il soit plus lisible et ajouté quelques commentaires. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
coyotte Posté(e) le 27 juin 2009 Auteur Posté(e) le 27 juin 2009 Merci gile, je vais enfin pouvoir avancer un petit peu ;) http://www.carpetdiem.netPlugins pour AutoCAD
coyotte Posté(e) le 29 juin 2009 Auteur Posté(e) le 29 juin 2009 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.netPlugins pour AutoCAD
(gile) Posté(e) le 29 juin 2009 Posté(e) le 29 juin 2009 Salut, Je ne pense pas que ça vienne du code donné plus haut, il ne fait que créer un fenêtre dans chaque présentation et ne s'occupe pas de supprimer quoi que ce soit. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant