Aller au contenu

Olivier Eckmann

Membres
  • Compteur de contenus

    2 348
  • Inscription

  • Dernière visite

  • Jours gagnés

    119

Tout ce qui a été posté par Olivier Eckmann

  1. Olivier Eckmann

    cadre image

    Bonjour, OLEFRAME pour les objets OLE Olivier
  2. Bonjour, elle vérifie si le menu partiel Covadis est chargé, sinon elle charge le CUIX correspondant, puis elle replace les menus déroulants Covadis en position 10 à 14 ou 12 à 16 si Autopiste est chargé en plus. Olivier
  3. Bonjour, Je dispose d'une connexion FDO sur une couche de polygone. Chaque polygone possède un champ qui est sensé être unique, mais suite à des découpages, j'ai parfois des polygones différents qui ont cette même info. Le but est de détecter (localiser) le(s) polygone(s) qui a(ont) une valeur de champ commune avec un autre polygone. Je peux afficher la table, trier sur cette colonne et regarder si 2 lignes qui se suivent ont la même info, je peux aussi exporter tout ça sous Excel et faire une macro qui colorie les cellules identiques, mais directement sous MAP, je ne vois pas comment monter une thématique (requête) qui dépende de l'analyse de plusieurs objets (d'une même couche) entre eux. Si quelqu'un a une idée ou juste une piste. Merci Olivier
  4. Bonjour, à la ligne de commande, taper COVAINITMENU Olivier
  5. Olivier Eckmann

    poesi 2014

    Bonjour, des rimes en OSE il y en a beaucoup, mais dès que tu ajoutes le R, ça se complique pour trouver des rimes en oRze. Quatorze, soixante-quatorze et quatre-vingt-quatorze la ville de Gorze à côté de Metz. Après je ne vois pas Olivier
  6. Effectivement sur le HP500, tu as 16Mo interne En ajoutant la carte HPGL2, tu récupères 16Mo (soudé dessus) et un slot supplémentaire qui ne peut recevoir au maxi qu'une barette de 128Mo. Olivier
  7. --> titi95 Je suis un fervent défenseur du ruban surtout dans sa version "onglet contextuel", même si 90% des commandes courantes sont en raccourci clavier pour moi (débuté sous AutoCAD 11, ça laisse des traces). Je pense qu'en terme d'efficacité, le plus rapide correspond à ce que tu connais et fait rapidement les yeux fermés sans chercher. Pour avoir vu travailler des utilisateurs avec une tablette 30*30 et cliquer dans les cases sans regarder, plus les 16 boutons personnalisés, même avec mon clavier j'avais du mal à suivre. Olivier
  8. <HUMOUR ON>Juste une petite question : est-ce qu'on est réellement plus productif avec un joli ruban, 12 onglets et 250 boutons dont 240 ne servent qu'une fois par an et en plus celui dont tu as besoin tu le cherches 10 minutes... A cela on ajoute les notifications de mail qui arrivent, le téléphone portable qui sonne toutes les 5 minutes... Je crois que je rentre doucement dans la catégorie des vieux croûtons qui pensaient que c'était toujours mieux avant... <HUMOUR OFF> Olivier
  9. Bonjour, avec l'outil d'extraction de données tu peux générer un fichier CSV contenant tous les X Y et Z. Ensuite sous Excel tu doubles tes colonnes (pour avoir une fois X Y Z comme point d'insertion, puis une fois comme valeur d'attribut) et tu suis la procédure postée par Le Crabe le 6 décembre dans ce forum Sinon avec les annotations de MAP c'est plus rapide, mais il faut un peu jongler avec les gabarits d'annotation et le lisp pour arrondir les valeurs, mais l'étiquette obtenue est dynamiquement liée au point. Olivier
  10. Merci Gilles d'avoir pris le temps de vérifier ce problème. Comme on travaille sur des versions 2007 à 2012, je suis un peu obligé de prévoir les différents cas. Je vais m'arranger autrement pour créer mes calques, et contrôler plus finement les erreurs sur mes transactions pour les calques. Olivier
  11. Bonjour, Sur le blog des développeurs ADN, cet article proposait d'utiliser les paramètres pour retrouver les sommets d'une polyligne. Dans les commentaires il y avait une discussion sur le risque a utiliser cette solution car elle enfreignait la règle théorique qui stipule que les paramètres sont complètement opaques il qu'il ne faut faire aucune supposition quant à leur réalité (sur une polyligne, le premier point à le paramètre 0 et les points suivants 1, 2...). Même si cette méthode fonctionne depuis toujours sur les polylignes, c'est peut-être plus risqué que de balayer la liste des code 10 sur une poly2D? Olivier
  12. J'ai la haine. Le problème se pose sous AutoCAD MAP 2007, MAP 2008 (peut-être MAP 2009) mais plus à partir de MAP 2010. Si quelqu'un a une solution pour faire fonctionner ça sur une version d'AutoCAD 2008 (ou 2007), je suis preneur. Merci Olivier
  13. J'avance doucement, mais ça m'inquiète un peu. Je suis reparti des exemples fournies dans l'aide AutoCAD .Net et j'ai le même plantage avec l'exemple fourni: using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Geometry; using Autodesk.AutoCAD.Colors; [CommandMethod("SetLayerColor")] public static void SetLayerColor() { // 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 Layer table for read LayerTable acLyrTbl; acLyrTbl = acTrans.GetObject(acCurDb.LayerTableId, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForRead) as LayerTable; // Define an array of layer names string sLayerName = "CENTER"; // Add or change each layer in the drawing LayerTableRecord acLyrTblRec; if (acLyrTbl.Has(sLayerName) == false) { acLyrTblRec = new LayerTableRecord(); // Assign the layer a name acLyrTblRec.Name = sLayerName; // Upgrade the Layer table for write if (acLyrTbl.IsWriteEnabled == false) acLyrTbl.UpgradeOpen(); // Append the new layer to the Layer table and the transaction acLyrTbl.Add(acLyrTblRec); acTrans.AddNewlyCreatedDBObject(acLyrTblRec, true); } else { // Open the layer if it already exists for write acLyrTblRec = acTrans.GetObject(acLyrTbl[sLayerName], Autodesk.AutoCAD.DatabaseServices.OpenMode.ForWrite) as LayerTableRecord; } // Set the color of the layer acLyrTblRec.Color = Autodesk.AutoCAD.Colors.Color.FromColorIndex(Autodesk.AutoCAD.Colors.ColorMethod.ByAci, 1); // Save the changes and dispose of the transaction acTrans.Commit(); } } [CommandMethod("SetLayerLinetype")] public static void SetLayerLinetype() { // 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 Layer table for read LayerTable acLyrTbl; acLyrTbl = acTrans.GetObject(acCurDb.LayerTableId, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForRead) as LayerTable; string sLayerName = "CENTER"; LayerTableRecord acLyrTblRec; if (acLyrTbl.Has(sLayerName) == false) { acLyrTblRec = new LayerTableRecord(); // Assign the layer a name acLyrTblRec.Name = sLayerName; // Upgrade the Layer table for write acLyrTbl.UpgradeOpen(); // Append the new layer to the Layer table and the transaction acLyrTbl.Add(acLyrTblRec); acTrans.AddNewlyCreatedDBObject(acLyrTblRec, true); } else { acLyrTblRec = acTrans.GetObject(acLyrTbl[sLayerName], Autodesk.AutoCAD.DatabaseServices.OpenMode.ForRead) as LayerTableRecord; } // Open the Layer table for read LinetypeTable acLinTbl; acLinTbl = acTrans.GetObject(acCurDb.LinetypeTableId, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForRead) as LinetypeTable; if (acLinTbl.Has("CACHE") == true) { // Upgrade the Layer Table Record for write acLyrTblRec.UpgradeOpen(); // Set the linetype for the layer acLyrTblRec.LinetypeObjectId = acLinTbl["CACHE"]; } // Save the changes and dispose of the transaction acTrans.Commit(); } } La première commande crée un calque nommé CENTER et lui affecte la couleur ROUGE La seconde commande affecte le type de ligne CACHE au calque CENTER Je démarre un dessin vierge, je charge le type de ligne CACHE. Je lance les fonctions SetLayerColor puis SetLayerLinetype => OK ça crée un calque CENTER couleur ROUGE et type de ligne CACHE Je lance la commande PURGER et je purge le calque CENTER Je relance les fonctions SetLayerColor =>OK puis SetLayerLinetype => Erreur eWasErase Ça me rassure, je ne suis pas complètement fou, mais ça ne fait pas avancer le schmilblic! Olivier
  14. Merci pour le retour, je m'étais inspiré de certains morceaux de code du blog de Kean Walmsley qui utilisait cette syntaxe // Now let's create the leader itself Transaction tr = db.TransactionManager.StartTransaction(); using (tr) { try { BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead); BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[blockTableRecord.ModelSpace], OpenMode.ForWrite); // Add the MText MText mt = new MText(); mt.Contents = "Leader with the \"" + arrowName + "\" arrow head"; mt.Location = endPt; ObjectId mtId = btr.AppendEntity(mt); tr.AddNewlyCreatedDBObject(mt, true); // Add the Leader Leader ld = new Leader(); ld.AppendVertex(startPt); ld.AppendVertex(endPt); btr.AppendEntity(ld); tr.AddNewlyCreatedDBObject(ld, true); ld.Annotation = mtId; ld.Dimldrblk = arrId; tr.Commit(); } catch { tr.Abort(); } } Ceci dit j'ai toujours mon problème de manipulation des calques après la commande PURGER. - je démarre un dessin vierge: - je lance mon programme (il ne fait que créer un calque et lui affecter la couleur 2) AddLayer("toto"); SetColorLayer("toto", 2); ça fonctionne. - je purge le calque que je viens de créer (commande purger d'AutoCAD) - je relance le programme la création du calque se fait avec la couleur 7 et ça échoue à l'affectation de la couleur. J'ai toujours eWasErased comme Autodesk.AutoCAD.Runtime.Exception public static void SetColorLayer(string sLayerName, int iColorIndex) { Document acDoc = Application.DocumentManager.MdiActiveDocument; Database acCurDB = acDoc.Database; Editor acEd = acDoc.Editor; // Vérifie que le nom du calque est correct if (string.IsNullOrEmpty(sLayerName)) return; // Vérifie que la couleur est [1,255] if (iColorIndex <= 0 || iColorIndex >= 256) return; // Vérifie que le calque existe using (Transaction tr = acCurDB.TransactionManager.StartTransaction()) { try { LayerTable acLayTbl = (LayerTable)tr.GetObject(acCurDB.LayerTableId, OpenMode.ForRead); //Vérifie si le calque existe if (acLayTbl.Has(sLayerName)) { LayerTableRecord acLayTblRec = (LayerTableRecord)tr.GetObject(acLayTbl[sLayerName], OpenMode.ForWrite); acLayTblRec.Color = Color.FromColorIndex(ColorMethod.ByAci, (short)iColorIndex); } tr.Commit(); } catch (Autodesk.AutoCAD.Runtime.Exception err) { acEd.WriteMessage("\n" + err.Message); } // } } Je n'y comprends plus rien. Merci Olivier
  15. Bon, ça n'a rien avoir avec le verrouillage du document. En fait avant de lancer ma fonction, je faisais une Purge de mes calques et dans ce cas, au niveau de la DB, le calque existe mais il est marqué Erased, donc l'affectation d'une couleur à un calque qui existe mais a été supprimé génère l'erreur. Olivier
  16. Bonjour, Dans ma solution C#, j'ai : - un projet qui contient des fonctions génériques de manipulation des calques : Ajout d'un calque, Affectation d'une couleur à un calque ... public static void AddLayer(string sLayerName) { Document doc = Application.DocumentManager.MdiActiveDocument; Database db = doc.Database; // Vérifie que le nom du calque est correct if (string.IsNullOrEmpty(sLayerName)) return; using (Transaction tr = db.TransactionManager.StartTransaction())[/size] { LayerTable ltb = (LayerTable)tr.GetObject(db.LayerTableId, OpenMode.ForRead); try { //create a new layer. if (!ltb.Has(sLayerName)) { ltb.UpgradeOpen(); // Nouveau calque LayerTableRecord newLayer = new LayerTableRecord(); // Nom du calque newLayer.Name = sLayerName; ltb.Add(newLayer); tr.AddNewlyCreatedDBObject(newLayer, true); } tr.Commit(); } catch { tr.Abort(); } } } public static void SetColorLayer(string sLayerName, int iColorIndex) { Document acDoc = Application.DocumentManager.MdiActiveDocument; Database acCurDB = acDoc.Database; // Vérifie que le nom du calque est correct if (string.IsNullOrEmpty(sLayerName)) return; // Vérifie que la couleur est [1,255] if (iColorIndex <= 0 || iColorIndex >= 256) return; // Vérifie que le calque existe[/size] using (Transaction tr = acCurDB.TransactionManager.StartTransaction()) { try { LayerTable acLayTbl = (LayerTable)tr.GetObject(acCurDB.LayerTableId, OpenMode.ForRead); //Vérifie si le calque existe if (acLayTbl.Has(sLayerName)) { LayerTableRecord acLayTblRec = (LayerTableRecord)tr.GetObject(acLayTbl[sLayerName], OpenMode.ForWrite); acLayTblRec.Color = Color.FromColorIndex(ColorMethod.ByAci, (short)iColorIndex); } tr.Commit(); } catch { tr.Abort(); } } } - un projet avec un dialogue Modeless qui appelle ces fonctions sur un clic de bouton using (DocumentLock lk = _doc.LockDocument()) { AddLayer("TOTO"); SetColorLayer("TOTO", 3); } Le problème, c'est que le AddLayer se passe bien (a priori), mais que dans le SetColorLayer, je passe bien dans le test (acLayTbl.Has(sLayerName)) car l'entrée existe bien, mais lorsque j'essaie d'ouvrir en mode ForWrite mon LayerTableRecord je passe dans le Catch avec le message eWasErased. Si mon dialogue est Modal ou si je rajoute dans mes fonctions de gestion de calque un verrouillage de mon Document, ça fonctionne. Ce que je ne comprends pas c'est pourquoi avec mon document verrouillé avant l'appel de la fonction, il n'est plus verrouillé à l'intérieur. Merci Olivier
  17. Bonsoir, Ce ne sont pas des logiciels séparés, ils doivent être utilisé sur un seul et même poste. Olivier
  18. Bonjour, c'est un peu plus compliqué sur Civil, car il y a la version du DWG bien sûr, mais surtout, il y a la version des objets Civil. Par ex un profil en long fait avec un Civil 2014 c'est une version 2014 de l'objet (quelque soit le format du DWG utilisé, les infos stockées sur cet objet sont déclarées en version 2014) et un Civil 2012 lorsqu'il rencontre un objet marqué version 2014 (en tout cas supérieure à 2012) il ne sait pas quoi en faire donc il l'ignore. Une solution, c'est l'export via LandXML, puis rechargement du Landxml dans Civil 2012. Mai sil faut reconstruire les objets qui doivent être dynamiquement liés, car les méthodes de construction et les liens entre objets sont perdus dans le LandXML. SI le Civil 2014 est sous souscription, il faut installer Civil 2012 (autorisé par la souscription) et travailler avec les 2 PC en version identique. Olivier
  19. Olivier Eckmann

    Raccouci pourri

    Bonjour, En fait avant de commencer, je n'étais pas sûr que cela fonctionne. Le plus difficile est de trouver la DLL ou l'ARX qui contient le dialogue. J'avais déjà utilisé un éditeur de ressource pour traduire un logiciel. Ça peut aussi être utile lorsque les boutons ou les champs de saisie ne sont pas assez larges dans un dialogue. A partir du moment où tu fais une copie de sauvegarde du fichier modifié et que tu le restaures avant de rendre ton matériel, tu ne prends aucun risque. Concernant la traduction, je ne jetterai pas la pierre à Autodesk, car c'est une tâche difficile. Pour nous qui parlons Français, quand on traduit en anglais, les termes sont presque toujours moins bavards (donc plus court) et on est sûr que ça rentre dans les boutons ou la place prévue. Quand tu conçois ton interface en anglais et qu'ensuite c'est traduit dans 30 ou 40 langues, il n'est pas facile d'imaginer la place occupée par le mot ou la phrase une fois traduite. Les accents sont en plus très mal appréhendés pour les anglophones. Ceci dit, les ressources d'Autodesk devraient leur permettre d'éviter au maximum ces soucis. Olivier
  20. Olivier Eckmann

    Blocs en pieds

    En fait à partir d'AutoCAD, tu as tous les produits verticaux MAP, Civil, Architecture... Chacun avec ses propres modules, mais comme c'est de plus en plus imbriqué, certains modules sont présents dans les versions simples et ces modules si à l'ouverture d'un DWG, ils détectent un objet (dictionnaire) qu'ils connaissent alors ils se chargent et fournissent des infos à AutoCAD comme l'unité de dessin et de manière prioritaire à l'info stockée dans AutoCAD simple. Normalement, les modules de Civil sont AECC (noté les 2 C) alors que les modules Architecture sont AEC, Connaissant Civil et sachant qu'il peut générer de tel problème sur les échelles, j'ai supposé qu'il pouvait être en cause. Ne connaissant pas AutoCAD Architecture (je ne sais pas s'il y a une notion d'unité autre que celle d'AutoCAD), il est aussi possible que ça vienne de ses modules. Olivier
  21. Olivier Eckmann

    Blocs en pieds

    Bonjour, Est-ce que tu ouvrirais ce dessin sous AutoCAD MAP, au lieu d'AutoCAD seul? Si oui, à l'ouverture on constate le chargement des modules AEC, donc je pense que le gabarit a été passé sous Civil 3D et que Civil 3D lui a collé une échelle en pied. La seule méthode trouvée jusqu'à présent est de réouvrir sous Civil et de réaffecter l'unité Metre pour que ça rentre dans l'ordre. A moins qu'un AutoCAD seul qui ne chargerait pas les modules AEC plus un passage de JAV pour détruire les dictionnaires AEC suffisent, mais je ne suis pas sûr. Désolé, je n'ai pas de Civil sous la main, mais si Patrice ou Laurent passe par là, il devrait pouvoir te corriger ça . Olivier
  22. Bonsoir, dans le propriétés personnalisées du traceur, il y a un une option nommée "Calibration du traceur" qui permet d'appliquer un facteur d'échelle différentielle en X et Y pour corriger des éventuelles erreurs de calibration. On peut relancer l'assistant pour réinitialiser ces valeurs à 100% Olivier
  23. Olivier Eckmann

    Raccouci pourri

    Bonjour Didier, Effectivement j'utilise peu (pas) l'option fenêtre, mais plutôt présentation. Cependant, il est possible de modifier les boutons (texte affiché) donc les raccourcis associés. Il faut utiliser un éditeur de ressource comme ResHacker (gratuit) qui permet de modifier directement une DLL ou un EXE Une fois le logiciel installé, il faut ouvrir le fichier AcPltRes.DLL du dossier C:\Program\Autodesk\AutoCAD MAP 3D 2012. Une fois ouvert, tu déplies l'arborescence Dialog, puis 4509 puis 1036 et tu retrouves ton dialogue de tracé Sélectionnes le bouton Fenêtre et tu vois que le texte réel est Fen&être . Le signe & avant la lettre indique que c'est cette lettre qui sera soulignée et accessible par Alt. Tu remplaces la lettre ê par celle que tu veux pourvu qu'elle ne soit pas déjà utilisé par un autre texte, ou bien tu places le signe & avant la lettre que tu veux utiliser. Malheureusement toutes les lettres du mot Fenetre sont déjà utilisé par d'autres, il faut donc utiliser une autre lettre ou bien changer le & d'un autre mot. Je te joins le fichier DLL modifié dans lequel j'ai remplacé la lettre ê par z . c'est sûr que ça donne Fenztre c'est un peu bizarre, mais au moins en tapant Alt+z tu peux spécifier ta fenêtre ATTENTION, il s'agit de la version 64 bit de MAP 2012, NE PAS REMPLACER si tu es en 32bit Fais une copie de la DLL d'origine avant de la remplacer. Eventuellement, il faudra jouer avec les autorisations Windows pour pouvoir écrire dans le dossier d'install de MAP 2012 Olivier AcPltRes.zip
  24. Olivier Eckmann

    Raccouci pourri

    Bonjour, je ne vois pas trop où se trouve ton raccourci avec le ê . Chez moi pour lancer la commande de tracer, c'est soit ALT + F pour ouvrir le menu Fichier, puis C pour lancer la commande traCeur. On peut faire plus vite avec Ctrl+P Ensuite une fois dans le dialogue Tracer, les options sont activables avec des combinaisons Alt + Par ex Alt + . permet d'accéder au propriétés du traceur Alt + é pour Activer/Désactiver "Tracé avec bannière de tracé" ... Mais je ne vois nulle part un raccourci avec e accent circonflexe. J'utilise MAP 2012 Olivier
  25. Olivier Eckmann

    pdf et aplatissement

    Bonjour, De mémoire, c'est dû aux calques. As-tu essayé de produire un PDF sans calque? Sinon, je crois que c'est un réglage dans Acrobat Reader, dans les "Préférences", section "Protection (renforcée)" , il faut cocher "Activer le mode protégé au démarrage" Olivier
×
×
  • 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é