Oli35 Posté(e) le 25 mars 2005 Posté(e) le 25 mars 2005 Bonjour à tous ! Je cherche une routine qui permettrait de donner à un sommet d'une polyligne 3D la valeur d'un attribut qu'il suffirait de sélectionner... J'en ai marre de rentrer les valeurs à la main, pour chaque sommet de la polyligne 3D, alors que j'ai déjà saisi cette valeur dans l'attribut ! D'avance merci... Olivier
Tramber Posté(e) le 25 mars 2005 Posté(e) le 25 mars 2005 (defun c:ppol () (princ "\nd'abord la selection des attribs : ") (setq listpts nil ent T) (while ent (while(/=(progn(setq ent (nentsel))(if ent(cdr(assoc 0(entget (car ent))))"ATTRIB"))"ATTRIB")(setq ent (nentsel))) (if ent(progn(setq listpts(append listpts(list(atof(cdr(assoc 1(entget (car ent))))))))(princ listpts))) ) (princ "\nselection d'une poly qui a le même nombre de points que d'attribs selectionnés : ") (while(/=(progn(setq ent (nentsel))(if ent(cdr(assoc 0(entget (car ent))))"LWPOLYLINE"))"LWPOLYLINE")(setq ent (nentsel))) (if ent (progn (setq li2(mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget (car ent))))) (setq n -1) (setq li2(mapcar '(lambda(x)(progn(setq n(1+ n))(append x (list(nth n listpts))))) li2)) (command "_3dpoly" (foreach p li2 (command p)) (command) ) ) ) ) Lancer PPOL.Le principe, c'est de cliquer de des attributs puis cliquer dans le vide et enfin selectionner une poly2D qui comporte au moins le même nombre de points.Une poly3D est alors générée Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
bonuscad Posté(e) le 25 mars 2005 Posté(e) le 25 mars 2005 Salut, Ou encore, en m'inspirant d'une routine que j'avais publié sur CadXp "line_xy.lsp", je l'ai juste complété pour obtenir ce qui suit: (defun ajouz ( / ent dxf_ent typ_ent z) (while (null ent) (setq ent (nentsel "\nChoisir le Texte/Texte Multiligne/Attribut pour obtenir le Z: ")) (cond ((not (null ent)) (setq typ_ent (cdr (assoc 0 (setq dxf_ent (entget (car ent)))))) (cond ((member typ_ent '("TEXT" "MTEXT" "ATTRIB")) (setq z (read (cdr (assoc 1 dxf_ent)))) (if (and (/= (type z) 'REAL) (/= (type z) 'INT)) (progn (setq ent nil) (princ "\nLa valeur du texte ne convient pas!")) ) ) (T (setq ent nil) (princ "\nN'est pas un Texte MTexte ou Attribut!") ) ) ) ) ) (princ (strcat "\nZ = " (rtos z 2 2))) z ) (defun err_plxy (ch) (cond ((eq ch "Function cancelled") nil) ((eq ch "quit / exit abort") nil) ((eq ch "console break") nil) (T (princ ch)) ) (if pt_b (command "")) (setq *error* olderr) (setvar "cmdecho" 1) (princ) ) (defun c:3dpoly_xy ( / odlerr msg_f msg_n n pt_f pt_n val_z) (setvar "cmdecho" 0) (setq olderr *error* *error* err_plxy) (setq msg_f "\nSpécifiez l'extrémité de la ligne .XY de, ou [annUler]: " msg_n "\nSpécifiez l'extrémité de la ligne .XY de, ou [Clore/annUler]: " n 0 ) (while (null (setq pt_f (getpoint "\nSpécifiez le point de départ de la polyligne: .XY de "))) (princ "\nPoint incorrect.") ) (setq val_z (ajouz)) (command "_.3dpoly" ".xy" pt_f val_z) (initget "U ANNUler _Undo UNDO") (while (and (setq pt_n (getpoint pt_f (if (< n 2) msg_f msg_n))) (/= pt_n "Close")) (if (listp pt_n) (progn (setq val_z (ajouz)) (command ".xy" pt_n val_z) (setq n (1+ n) pt_f pt_n) ) (if (zerop n) (princ "\nTous les segments sont déjà annulés.") (progn (command "_undo") (setq n (1- n) pt_f (getvar "lastpoint")) ) ) ) (if (< n 1) (initget "U ANNUler _Undo UNDO") (initget "U ANNUler Clore _Undo UNDO Close") ) ) (if (eq pt_n "Close") (command "_close") (command "") ) (setq *error* olderr) (setvar "cmdecho" 1) (princ) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Tramber Posté(e) le 25 mars 2005 Posté(e) le 25 mars 2005 Enfin un qui connait les filtres de points ;) Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Oli35 Posté(e) le 29 mars 2005 Auteur Posté(e) le 29 mars 2005 Merci à tous deux pour vos réponses promptes et précises... A+ Oliv35 Olivier
thierry.garré Posté(e) le 30 mars 2005 Posté(e) le 30 mars 2005 Merci à tous, j'ai pas posé la question, mais les réponses m'arange vachement !!!!!!! Thierry Garré Géorail-Covadis-Autopiste-Autocad-Autocad Map-Infraworks 360- Navisworks -Recap
Oli35 Posté(e) le 30 mars 2005 Auteur Posté(e) le 30 mars 2005 Juste un petit truc encore : et si la polyligne 3D est déjà créée ? Merci d'avance [surligneur] Oliv35[/surligneur] Olivier
bonuscad Posté(e) le 30 mars 2005 Posté(e) le 30 mars 2005 Sous cette forme alors (defun draw_pt (pt / pt1 pt2 pt3 pt4) (setq rap (/ (getvar "viewsize") 50) pt1 (list (+ (car pt) rap) (+ (cadr pt) rap)) pt2 (list (+ (car pt) rap) (- (cadr pt) rap)) pt3 (list (- (car pt) rap) (- (cadr pt) rap)) pt4 (list (- (car pt) rap) (+ (cadr pt) rap)) ) (grdraw pt pt1 -1) (grdraw pt pt2 -1) (grdraw pt pt3 -1) (grdraw pt pt4 -1) ) (defun ajouz ( / ent dxf_ent typ_ent z) (while (null ent) (setq ent (nentsel "\nChoisir le Texte/Texte Multiligne/Attribut pour obtenir le Z: ")) (cond ((not (null ent)) (setq typ_ent (cdr (assoc 0 (setq dxf_ent (entget (car ent)))))) (cond ((member typ_ent '("TEXT" "MTEXT" "ATTRIB")) (setq z (read (cdr (assoc 1 dxf_ent)))) (if (and (/= (type z) 'REAL) (/= (type z) 'INT)) (progn (princ "\nLa valeur du texte ne convient pas!") (initget 1 "Réessayer _Retry") (setq z (getreal "\n[Réessayer]/Entrez une valeur numérique: ")) (if (eq z "Retry") (setq ent nil)) ) ) ) (T (setq ent nil) (princ "\nN'est pas un Texte MTexte ou Attribut!") ) ) ) ) ) (princ (strcat "\nZ = " (rtos z 2 2))) z ) (defun c:modif-z_3dpol ( / ent l l1 x y) (while (null (setq ent (entsel "\nChoix de la 3Dpoly dont vous voulez changer le Z: ")))) (setq l (entget (car ent))) (cond ((and (= (cdr (assoc 0 l)) "POLYLINE") (eq (logand (cdr (assoc 70 l)) 8) 8)) (setq l1 (entget (entnext (cdr (assoc -1 l))))) (while (/= "SEQEND" (cdr (assoc 0 l1))) (setq x (cadr (assoc 10 l1))) (setq y (caddr (assoc 10 l1))) (draw_pt (trans (list x y) 0 1)) (entmod (subst (cons 10 (list x y (ajouz))) (assoc 10 l1) l1)) (draw_pt (trans (list x y) 0 1)) (setq l1 (entget (entnext (cdr (assoc -1 l1))))) ) (entupd (car ent)) ) (T (prompt "\nEntité choisie n'est pas une polyligne 3D.")) ) (prin1) ) NB:Evite les déplacements à l'écran pendant l'utilisation, tu comprendras vite pourquoi! Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Oli35 Posté(e) le 31 mars 2005 Auteur Posté(e) le 31 mars 2005 Merci Bonuscad ! Ca va beaucoup me servir ! A+ Olivier
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