Aller au contenu

Messages recommandés

Posté(e)

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!

Posté(e)

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!!!

 

 

Posté(e)
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...

Posté(e)

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.

Posté(e)

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!

 

@+.

 

Posté(e)
les nouveaux points sont générés à des points d'insertions différents après traitement

Normalement 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...

Posté(e)

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!

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é