Aller au contenu

Copier le texte INDEX dans la géométrie position Z


kataryna2001

Messages recommandés

Bonjour,

J'essai de faire la topographie avec les courbes de niveaux de Gérone. J'ai un fichier DWG avec des points géomètre que je voudrai exporter en .txt afin de modéliser la topographie sur Archicad. Cependant, j'ai un soucis. Mes points ne sont pas des blocs, et chaque point a les positon X et Y de remplis, mais la position Z est nulle, donc je ne peux pas extraire mes données.

J'ai dans la partie Texte Index la bonne altimétrie, mais en géométrie la position Z est nulle.

Est-ce que vous avez une astuce pour copier le texte de l'altimétrie et le coller dans la partie position Z ? Ou comment puis-je faire ? Je ne veux pas remplir ces milliers de points à la main.

Merci d'avance.

Je vous joins le fichier.

DESSIN POINT TOP GERONE.dwg

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

ci joint tes point topo en 2D et 3D ainsi que la liste de tes points,

Il y a 13621 pts pour 13679 textes.

A toi de faire les contrôles.

Comme les textes n’avaient pas nécessairement le même point d'insertion au niveau des points AutoCAD il a fallu faire plusieurs passes.

J'ai utilisé Covadis après avoir cherché une solution en Lisp (recherche vite faite, sans trop de résultats)

Cdt

DESSIN POINT TOP GERONE.csv DESSIN POINT TOP GERONE_3D.dwg DESSIN POINT TOP GERONE_2D.dwg

  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Un petit challenge.

Voici une solution qui en traite 13004.

On peut ajouter des positions relatives dans la liste aux milieux du code.

 

(vl-load-com)
; txt2z, Eleve un bloc selon le texte situé à une position relative au bloc.
; Le dessin ne doit contenir que les textes et les blocs concernés.
(defun c:txt2Z ( / acobj acdc model ltext pt ld ind pos z cpt d pr)
    (prompt "\n Traitement en cours ...")
    (setq acobj (vlax-get-acad-object)
          acdc (vla-get-activedocument acobj)
          model (vla-get-modelspace acdc)
          ltext '()
          cpt 0)
    ; Création de la liste d'association ltext '((position_relative . z) ...)
    (vlax-for obj model
        (if (= (vla-get-ObjectName obj) "AcDbText")
            (setq pos (vlax-safearray->list (vlax-variant-value (vla-get-InsertionPoint obj)))
                  ltext (append ltext (list (cons 
                            (strcat (rtos (car pos)) "," (rtos (cadr pos))); Position plus pratique en texte.
                            (vla-get-textstring obj))))); Z
        )
    )
    ; Pour chaque bloc on cherche si il a une association avec la liste ltext.
    (vlax-for obj model
        (if (= (vla-get-ObjectName obj) "AcDbBlockReference")
            (progn
                 (setq pt (vlax-safearray->list (vlax-variant-value (vla-get-InsertionPoint obj)))
                        ; Liste des positions observées.
                       ld '((0.5 0.15)
                           (0.501 0.15)
                           (0.5 0.151)
                           (0.501 0.151)
                           (0.499 0.15)
                           (0.5 0.149)
                           (0.499 0.149)
                           (0.497 0.101)
                           (0.496 0.105)
                           )
                        ind 0
                        z nil)
                 ; Tant qu'une position ne soit trouvée ou aucune.
                 (while (not z)
                     (setq d (nth ind ld)
                           pr (strcat (rtos (+ (car pt) (car d))) "," (rtos (+ (cadr pt) (cadr d)))))
                     (if (setq z (cdr (assoc pr ltext)))
                         (progn
                            ; Elévation du bloc
                            (vla-put-InsertionPoint obj (vlax-3d-point (list (car pt) (cadr pt) (atof z))))
                            ; Suppression de la position dans la liste.
                            (vl-remove pr ltext)
                            (setq cpt (1+ cpt))
                         )
                     )
                     (setq ind (1+ ind))
                     (if (= ind (length ld)) (setq z T))
                 )
             )
        )
        
    )
    (princ (strcat "\n Nombre de blocs traités -> " (itoa cpt)))
)

Taper txt2z

attendre un peux ...

 

  • Like 2
Lien vers le commentaire
Partager sur d’autres sites

J'ai modifié le lisp précédant.

Beaucoup plus rapide, avec une boucle while qui permet d'économiser des itérations,

et un allégement progressif de la liste d'association.

Une partie des textes on été posés comme des étrons à coté de leur pot, donc intraitables de cette façon.

Il est surement possible de traiter tout les blocs en cherchant le texte le plus près.

Cela doit être super long et peux comporter de nombreuses erreurs quand les blocs sont rapprochés.

Tcho

Lien vers le commentaire
Partager sur d’autres sites

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • 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é