Aller au contenu

Goud

Membres
  • Compteur de contenus

    13
  • Inscription

  • Dernière visite

Tout ce qui a été posté par Goud

  1. Bonjour gile, Merci pour ta réponse ! J'avais en revanche une erreur du type ":eIllegalEntityType". J'ai juste du remplacer "owner.AppendEntity(attRef);" par "bloccotealti.AttributeCollection.AppendAttribute(attRef);" pour que cela fonctionne.
  2. Salut Gille, Oui je me suis justement inspiré de ce sujet pour la partie de modification de l'attribut. Mon programme est appelé depuis un bouton créé sur une palette (WPF) insérée. Si j'essaie d'insérer le bloc + modifier son attribut à partir du même bouton de la palette, cela donne le problème évoqué dans mon premier message. En revanche, si j'insère le bloc depuis un bouton puis j'essaie de modifier son attribut à partir d'un 2ème bouton, cela fonctionne correctement. Je me suis dis qu'il était possible de faire les deux sans passer par un second bouton.
  3. Bonjour à tous, J'aimerai modifier l'attribut d'un bloc précédemment importé d'un dwg extérieur. J'importe mon bloc : public void ajouterblocs() { // Get the current document and database Document acDoc = Application.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; Editor ed = acDoc.Editor; using (acDoc.LockDocument()) // Create a transaction for the current drawing using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) { BlockTable blkTbl = (BlockTable)acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead); if (!blkTbl.Has("COT-altimétrie")) { string blockQualifiedFileName = "C:/Users/antoi/Documents/GitHub/GenDet/GenDet/GenDet/blocs/cotealtimetrie.dwg"; Database tmpDb = new Database(false, true); tmpDb.ReadDwgFile(blockQualifiedFileName, System.IO.FileShare.ReadWrite, true, ""); IdMapping iMap = new IdMapping(); ObjectIdCollection ids = new ObjectIdCollection(); using (Transaction tr = tmpDb.TransactionManager.StartTransaction()) { BlockTable bt = (BlockTable)tr.GetObject(tmpDb.BlockTableId, OpenMode.ForRead); ids.Add(bt["COT-altimétrie"]); ids.Add(bt["COT-altimétrie-inf"]); tr.Commit(); } acCurDb.WblockCloneObjects(ids, acCurDb.BlockTableId, iMap, DuplicateRecordCloning.Ignore, false); } acTrans.Commit(); } } Ensuite, j'insère mon bloc dans le Model Space (cela marche) et j'essaie de modifier son attribut mais le "AttributeCollection" est vide : private void cotealti(Document acDoc, Database acCurDb, BlockTable blkTbl, BlockTableRecord btr, Transaction acTrans, double x, double y, double altimetrie, int inf) { BlockReference bloccotealti; if (inf == 1) bloccotealti = new BlockReference(new Point3d(x, y, 0), blkTbl["COT-altimétrie-inf"]); else bloccotealti = new BlockReference(new Point3d(x, y, 0), blkTbl["COT-altimétrie"]); using (bloccotealti) { bloccotealti.TransformBy(Matrix3d.Scaling(500, new Point3d(x, y, 0))); btr.AppendEntity(bloccotealti); acTrans.AddNewlyCreatedDBObject(bloccotealti, true); if (inf == 1) acDoc.SendStringToExecute("_.attsync Nom COT-altimétrie-inf" + "\n", true, false, true); else acDoc.SendStringToExecute("_.attsync Nom COT-altimétrie" + "\n", true, false, true); ObjectId arId = bloccotealti.AttributeCollection[0]; DBObject objetatt = acTrans.GetObject(arId, OpenMode.ForRead); AttributeReference ar = objetatt as AttributeReference; ar.UpgradeOpen(); ar.TextString = altimetrie.ToString(); ar.DowngradeOpen(); } } Je n'ai pas copié tout le code car il est très long et sans rapport avec le problème je pense. N'hésitez pas à me demander ce que j'ai oublié de préciser pour que vous puissiez, je l'espère, m'aider. Merci Edit : Lorsque je mets en commentaires la partie de modification de l'attribut, le bloc est bien inséré et je peux modifier son attribut manuellement.
  4. Salut gile, Merci de ta réponse, j'avais laissé un peu ce problème de côté.. Malheureusement ta solution d'utiliser les colonnes dans le texte multiligne ne permets pas l'alignement vertical des lignes (ou j'ai oublié quelque chose..). Je pense que la solution se trouve plutôt du côte du tableau, je reviens vers toi en cas de questions. Merci
  5. Bonjour, J'aimerai aligner verticalement 3 colonnes de textes sur un layout de présentation comme ceci : image La première colonne représente une liste de produit, la seconde le fournisseur et la dernière l'épaisseur. J'ai essayé de tout joindre dans un seul texte (MText) et manipuler la tabulation de chaque ligne en fonction de la longueur (longcount) de chaque string (Produit/Fournisseur etc..). Mais chaque lettre n'a pas la même largeur donc je me trouve souvent avec une erreur d'une tabulation. J'ai essayé de créer 3 MText pour faciliter l'alignement horizontal mais je n'arrive pas à gérer l'alignement vertical du aux accents qui agrandissent la hauteur de la ligne dans laquelle ils sont. image2 Auriez-vous une solution efficace ? Merci
  6. En effet, cela résout le problème. Merci gile
  7. Bonjour, Je bloque sur un problème très étrange ce matin, en effet j'essaie de créer une hachure de type AR-CONC dans une polyligne (fermée) mais cela ce fonctionne pas. Ce qui est étrange c'est que si je change AR-CONC par un autre type d'hachures (ANSI31, AR-B816, AR-HBONE) cela fonctionne très bien. Quelqu'un aurait-il une idée d'où peut venir ce problème ? using (Polyline pourhachure = new Polyline()) { pourhachure.AddVertexAt(0, new Point2d(14.5, 110), 0, 0, 0); pourhachure.AddVertexAt(1, new Point2d(79.5, 110), 0, 0, 0); pourhachure.AddVertexAt(2, new Point2d(79.5, 140), 0, 0, 0); pourhachure.AddVertexAt(3, new Point2d(14.5, 140), 0, 0, 0); pourhachure.Closed = true; btr.AppendEntity(pourhachure); acTrans.AddNewlyCreatedDBObject(pourhachure, true); ObjectIdCollection acObjIdColl = new ObjectIdCollection(); acObjIdColl.Add(pourhachure.ObjectId); using (Hatch acHatch = new Hatch()) { btr.AppendEntity(acHatch); acTrans.AddNewlyCreatedDBObject(acHatch, true); // Set the properties of the hatch object // Associative must be set after the hatch object is appended to the // block table record and before AppendLoop acHatch.SetHatchPattern(HatchPatternType.PreDefined, "AR-CONC"); acHatch.PatternScale = 0.07; acHatch.Associative = false; acHatch.AppendLoop(HatchLoopTypes.Outermost, acObjIdColl); acHatch.EvaluateHatch(true); } } Merci
  8. En effet le terme WPF n'a pas lieu d'être, je le retire. Je ne comprends pas, j'avoue avoir essayé une grande partie de la journée d'hier et je me rends compte ce matin que List<MText> marche très bien. Cela résout donc mon problème. Désolé pour ce post peu pertinent encore une fois. Merci gile pour cette rapidité.
  9. Bonjour à tous, Est-il possible de créer une liste d'objets de type MText ? J'aimerai créer un certain nombre d'objets de type MText en fonction d'une variable (type int) et les ajouter à une BlockTableRecord. Le problème est que je n'ai pas trouvé de possibilité d'avoir une variable dans le nom de l'objet de type MText ou la possibilité de créer une liste d'objets de type MText (d'où le titre List<T> avec T = MText mais je me doutais qu'il y avait peu de chance que ça marche...). Avez-vous une solution à ce problème ? En espérant avoir été plus clair que sur les précédents posts.. Merci :)
  10. Merci gile, Je cherchais justement à me renseigner sur la programmation orientée objet. Je vais commencer par la documentation Autodesk que tu as partagé. Merci
  11. Bonjour à tous, Existe-t-il une base de données des objets (type texte, image, etc...) créés sur Autocad récupérable et modifiable ? En recherchant manuellement à l'aide de ObjectIdCollection idCol = new ObjectIdCollection(); en mode Déboguer j'ai aperçu quelques données (ex : Summaryinfo, infos paperspace, etc...) mais pas tout : notamment tous les autres objets (textes, lignes..). Y a t'il qu'un certain nombre d'objets dont on peut modifier les propriétés ? Si oui, est ce qu'il existe une alternative ? Merci
  12. Merci beaucoup gile pour cette réponse détaillée ! Oui j'ai vu que Ctrl+K ne marchait pas pour mettre en format code..
  13. Bonjour à tous, J'essaie de créer ma propre extension (.dll) sur Autocad en utilisant C# WPF. Pour l'instant je fais des tests assez basiques en insérant une palette WPF sur Autocad et j'essaie de créer des lignes automatiquement à partir du C# mais lors de la "création" de ligne, Autocad me met une erreur fatale.. "ERREUR FATALE: Unhandled e0434352h Exception at d23aa388h" Sur internet, j'ai aperçu que ça pouvait venir de ma carte graphique (Nvidia GeForce GTX 1060) et que le pilote ne soit pas à jour mais elle est bien à jour et sur le site d'Autocad elle n'est pas répertoriée.. Command.cs : using System.Windows.Forms; using System.Windows.Forms.Integration; using Autodesk.AutoCAD.Windows; using Autodesk.AutoCAD.Runtime; namespace ClassLibrary1 { public class Commands { static PaletteSet _ps = null; [CommandMethod("wpf")] public void ShowWPFPalette() { if (_ps == null) { // Create the palette set _ps = new PaletteSet("WPF Palette"); _ps.Size = new System.Drawing.Size(400, 600); _ps.DockEnabled = (DockSides)((int)DockSides.Left + (int)DockSides.Right); // Create our user control instance and host it in an ElementHost, which allows interop between WinForms and WPF UserControl1 uc = new UserControl1(); ElementHost host = new ElementHost(); host.AutoSize = true; host.Dock = DockStyle.Fill; host.Child = uc; _ps.Add("Add ElementHost", host); } // Display our palette set _ps.KeepFocus = true; _ps.Visible = true; } } } UserControl1.xaml.cs: using System.Windows; using System.Windows.Controls; using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Geometry; using Application = Autodesk.AutoCAD.ApplicationServices.Application; namespace ClassLibrary1 { /// <summary> /// Logique d'interaction pour UserControl1.xaml /// </summary> public partial class UserControl1 : UserControl { public UserControl1() { InitializeComponent(); } public void ClickOK(object sender, RoutedEventArgs e) { string __S_NomProjet = _TB_NomProjet.Text; MessageBox.Show("Nom du projet : " + __S_NomProjet, "Nom Projet", MessageBoxButton.YesNo); } private void _B_BoutonCartouche_Click(object sender, RoutedEventArgs e) { // Get the current document and database Document acDoc = Application.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; // Start a transaction 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 Model space for write BlockTableRecord acBlkTblRec; acBlkTblRec = acTrans.GetObject(acBlkTbl[blockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; // Create a line that starts at 5,5 and ends at 12,3 using (Line acLine = new Line(new Point3d(5, 5, 0), new Point3d(12, 3, 0))) { // Add the new object to the block table record and the transaction acBlkTblRec.AppendEntity(acLine); acTrans.AddNewlyCreatedDBObject(acLine, true); } // Save the new object to the database acTrans.Commit(); } } } } Merci !
×
×
  • 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é