Aller au contenu

Messages recommandés

Posté(e)

Salut,

 

J'aurais besoin de savoir à partir de quelle version la fonction dotNET DrawLineTypePattern existe.

 

Je sais qu'elle n'est pas présente dans le SDK .NET de 2007 mais qu'elle est dans celui de 2010 et je n'ai à disposition que ces deux versions pour tester.

 

Il faudrait donc charger (NETLOAD) LinetypeDisplay.dll dans AutoCAD 2008 et/ou 2009 et lancer la commande TEST pour voir si dans la boite de dialogue la colonne "Présentation" est remplie ou non.

 

Avec 2007

http://img28.imageshack.us/img28/8426/linetype17.png

 

Avec 2010

http://img36.imageshack.us/img36/7373/linetype18.png

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

Posté(e)

Je donne le code pour ceux que ça intéresse (la propriété OwnerDraw du contrôle ListView doit être true)

 

using System;
using System.Drawing;
using System.Windows.Forms;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Internal;
using Autodesk.AutoCAD.Runtime;

namespace LinetypesDisplay
{
   public partial class Form1 : Form
   {
       public Form1()
       {
           InitializeComponent();
       }

       private void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
       {
           e.DrawDefault = true;
       }

       private void listView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
       {
           Database db = HostApplicationServices.WorkingDatabase;
           if (e.ColumnIndex == 1)
           {
               Rectangle rect = e.Bounds;
               rect.Location = new Point(0, 0);
               using (Transaction tr = db.TransactionManager.StartTransaction())
               {
                   LinetypeTable ltt =
                       (LinetypeTable)tr.GetObject(db.LinetypeTableId, OpenMode.ForRead);
                   string ltName = e.Item.Text;
                   IntPtr iPtr =
                       Utils.DrawLineTypePattern(ltt[ltName], rect.Left, rect.Top, rect.Right, rect.Bottom);
                   System.Drawing.Image img = System.Drawing.Image.FromHbitmap(iPtr);
                   e.Graphics.DrawImage(img, e.Bounds.Location);
               }
           }
           else
               e.DrawDefault = true;
       }

       [CommandMethod("test")]
       public void test()
       {
           this.listView1.Items.Clear();
           Database db = HostApplicationServices.WorkingDatabase;
           using (Transaction tr = db.TransactionManager.StartTransaction())
           {
               LinetypeTable ltt =
                   (LinetypeTable)tr.GetObject(db.LinetypeTableId, OpenMode.ForRead);
               foreach (ObjectId id in ltt)
               {
                   LinetypeTableRecord lttr =
                       (LinetypeTableRecord)tr.GetObject(id, OpenMode.ForRead);
                   string ltName = lttr.Name;
                   ListViewItem lvi = new ListViewItem(
                       new string[] { lttr.Name, string.Empty, lttr.AsciiDescription });
                   this.listView1.Items.Add(lvi);
               }
           }
           this.ShowDialog();
       }
   }
}

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

Posté(e)

Bonsoir à toutes et tous,

 

Salut Gilles,

 

Dans ton premier message, tu as oublié le lien,...

 

J'ai alors copier le code du second message et enregistré sous"LinetypeDisplay.dll"

 

Voilà ce que me retourne AutoCAD (V2008 pleine)

 

Commande: netload

Impossible de charger l'assemblage. Détails de l'erreur:

System.BadImageFormatException: Impossible de charger le fichier ou l'assembly

'file:///C:\Users\Lilian\Desktop\LinetypeDisplay.dll' ou une de ses

dépendances. Le module était censé contenir un manifeste de l'assembly.

Nom du fichier : 'file:///C:\Users\Lilian\Desktop\LinetypeDisplay.dll'

à System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase,

Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark,

Boolean throwOnFileNotFound, Boolean forIntrospection)

à System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase,

Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark,

Boolean throwOnFileNotFound, Boolean forIntrospection)

à System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence

assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)

à System.Reflection.Assembly.InternalLoadFrom(String assemblyFile, Evidence

securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm,

Boolean forIntrospection, StackCrawlMark& stackMark)

à System.Reflection.Assembly.LoadFrom(String assemblyFile)

à Autodesk.AutoCAD.Runtime.ExtensionLoader.Load(String fileName)

à loadmgd()

AVT : le journal de liaison d'assembly est désactivé.

Pour activer le journal des échecs de liaison d'assembly, attribuez la valeur 1

à la valeur de Registre [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD).

Remarque : une certaine perte de performance est associée à l'enregistrement

dans le journal des échecs de liaison d'assembly.

Pour désactiver cette fonctionnalité, supprimez la valeur de Registre

[HKLM\Software\Microsoft\Fusion!EnableLog].

Commande: Spécifiez le coin opposé: teqt

Spécification de fenêtre non valable.

Spécifiez le coin opposé: Spécifiez le coin opposé: *Annuler*

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Posté(e)

Salut Lilian,

 

Merci pour ton empressement et ta disponibilité.

J'ai mis le lien dans mon premier message.

 

Une dll dotNET ne se crée pas en copiant le code source dans un fichier texte. Il faut compiler le code avec un compilateur comme celui de Visual Studio par exemple. C'est plus complexe que du LISP...

 

Je donne le code pour ceux qui pratiquent la programmation .NET.

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

Posté(e)

Oupss!...

 

La routine traite tous les types de ligne sauf ByBlock, ByLayer et Continuous. Ça expliquerait que tout soit vide...

 

À refaire donc, sur un fichier qui contient quelques types de lignes chargés ou avec la nouvelle DLL (j'ai changé le lien).

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

Posté(e)

hello gile

 

tjrs impossible de telecharger un fichier *.zip venant de chez toi

 

ca va devenir embetant

 

je vais tester sur AA2011 avec le fichier texte comme l'a fait lilian

 

donc ca ne vas pas et cane marche pas

pas de compilateur sous la main

 

a+

 

phil

 

[Edité le 22/5/2010 par PHILPHIL]

FREELANCE

Autodesk Architecture 2025 sous windows 11 64

REVIT

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Posté(e)

hello

 

merci lilian

j'ai pu télécharger le *.DLL

 

j'ai la meme chose que l'image de lilian sous A2011 avec AA2011

 

a+

 

phil

FREELANCE

Autodesk Architecture 2025 sous windows 11 64

REVIT

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Posté(e)
T'as vu c'est bizarre les infos ne se présentent pas de la même façon suivant les versions !

 

C'est justement ce qui m'intéresse.

Les colonnes "Type de ligne " et "Description" affichent ce qu'on peut trouver dans le fichier acadiso.lin* (propriétés Name et AsciiDescription en .NET).

Ces données sont identiques quelle que soit la version.

 

La colonne "Présentation" affiche l'image crée par la méthode .NET DrawLineTypePattern qui n'est pas fournie avec les version 2007 et 2008 (c'est pour ça que les colonnes sont vides) mais qui l'est avec 2010 et 2011.

Cette méthode permet de créer une image qui montre l'apparence du type de ligne à partir de sa définition.

Les images dans mon premier message ont été faites sur un fichier provenant d'ArchiCAD ou de VectorWorks, les descriptions ne sont pas reconnues, mais l'apparence du type de ligne est peut être recréé.

 

Je cherche à savoir à partir de quelle version cette méthode est utilisable (2009 ou 2010) pour écrire mon programme en conséquence.

 

* exemple extrait de acadiso.lin pour EAU_CHAUDE :

*EAU_CHAUDE,Eau chaude ---- HW ---- HW ---- HW ----

A,12.7,-5.08,["HW",STANDARD,S=2.54,R=0.0,X=-2.54,Y=-1.27],-5.08

 

Le nom du type de ligne apparait sue la première ligne après l'astérisque et il est séparé de la description par une virgule.

sur la seconde ligne, c'est la définition du type de ligne.

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

Posté(e)

Merci PHILPHIL.

 

Ce qui m'intéresserait vraiment maintenant, c'est un test sur 2009 (même si je soupçonne que ça fonctionne comme sur 2010/2011).

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

Posté(e)

Salut (gile),

 

Pour 2008, comme lili2006, la colonne de présentation et vide.

 

Autre remarque, si je relance TEST, les informations dans la boite sont affichés de manière répétitive et ce autant de fois que je relance la commande.

 

Pour 2009, je pourrais tester dans 2 ou 3 jours... si tu n'a pas de retour d'ici là!

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Merci,

 

Autre remarque, si je relance TEST, les informations dans la boite sont affichés de manière répétitive et ce autant de fois que je relance la commande.

 

Oui, ce code n'a été écrit vite fait que test, il manque un :

this.ListView1.Items.Clear();

pour vider le contrôle avant de le remplir à nouveau.

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

Posté(e)

Merci rom1_am,

 

Je suis un peu étonné que ça ne fonctionne pas avec 2009, parce que la méthode DrawLinetypePattern() est bien présente l'assembly acmgdinternal.dll de 2009, je dois faire quelque chose de travers...

 

http://img401.imageshack.us/img401/886/dltp.png

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

Posté(e)

Rebonjour,

 

Je peux pas t'aider car ça dépasse mes compétences, mais j'ai bien la dll acmgdinternal (version 17.2.56.0) dans le répertoire d'AutoCAD2009 et lorsque j'ajoute cette dll en référence dans un projet Visual studio, j'ai bien accès à cette fonction Drawlinetypepattern.

 

En espérant que cela puisse te donner des pistes...

_______________________________

R.A.

Développeur AutoCAD C#.net

www.danialu.fr

Posté(e)

Re,

 

Il semble que cela n'ai pas fonctionné dans précédent post.

 

donc sous autocad 2009 cela ne donne rien.

 

http://www.hiboox.fr/go/images/informatique/nouvelle-image,5d94a0bbe0c0c477f405b28c3a1be685.jpg.html

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é