Aller au contenu

lisp aligner des blocs


Facilo

Messages recommandés

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

))

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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)

)

Lien vers le commentaire
Partager sur d’autres sites

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é