banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Thu 10 October 2019 12:05

djbnj84
Participant occasionnel
Date d'inscription: 14 Dec 2012
Messages: 30

[ACAD] Aligner du texte ou un bloc attribut sur Polyligne 3D

Bonjour à tous,

Je travail sur des Polylignes 3D avec un bloc attribut en chaque point avec la profondeur du reseau ainsi que le Z reseau.
Pour une meilleure compréhension sur le plan je voudrai aligner ce bloc avec attribut sur mes Polylignes 3D.
J'ai essayé la fonction ORIENTEBLOC, elle m'oriente bien le cadre bloc mais pas les attributs.
J'ai aussi essayé de supprimer le bloc et de transformer les attributs en texte avec la commande BURST,
mais toutes les fonctions ou Routines Lisp (ue j'ai trouvées, n'orientent pas le texte sur ma polyligne 3d.
(cela ne marche que sur des lignes que je créé a la main).
Avez vous une solution ? ... Merci d'avance.

Hors ligne

 

#2 Thu 10 October 2019 16:38

Patrice
JeSuisCharlie
Date d'inscription: 16 Sep 2005
Messages: 4792

Re: [ACAD] Aligner du texte ou un bloc attribut sur Polyligne 3D

Hello

1) SVP tu as un ACAD 201X ou un ACAD MAP 201X ?

2) As tu un Covadis par dessus ton ACAD / ACAD MAP ??

3) SVP peux tu joindre un petit bout de ton DWG (par la commande WBLOC) en ZIP (Max = 500 Ko) :
qq 3DPolys + qq Blocs + Attributs, pour voir ...

GeoBye, Pat


(Autodesk Expert Elite Team)

Hors ligne

 

#3 Thu 10 October 2019 16:55

djbnj84
Participant occasionnel
Date d'inscription: 14 Dec 2012
Messages: 30

Re: [ACAD] Aligner du texte ou un bloc attribut sur Polyligne 3D

Je suis sur autocad 2015, sans covadis.
Je vous joins un bout de mon fichier.
Pour info j'ai supprimé sur ce fichier le cadre du bloc, que je ne veux pas garder.

Merci d'avance

Dernière modification par djbnj84 (Thu 10 October 2019 17:06)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#4 Fri 11 October 2019 11:56

bruno v.
Participant actif
Date d'inscription: 22 Mar 2010
Messages: 89

Re: [ACAD] Aligner du texte ou un bloc attribut sur Polyligne 3D

Bonjour,

Un embryon de code à peaufiner si nécessaire.
Pour tester, tu copie-colle directement le code en ligne de commande:

Code:

((lambda ( / ss1 n obj_blk pt_ins ss2 obj_curv pt_sel param deriv alpha)
    (setq ss1 (ssget "_X" '((0 . "INSERT") (8 . "AtlDetect") (2 . "DETECT"))))
    (cond
        (ss1
            (repeat (setq n (sslength ss1))
                (setq obj_blk (vlax-ename->vla-object (setq ent (ssname ss1 (setq n (1- n))))))
                (setq pt_ins (cdr (assoc 10 (entget ent))))
                (setq ss2 (ssget "_C" (mapcar '- (trans pt_ins 0 1) '(0.05 0.05 0.0)) (mapcar '+ (trans pt_ins 0 1) '(0.05 0.05 0.0)) '((0 . "*POLYLINE,LINE,ARC") (-4 . "<NOT") (-4 . "&") (70 . 112) (-4 . "NOT>"))) )
                (cond
                    (ss2
                        (setq obj_curv (vlax-ename->vla-object (ssname ss2 0)))
                        (setq
                            pt_sel (vlax-curve-getClosestPointTo obj_curv pt_ins)
                            param (vlax-curve-getparamatpoint obj_curv pt_sel)
                            deriv (vlax-curve-getfirstderiv obj_curv param)
                            alpha (atan (cadr deriv) (car deriv))
                        )
                        (vlax-put-property obj_blk 'Rotation alpha)
                    )
                )
            )
        )
    )
    (prin1)
))

Hors ligne

 

#5 Fri 11 October 2019 12:21

djbnj84
Participant occasionnel
Date d'inscription: 14 Dec 2012
Messages: 30

Re: [ACAD] Aligner du texte ou un bloc attribut sur Polyligne 3D

Alors là super c'est exactement ce que je voulais..
Par contre cela ne fonctionne pas quand j'ai une vue globale de tous mes reseaux.
Ca met" erreur : type d'argument incorrect : numberp: nil"
Quand je zoom sur une partie du plan cela marche bien sur les polylignes visibles.

Autre question. bien sur je ne sais pas si c'est possible.
avec un autre code(je précise autre car cela ne sera pas de manière systematique),  est il possible que les attributs changent de calque pour être dans celui de la polyligne auquel ils sont rattachés?

Merci beaucoup pour le coup de pouce

Hors ligne

 

#6 Fri 11 October 2019 14:43

bruno v.
Participant actif
Date d'inscription: 22 Mar 2010
Messages: 89

Re: [ACAD] Aligner du texte ou un bloc attribut sur Polyligne 3D

Quand je zoom sur une partie du plan cela marche bien sur les polylignes visibles.


(ssget "_C"): mode capture, provoque souvent des problèmes dans de gros dessins ou des dessins denses même si le zoom est total au départ de la procédure.

Ce que l'on peut tenter de faire pour fiabilisé ce mode de sélection et de faire avant la ligne de sélection pour (setq ss2 ....

Code:

(command "_.zoom" "_object" ent "")

et de mettre avant la parenthèse de fin de (repeat ...

Code:

(command "_.zoom" "_previous")

Ça a le désavantage de ralentir énormément l’exécution, mais peut donner de meilleurs résultats.

Tu as aussi la possibilité aussi de changer le (ssget "_X") pour le passer en manuel (ssget) simple; cela te demandera de sélectionner les blocs, donc ceux visible à l'écran

Pour ton autre question ce n'est pas possible, bien qu'on puisse changer le calque d'un attribut, cela affecte TOUTES les insertions du dudit bloc, et ce n'est pas ce que tu veux.

Dernière modification par bruno v. (Fri 11 October 2019 14:49)

Hors ligne

 

#7 Fri 11 October 2019 15:53

djbnj84
Participant occasionnel
Date d'inscription: 14 Dec 2012
Messages: 30

Re: [ACAD] Aligner du texte ou un bloc attribut sur Polyligne 3D

J'ai essayé mais cela ne fonctionne pas (peut être n'ai je pas mis les modifs au bon endroit), mais ce n'est pas très grave, je gagne un temps fou avec ce code deja.
Pour avoir ce code en fichier lsp avec une commande, que faut il rajouter svp?

Hors ligne

 

#8 Fri 11 October 2019 16:24

bruno v.
Participant actif
Date d'inscription: 22 Mar 2010
Messages: 89

Re: [ACAD] Aligner du texte ou un bloc attribut sur Polyligne 3D

Pour avoir ce code en fichier lsp avec une commande, que faut il rajouter svp?


Tu copie colle dans le bloc-note ce qui suit, tu l'enregistre sous par exemple: rot2pl.lsp
Et quand tu l'aura chargé tu aura une commande rot2pl
Tu peux adapté le nom que j'ai affecté après c: si tu ne le trouve pas parlant.

PS: j'ai ajouté les zoom: à voir si ça règle les problèmes...

Code:

(defun c:rot2pl ( / ss1 n ent obj_blk pt_ins ss2 obj_curv pt_sel param deriv alpha)
  (setq ss1 (ssget "_X" '((0 . "INSERT") (8 . "AtlDetect") (2 . "DETECT"))))
  (cond
    (ss1
      (setvar "cmdecho" 0)
      (repeat (setq n (sslength ss1))
        (setq obj_blk (vlax-ename->vla-object (setq ent (ssname ss1 (setq n (1- n))))))
        (setq pt_ins (cdr (assoc 10 (entget ent))))
        (command "_.zoom" "_object" ent "")
        (setq ss2 (ssget "_C" (mapcar '- (trans pt_ins 0 1) '(0.05 0.05 0.0)) (mapcar '+ (trans pt_ins 0 1) '(0.05 0.05 0.0)) '((0 . "*POLYLINE,LINE,ARC") (-4 . "<NOT") (-4 . "&") (70 . 112) (-4 . "NOT>"))) )
        (cond
          (ss2
            (setq obj_curv (vlax-ename->vla-object (ssname ss2 0)))
            (setq
              pt_sel (vlax-curve-getClosestPointTo obj_curv pt_ins)
              param (vlax-curve-getparamatpoint obj_curv pt_sel)
              deriv (vlax-curve-getfirstderiv obj_curv param)
              alpha (atan (cadr deriv) (car deriv))
            )
            (vlax-put-property obj_blk 'Rotation alpha)
          )
        )
        (command "_.zoom" "_previous")
      )
      (setvar "cmdecho" 1)
    )
  )
  (prin1)
)

PS2:
Ce que tu peux faire aussi pour fiabiliser le code est de remplacer

Code:

(setq ss2 (ssget "_C" (mapcar '- (trans pt_ins 0 1) '(0.05 0.05 0.0)) (mapcar '+ (trans pt_ins 0 1) '(0.05 0.05 0.0)) '((0 . "*POLYLINE,LINE,ARC") (-4 . "<NOT") (-4 . "&") (70 . 112) (-4 . "NOT>"))) )

par

Code:

(setq ss2 (ssget "_C" (mapcar '- (trans pt_ins 0 1) '(0.05 0.05 0.0)) (mapcar '+ (trans pt_ins 0 1) '(0.05 0.05 0.0)) '((0 . "*POLYLINE,LINE,ARC") (8 . "DETECTION RESEAU *") (-4 . "<NOT") (-4 . "&") (70 . 112) (-4 . "NOT>"))) )

Ce qui aura pour effet de ne sélectionner que les polylignes des calques "DETECTION RESEAU xxx" et d'écarter toutes polylignes étrangères qui pourraient être présente près du bloc

Dernière modification par bruno v. (Fri 11 October 2019 16:37)

Hors ligne

 

#9 Fri 11 October 2019 17:31

djbnj84
Participant occasionnel
Date d'inscription: 14 Dec 2012
Messages: 30

Re: [ACAD] Aligner du texte ou un bloc attribut sur Polyligne 3D

Merci pour les modifs, mais a chaque coup j'ai : " erreur : type d'argument incorrect : numberp: nil"

Hors ligne

 

#10 Mon 14 October 2019 09:44

bruno v.
Participant actif
Date d'inscription: 22 Mar 2010
Messages: 89

Re: [ACAD] Aligner du texte ou un bloc attribut sur Polyligne 3D

djbnj84 a écrit:

Merci pour les modifs, mais a chaque coup j'ai : " erreur : type d'argument incorrect : numberp: nil"


Je pense comprendre pourquoi: C'est quand une insertion de bloc n'est pas parfaitement sur un sommet (vlax-curve-getparamatpoint) échoue.

Essayes ceci, je grip à la fin les insertions de bloc à problème; à traiter manuellement...

Code:

(defun c:rot2pl ( / ss1 sstmp n ent obj_blk pt_ins ss2 obj_curv pt_sel param deriv alpha)
  (setq ss1 (ssget "_X" '((0 . "INSERT") (8 . "AtlDetect") (2 . "DETECT"))) sstmp (ssadd))
  (cond
    (ss1
      (setvar "cmdecho" 0)
      (repeat (setq n (sslength ss1))
        (setq obj_blk (vlax-ename->vla-object (setq ent (ssname ss1 (setq n (1- n))))))
        (setq pt_ins (cdr (assoc 10 (entget ent))))
        (command "_.zoom" "_object" ent "")
        (setq ss2 (ssget "_C" (mapcar '- (trans pt_ins 0 1) '(0.05 0.05 0.0)) (mapcar '+ (trans pt_ins 0 1) '(0.05 0.05 0.0)) '((0 . "*POLYLINE,LINE,ARC") (8 . "DETECTION RESEAU *") (-4 . "<NOT") (-4 . "&") (70 . 112) (-4 . "NOT>"))))
        (cond
          (ss2
            (setq obj_curv (vlax-ename->vla-object (ssname ss2 0)))
            (setq
              pt_sel (vlax-curve-getClosestPointTo obj_curv pt_ins)
              param (vlax-curve-getparamatpoint obj_curv pt_sel)
            )
            (if param
              (progn
                (setq
                  deriv (vlax-curve-getfirstderiv obj_curv param)
                  alpha (atan (cadr deriv) (car deriv))
                )
                (vlax-put-property obj_blk 'Rotation alpha)
              )
              (setq sstmp (ssadd (ssname ss1 n) sstmp))
            )
          )
        )
        (command "_.zoom" "_previous")
      )
      (sssetfirst nil sstmp)
      (setvar "cmdecho" 1)
    )
  )
  (prin1)
)

Hors ligne

 

#11 Fri 18 October 2019 12:07

djbnj84
Participant occasionnel
Date d'inscription: 14 Dec 2012
Messages: 30

Re: [ACAD] Aligner du texte ou un bloc attribut sur Polyligne 3D

A part quelques bloc en début de ligne que je dois traiter manuellement, c'est exactement ce que je voulais.
Merci beaucoup pour l'aide wink

Hors ligne

 

Pied de page des forums

Powered by FluxBB