Pages: 1
- Sujet précédent - [ACAD] Aligner du texte ou un bloc attribut sur Polyligne 3D - Sujet suivant
#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: 4793
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)
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
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
Hors ligne
Pages: 1
- Sujet précédent - [ACAD] Aligner du texte ou un bloc attribut sur Polyligne 3D - Sujet suivant