Aller au contenu

lisp aligner des blocs


Messages recommandés

Posté(e)

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

))

Posté(e)

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

Posté(e)

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)

)

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é