fabdo Posté(e) le 18 juin 2007 Posté(e) le 18 juin 2007 Bonjour Aujourd'hui c'est moi qui suis confronté au problème:- j'ai un bloc contenant des points, des matricules et des altitudes- lorsque que j'explose ce bloc je me retrouve avec entités qui ne sont plus liées Ce que je souhaite c'est de reconstruire un bloc topo pour chaque point sans trop passer de temps j'ai déjà vu cela sur le forum mais je ne sais plus ou.Si quelqu'un a une solution ou un lien sur le sujet je suis preneur. Merci et bonne journée à tous!
Bred Posté(e) le 18 juin 2007 Posté(e) le 18 juin 2007 Salut,test ça. Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
fabdo Posté(e) le 18 juin 2007 Auteur Posté(e) le 18 juin 2007 Salut Bred, C'est presque ça, il me faudrait en plus du matricule, que je puisse avoir l'altitude(Z) et si ce n'est pas trop demander faire une sélection des points. je m'explique dans la routine on tient compte du symbole du point mais j'ai un tas d'autres points avec ce même symbole dont je ne dois rien changer. Si tu vois une solution?... Et tout de même merci!!!
Bred Posté(e) le 19 juin 2007 Posté(e) le 19 juin 2007 il me faudrait en plus du matricule, que je puisse avoir l'altitude(Z)En fait le lisp devrait ne te donner QUE l'altitude.Souvent le Matricule est gelé, invisible ou trés petit. Le lisp fonctionne de la manière suivant :Il faut que tu es un point ET un texte représentant ton altitude.Le programme va te reconstruire en bloc tout les point + texte d'altitude équivalent, et te mettre ce point au niveau désigné....Je ne gère pas le matricule (il faudrait autrement récupèrer 2 donnes : altitude + matricule). faire une sélection des points. je m'explique dans la routine on tient compte du symbole du point mais j'ai un tas d'autres points avec ce même symbole dont je ne dois rien changer. Essaye ça : ;;; Transforme pt+txt en point topo + modifie tous les txt en idem dans le plan.;; ;;; + met les points sur le Z correspondant ; (defun c:ass-pt-topo (/ ACDOC BLC-I COORD-BL COORD-NOD COORD-NOD/TXT COORD-PT COORD-PT/TXT COORD-TXT H-TXT LAY-NOD LAY-TXT LST-BLC LST-PT N NOD NOMBLC PT-NOD ROT-TXT SEL SEL-T SPACE TXT VAL VAL-TXT VLA-NOD VLA-TXT X) (vl-load-com) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc)) sel (ssadd) lst-pt nil) (initget 1) (setq NomBlc (getstring T "\nNom du Bloc Topo à créer: ")) (while (not (and (setq nod (car (entsel "\n Choix du point :"))) (equal (cdr (assoc 0 (entget nod))) "POINT")))) (ssadd nod sel) (while (not (and (setq txt (car (entsel "\n Choix du Texte :"))) (equal (cdr (assoc 0 (entget txt))) "TEXT")))) ; Récup valeurs (setq vla-nod (vlax-ename->vla-object nod) lay-nod (vla-get-layer vla-nod) vla-txt (vlax-ename->vla-object txt) lay-txt (vla-get-layer vla-txt) h-txt (vla-get-Height vla-txt) val-txt (vla-get-TextString vla-txt) coord-nod (vlax-get vla-nod 'Coordinates) coord-txt (vlax-get vla-txt 'InsertionPoint) coord-pt/txt (mapcar '- coord-nod coord-txt) coord-nod/txt (mapcar '+ coord-txt coord-pt/txt)) ; création attribut (vla-addAttribute Space h-txt acAttributeModePreset "Niveau" (vlax-3d-point (trans coord-txt 1 0)) "Niveau" val-txt) (chang_Calque (entlast) lay-txt) (ssadd (entlast) sel) ; création Bloc (Creatbloc NomBlc coord-nod sel) (vla-delete vla-txt) ; Récupère text idem dans dessin [b](princ "\n Text d'Altitude : ") (setq sel-T (ssget (list (cons 0 "TEXT")(cons 8 lay-txt)))) (princ "\n Nodaux à liés :") (setq pt-nod (ssget (list (cons 0 "POINT")(cons 8 lay-nod))))[/b] (repeat (setq x (sslength sel-T)) (setq txt (vlax-ename->vla-object (ssname sel-T (setq x (1- x)))) val-txt (vla-get-TextString txt) h-txt (vla-get-Height txt) rot-txt (vla-get-Rotation txt) coord-txt (vlax-safearray->list (vlax-variant-value (vla-get-InsertionPoint txt))) coord-pt (mapcar '+ coord-txt coord-pt/txt) blc-i (vla-insertblock Space (vlax-3d-point (trans coord-pt 1 0)) NomBlc 1 1 1 0)) (vla-rotate blc-i (vlax-3d-point (trans coord-txt 1 0)) rot-txt) (vla-put-TextString (car (vlax-invoke blc-i 'GetAttributes)) val-txt) (vla-delete txt) (princ (strcat "\n Reste " (rtos x) " Blocs à créér.")) ) (if pt-nod (progn (repeat (setq n (sslength pt-nod)) (setq lst-pt (append (list (vlax-ename->vla-object (ssname pt-nod (setq n (1- n))))) lst-pt))) (foreach n lst-pt (vla-delete n)) ) ) ; Elève sur les Z (setq sel (ssget "_X" (list (cons 2 NomBlc)))) (repeat (setq n (sslength sel)) (setq lst-blc (append (list (vlax-ename->vla-object (ssname sel (setq n (1- n))))) lst-blc))) (foreach n lst-blc (setq val (atof (vla-get-TextString (car (vlax-invoke n 'GetAttributes)))) coord-Bl (vlax-safearray->list (vlax-variant-value (vla-get-InsertionPoint n)))) (vla-put-InsertionPoint n (vlax-3d-point (list (car coord-Bl)(cadr coord-Bl) val))) ) (princ) ) ;;; Création de Bloc Topo ; (defun Creatbloc (Nom-B p ss / BLK LST N NBT) (repeat (setq n (sslength ss)) (setq lst (cons (vlax-ename->vla-object (ssname ss (setq n (1- n)))) lst))) (setq blk (vla-add (vla-get-blocks AcDoc) (vlax-3d-point p) Nom-B)) (foreach n lst (vla-transformby n (UCS2WCSMatrix))) (vlax-Invoke (vla-get-activedocument (vlax-get-acad-object)) 'CopyObjects lst blk) (foreach n lst (vla-delete n)) (vla-insertblock Space (vlax-3d-point (trans p 1 0)) Nom-B 1 1 1 (angle '(0 0 0) (trans (getvar "UCSXDIR") 0 (trans '(0 0 1) 1 0 T)))) (princ) ) ;; Doug C. Broad, Jr. ; ;; can be used with vla-transformby to ; ;; UCS2WCSMatrix transform objects from the UCS to the WCS ; (defun UCS2WCSMatrix () (vlax-tmatrix (append (mapcar '(lambda (vector origin) (append (trans vector 1 0 T) (list origin))) (list '(1 0 0) '(0 1 0) '(0 0 1)) (trans '(0 0 0) 0 1))(list '(0 0 0 1)))) ) ;;; Routine changement calque de l'objet ; (defun chang_Calque (Ob Calq) (if (not (tblobjname "LAYER" Calq)) (vla-add (vla-get-Layers (vla-get-ActiveDocument (vlax-get-acad-object))) Calq)) (vla-put-Lock (vlax-ename->vla-object (tblobjname "LAYER" Calq)) :vlax-false) ;déverouille calque (vla-put-layer (vlax-ename->vla-object Ob) Calq) ) Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
fabdo Posté(e) le 19 juin 2007 Auteur Posté(e) le 19 juin 2007 Bred, J'avais presque compris le principe de la routine j'avais juste sélectionné le matricule à la place de l'altitude. Pour la seconde routine elle fonctionne pour moi et c'est suffisant. Je te remercie pour ton aide et ton temps. Bonne journée.
fabdo Posté(e) le 19 juin 2007 Auteur Posté(e) le 19 juin 2007 Ouuppsss! J'avais pas vu lors des essais mais les nouveaux points sont générés à des points d'insertions différents après traitement. Je vais essayer de trouver autre chose! @+.
Bred Posté(e) le 19 juin 2007 Posté(e) le 19 juin 2007 les nouveaux points sont générés à des points d'insertions différents après traitementNormalement le point d'insertion s'élevé sur les Z de la valeur du texte joint....Si ce n'est pas ça, c'est un bug.Fait le moi savoir ! Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
fabdo Posté(e) le 20 juin 2007 Auteur Posté(e) le 20 juin 2007 Bred, Je n'en suis pas sur mais mes points on du être générés à partir de Civil 3D (incidence ou pas?). Après décomposition lorsque je clic sur Alt je me retrouve avec 2 grips (l'un situé sur le nodal du symbole et l'autre un peu plus haut, après traitement la nouvelle postion du nodal en plan XY semble être la position du second grip d'ou le changement de position du symbole du bloc et par conséquent de la position du bloc en XY. Ouf, j'espère que je ne me suis pas trop embrouillé, et que tout cela à une signification pour toi. Bonne journée!
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant