Facilo Posté(e) le 14 avril 2013 Posté(e) le 14 avril 2013 Bonjour,j'ai commencé un lisp qui déplace des blocs en fonction de leurs attributs à valeur numérique et les alignent en x,0,0. I fonctionne actuellement en sélection point par point. Ce que je souhaiterai c'est qu'il s'exécute d'un seul coup sur un jeu de sélection (je suis fâché avec entsel :( ). Merci de votre aide car je suis débutant en lisp. (defun c:test (/ sel ent st newpt)(if (setq eset(ssget)) (progn (setq cntr 0) (while (< cntr (sslength eset)) (setq en(ssname eset cntr)) (setq enlist(entget en)) (if (not (setq sel (entsel "\n Select Block: ")))(alert "Nothing Selected Mr.Ben")(progn(setq ent (entget (car sel)))(if (= (cdr(assoc 0 ent)) "INSERT")(progn(setq st (cdr (assoc 10 ent))newpt '(0.005 0. 0.)) (setq jeusel (ssget)) (setq n 0) (repeat (sslength jeusel) (setq ent (ssname jeusel n)) (command "_.move" sel "" st (list (atof (cdr(assoc 1 (entget (entnext(entnext ent)))))) 0 0 ) )(setq n (+ 1 n)) ))(alert "Your Selection is not a Block"))(princ))) (princ)) (setq cntr(+ cntr 1)))))
bonuscad Posté(e) le 15 avril 2013 Posté(e) le 15 avril 2013 Bonjour, En gardant ta séquence d'extraction de l'attribut: (assoc 1 (entget (entnext (entnext ent)))) Est ce que ceci conviendrait? ((lambda ( / js n ent dxf_ent new_pt) (setq js (ssget '((0 . "INSERT") (66 . 1)))) (cond (js (repeat (setq n (sslength js)) (setq ent (ssname js (setq n (1- n))) dxf_ent (entget ent) new_pt (list (atof (cdr (assoc 1 (entget (entnext (entnext ent)))))) 0.0 0.0) ) (entmod (subst (cons 10 new_pt) (assoc 10 dxf_ent) dxf_ent)) ) ) ) )) Éventuellement suivi de la commande ATTSYNC pour resynchroniser la position des attributs.NB: Tu peux affiner le filtre de sélection de (ssget) en donnant le groupe (2 . "Nom du bloc") Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Facilo Posté(e) le 15 avril 2013 Auteur Posté(e) le 15 avril 2013 Merci il y a un problème c'est que ton lisp ne déplace pas les attributs on m'a proposé ceci : (defun c:BAT (/ *error* _No-p sel i sn en p) ;;--- Tharwat 15. April. 2013 ---;; (defun *erro* (x) (setvar 'cmdecho 1) (princ "*Cancel*")) (defun _No-p (nxt / e No) (while (not (eq (cdr (assoc 0 (setq e (entget nxt)))) "SEQEND")) (if (and (eq (cdr (assoc 0 e)) "ATTRIB") (numberp (read (cdr (assoc 1 e)))) ) (setq No (cdr (assoc 1 e))) ) (setq nxt (entnext nxt)) ) No ) (if (setq sel (ssget "_:L" '((0 . "INSERT") (66 . 1)))) (repeat (setq i (sslength sel)) (setq sn (ssname sel (setq i (1- i)))) (if (and (setq p (read (_No-p (entnext sn)))) (numberp p) ) (progn (setvar 'cmdecho 0) (command "_.move" sn "" "_none" (cdr (assoc 10 (entget sn))) "_none" (list p 0. 0.) ) (setvar 'cmdecho 1) ) ) ) ) (princ))
lili2006 Posté(e) le 15 avril 2013 Posté(e) le 15 avril 2013 Bonsoir à toutes et tous,Éventuellement suivi de la commande ATTSYNC pour resynchroniser la position des attributs. As-tu essayé ? Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Facilo Posté(e) le 15 avril 2013 Auteur Posté(e) le 15 avril 2013 oui ça marche nickel. C'est ce que je cherchais. Merci
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