Aller au contenu

Création de calques depuis un classeur Excel...


DenisHen

Messages recommandés

Citation

je cherche juste à ouvrir un DXF (comme un TXT via un Open tout simplement) en VBA et fouiller son contenu pour en sortir la liste des types de ligne définis dans ce DXF. je pense avoir trouvé un truc, chercher les "AcDbLinetypeTableRecord", code DXF 2...

C'est la base d'ouvrir / editer / creer des txt en vba !

donc rattrape le temps perdu avec ce tuto :

https://warin.developpez.com/access/fichiers/#LII

Lien vers le commentaire
Partager sur d’autres sites

Mille mercis @Curlygoth, ça je sais faire...
Ce que je cherchais, c'était le "AcDbLinetypeTableRecord" et le code DXF = 2...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Regarde le format d'un DXF, il n'y a qu'une seule donnée par ligne, et c'est regroupé par "entête"...
Et en plus, parfois, il y a parfois jusqu'à trois espaces avant la donnée, mais avec un Trim, ça devrait aller...
Ce n'est pas si facile que ça, enfin pour moi... 
Mais ce n'est pas extraordinairement compliqué non plus...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Bon, je viens de tombé que un os...
Je ne sais pas où commence et où termine la définition des types de ligne dans un fichier DXF...
Il y a des "ENDTAB" partout...
Je vois aussi que les codes DXF ne sont pas triés, j'ai un 2, puis un 70 puis un 63, pour la même définition...
J'ai vu aussi que, je ne sais pas pourquoi, il est définit, dans un fichier DXF, les styles de cote, les types de lignes, les styles de texte...
Mais pas toujours dans le même ordre, si on regarde dans un autre DXF, ou parfois par un autre AutoCAD ou un autre logiciel...
Je fouilles plusieurs DXF, mais un dessin vide peut contenir plusieurs millier de lignes ! ! !

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

et tu as effectivement les définition de ligne ! je l'ai ai trouver ! tu as effectivement

"AcDbLinetypeTableRecord" & chr(10) & "  " &  2

il faut traiter entre ça et l'autre defintion qui est la suite !

les caractères entre les données faut juste les enlever et trim c'est pour les espaces

travaille en array

je te conseil de creer une ligne ou tu connais la definition et ensuite regarder comment est generer le dxf pour comprendre comment extraire le(s) type(s) de ligne(s)

(ca marche)

Lien vers le commentaire
Partager sur d’autres sites

Merci @(gile)vraiment, sincèrement, tu es d'une aide tellement immense (et d'une grande patience aussi...)...
Et je ne voulais pas faire mon lourdaud... C'est juste que j'ai découverts que la structure d'un DXF n'est pas la même partout, malgré qu'elle suive un ordre précis...
Mais je viens de comprendre un truc (car j'ai relus ton raccourcis, encore une fois), les "noms" des définitions d'entités sont toujours en amont de la définition.
Je m'explique : 
La définition d'un type de ligne va toujours débuter par "AcDbLinetypeTableRecord", et après, la définition d'un type de ligne...
Effectivement, après avoir relu et relu et relu ton raccourcis (car je me remets toujours en doute lorsque qu'un gars qui sait insiste), j'ai vu que c'est systématique, dans le fichier DXF, et d'après ce que j'ai compris, il y a : 
"
AcDbLinetypeTableRecord" Définition d'un type de ligne,
 Codes DXF qui suivent définissent ce type de ligne (parfois dans le désordre),
Jusqu'au prochain "
AcDbLinetypeTableRecord", qui donnera une autre définition, d'un autre type de ligne...
En gros, je pense que les définitions sont par bloque, par pavés... Ce que je pense avoir compris maintenant...

Ai-je bon ? Ou je n'ai encore rien compris...

Mais je n'ai pas trouvé où s'arrête la définition courante...

En tous cas, je ne peux que te remercier de toute ta patience... Envers un mec probablement limité...

Encore une fois, mille mercis...

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Mille mercis @Curlygoth pour ton aide.
Mais je pense avoir découverts pourquoi j'étais dans l'erreur...
Je posterais mon code VBA plus tard, pour qu'il puisse, éventuellement, être testé...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

il y a 1 minute, Curlygoth a dit :

oui tu as bon !

mais créer un type de ligne pour voir comment le dxf se genère et ensuite pouvoir le traité !!

et programmer en conséquence

C'est la seule et unique chose que j'ai faite, pour commencer à analyser le DXF issus de ce dessin "vierge"...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Donc, en fait... Si j'ai bien compris... Et ce n'est pas facile pour un cerveau comme le mien...
Je fouille le fichier DXF jusqu'à un "AcDbLinetypeTableRecord", ensuite, je cherche le code DXF 2, je lis la ligne suivante, contenant le nom du type de ligne, et ensuite, je cherche un autre "AcDbLinetypeTableRecord" mais pas un autre "AcDb*"...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Les lispeurs connaissent ça par cœur.
Il faut considérer les propriétés comme des paires : le code de groupe suivi de la valeur correspondante.
Chaque objet commence par un code de groupe 0 dont la valeur est le nom DXF de l'objet (pour un type de ligne : LTYPE).

Exemple :

  0
LTYPE
  5
2A8
330
5
100
AcDbSymbolTableRecord
100
AcDbLinetypeTableRecord
  2
AXES
 70
     0
  3
Centre ____ _ ____ _ ____ _ ____ _ ____ _ ____
 72
    65
 73
     4
 40
50.8
 49
31.75
 74
     0
 49
-6.349999999999999
 74
     0
 49
6.349999999999999
 74
     0
 49
-6.349999999999999
 74
     0

Doit être lu comme :
 

(0 . "LTYPE")                     => type d'entité
(5 . "2A8")                       => handle
(330 . "5")                       => handle de l'objet propriétaire (la table des types de lignes)
(100 . "AcDbSymbolTableRecord")   => Marqueur de sous-classe
(100 . "AcDbLinetypeTableRecord") => Marqueur de sous-classe
(2 . "AXES")                      => nom du type de ligne
(70 . 0)                          => valeur de drapeau (dépendant d'une xref si bits 16, 32 ou 64)
(3 . "Centre")                    => description
(72 . 65)                         => code d'alignement (valeur ASCII de A)
(73 . 4)                          => nombre d'éléments du type de ligne
(40 . 50.8)                       => longueur totale du motif
(49 . 31.75)                      => longueur du tiret, du point ou de l'espace (une entrée par élément)
(44 . 0)                          => valeur de décalage
(49 . -6.35)                      => longueur du tiret, du point ou de l'espace
(74 . 0)                          => valeur de décalage
(49 . 6.35)                       => longueur du tiret, du point ou de l'espace
(74 . 0)                          => valeur de décalage
(49 . -6.35)                      => longueur du tiret, du point ou de l'espace
(74 . 0)                          => valeur de décalage

 

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

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à tous.
Un grand merci à toi @(gile)... J'ai fini par comprendre, et tu avais raison, je me noyais dans un verre d'eau, encore une fois... 😉
Voici le code que j'ai fini pas écrire qui fais ce que je souhaitais 

Public Sub ImpTypLignDXF(control As IRibbonControl)
    NomFeuille = ActiveSheet.name
    'Vidange de la colonne des types de ligne existants *****************
    Lign = 2
    Do While Sheets(NomFeuille).Cells(Lign, 55).Value <> ""
        Sheets(NomFeuille).Cells(Lign, 55).Value = ""
        Lign = Lign + 1
    Loop
    'Ouverture du DXF ***************************************************
    Fichier = Application.GetOpenFilename("Fichiers DXF,*.dxf")
    If Not Fichier = False Then
        Open Fichier For Input As #1
    Else
        Exit Sub
    End If
    'Suppression du chemin du fichier LIN *******************************
    Sheets(NomFeuille).Cells(2, 55).Value = ""
    'Lecture du DXF *****************************************************
    Lign = 3
    Do While Not EOF(1)
        Line Input #1, chaine$
        If Trim(chaine$) = "AcDbLinetypeTableRecord" Then
            Do While Not EOF(1)
                Line Input #1, chaine$
                If Trim(chaine$) = "2" Then
                    Line Input #1, chaine$
                    Sheets(NomFeuille).Cells(Lign, 55).Value = Trim(chaine$)
                    Lign = Lign + 1
                    Exit Do
                End If
            Loop
        End If
    Loop
    Close
End Sub

Je le poste si ça peu servir à d'autres...
Je sais qu'il est un peu simple, voir simpliste, mais il est à ma portée et aussi à celle d'un novice...
En plus, vu qu'il est de moi, je le comprend et pourrais le modifier si le cas se présente...
Un grand merci à vous tous pour votre aide et votre patience...
Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à tous.
Voilà, j'ai presque terminé mon classeur Excel.
Pour l'instant, il fonctionne chez moi et est compatible avec les versions LT et complètes d'AutoCAD 2022.
Je vous le "livre" en "béta test"... Pour le téléchargement, voir le message suivant, tout est "à jour"...
Au début, je ne l'avais fais que pour moi, et ensuite, j'ai pensé aux collègues, et après, je me suis dis que les membres de CadXP étaient aussi des collègues, quelque part. Donc, je vous le partage...
Vous pouvez en faire ce que vous voulez, il est libre de droit (sauf le code pour l'instant), mais j'aimerais avoir quelques retours (remarques, observations, options...), s'il vous plaît, pour le faire évoluer et ainsi, répondre aux besoin du plus grand nombre d'entre vous.
Je pense que les icons parlent d'eux-mêmes, mais je vous fais un petit mode d'emploi très simple.
Bien à toi, la communauté.
Denis...

 

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Salut à toi, la communauté.
J'ai travaillé toute l'après-midi...
Je pense espérer que cette version fonctionne sur toutes les versions complètes d'AutoCAD, sauf explications données dans le PDF...
Tout est dans le PDF du Zip...
Cordialement...
Denis...

 

 

CréaCalques (Denis)_v1.01_Beta.zip

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Salut @Curlygoth.
Merci beaucoup pour ta remarque, je vais la suivre...
Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Salut didier.
Oui, j'ai tenu compte de ton observation, depuis un autre fils je crois.
J'ai prévu, dans mon VBA, le remplacement automatique de "Continu" par "Continuous"...
J'ai fais ce classeur Excel en tenant beaucoup compte de toutes les remarques des participants...
Voici la ligne de code :

If TypLign = 0 Or TypLign = "" Or TypLign = "Continu" Then TypLign = "Continuous"

Si le type de ligne n'est pas définie : "0" (parfois Excel considère rien comme 0), vide ou "Continu", elle sera "Continuous".
Merci à toi pour ce retour.
Bien à toi.
PS : j'ai en fait corrigé mon programme, maintenant, il vérifie si le type de ligne existe dans le liste des importations, sinon, ce sera "Continuous".
Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour.
J'ai modifié le ZIP d'origine.
J'ai corrigé un petit bug dans le XLSM (importation depuis AutoCAD des types de ligne) et ajouté du contenu dans le PDF.
Bien à toi, la communauté.
Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à tous.
Suite à une demande, on peut désormais utiliser les couleurs classiques (de 1 à 255) et les couleurs RVB (de 1 à 256 par couleur, exemple : 53,156,242).
J'ai mis à jour le ZIP d'origine.
Bien à toi, la communauté.
Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

ZIP mis à jour.
Correction sur la vérification de l'existence du fichier .lin et l'existence de types de ligne.

Je suis actuellement sur l'importation des calques depuis AutoCAD (plus tard depuis un DXF)...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

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é