bonuscad Posté(e) le 31 mai 2013 Posté(e) le 31 mai 2013 (modifié) Du coup je sais pas si c'est applicable au même lisp ? Pas vraiment, plus simple d'en faire un nouveau. Alors rapidement; ceci? (defun c:circle_leader ( / ent dxf_ent p_cen rad p10 p11 dxf_obj) (while (not ent) (setq ent (nentsel "\nSelectionner un cercle ou un arc: ")) (cond (ent (setq dxf_ent (entget (car ent))) (cond ((member (cdr (assoc 0 dxf_ent)) '("CIRCLE" "ARC")) (setq p_cen (trans (cdr (assoc 10 dxf_ent)) (cdr (assoc 210 dxf_ent)) 0 T) rad (cdr (assoc 40 dxf_ent)) p10 (polar p_cen 0.0 (* rad 1.25)) p11 (polar p_cen pi (* rad 1.25)) ) (repeat 2 (setq dxf_obj (list '(0 . "LINE") '(100 . "AcDbEntity") (assoc 67 dxf_ent) (assoc 410 dxf_ent) (cons 8 (getvar "CLAYER")) '(100 . "AcDbLine") (cons 10 p10) (cons 11 p11) (cons 210 '(0 0 1)) ) ) (entmake dxf_obj) (setq p10 (polar p_cen (* pi 0.5) (* rad 1.25)) p11 (polar p_cen (* pi 1.5) (* rad 1.25)) ) ) ) (T (setq ent nil) (princ "\nL'objet ne convient pas! Attend un CERCLE ou un ARC.") ) ) ) (T (princ "\nAucun objet sélectionné!") ) ) ) (prin1) ) Modifié le 31 mai 2013 par bonuscad Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Joutof Posté(e) le 31 mai 2013 Posté(e) le 31 mai 2013 J'obtiens ce message d'erreur :"Selectionner un cercle: ; erreur: type d'argument incorrect: point 2D/3D: nil"Est-ce du au fait que le cercle est sur une xref ? Et si je sélectionne un arc j'obtiens :"Selectionner un cercle:L'objet ne convient pas! Attend un CERCLE."
VDH-Bruno Posté(e) le 31 mai 2013 Posté(e) le 31 mai 2013 Bon c'est encore moi...Maintenant que les traits d'axe fonctionnent niquel, je me suis dit qu'il était peut être possible de faire la même chose avec les cercles ?Alors j'ai déjà lu un post la dessus, mais comme mes cercles sont sur une xref et pas toujours fermés, je ne peut pas les sélectionner.Actuellement j'utilise un bloc construit à l'échelle 1:1 que je déforme en fonction du Ø de mon cercle.Ca marche pas mal mais pas très pratique... Eventuellement il y a toujours la commande _dimcenter qui s'applique aussi sur une xref et des arcs de cercles. A+ Apprendre => Prendre => Rendre
bonuscad Posté(e) le 31 mai 2013 Posté(e) le 31 mai 2013 (modifié) Oups, J'ai voulu gérer les SCU mais je n'ai pas fait assez de tests... Si tu travaille qu'en 2D, tu peux simplement remplacer: p_cen (trans (cdr (assoc 10 dxf_ent)) (car ent) 0) par p_cen (cdr (assoc 10 dxf_ent)) dans le code proposé.Cependant la commande COTCEN (_DIMCENTER) suggérer par VDH-Bruno semble elle très bien gérer le SCU des entités. Régler cependant correctement la variable DIMCEN. A toi de choisir! NB: Après quelque tests avec des SCU en 3D (Xref ou dessin courant) la syntaxe:p_cen (trans (cdr (assoc 10 dxf_ent)) (cdr (assoc 210 dxf_ent)) 0 T) à l'air correct.J'ai modifié le code précédent (rajouter, tant qu'à faire, les arcs) Modifié le 31 mai 2013 par bonuscad Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Joutof Posté(e) le 31 mai 2013 Posté(e) le 31 mai 2013 Bon et bien encore une fois un très grand merci.C'est magnifique ça marche super j'habille mes plans à la vitesse grand V maintenant !!Super boulo.http://www.smileys-gratuits.com/smiley-bravo/bravo-10.gif
Joutof Posté(e) le 28 octobre 2014 Posté(e) le 28 octobre 2014 Bonjour, Je relance ce vieux sujet.Je rencontre un petit soucis avec ce lisp.En effet lorsque l'xref n'est pas positionnée à la même origine que le fichier les trait d'axe ne se cale pas au bon endroits. Est-il possible d'intégrer ce décalage d'origine dans le lisp ? Merci d'avance.
bonuscad Posté(e) le 28 octobre 2014 Posté(e) le 28 octobre 2014 Est-il possible d'intégrer ce décalage d'origine dans le lisp ? Essayé, mais pas trop testé, à voir... (defun sel_obj_median (msg / ent dxf_ent dlt) (while (not ent) (setq ent (entsel msg)) (cond (ent (if (eq (cdr (assoc 0 (setq dxf_ent (entget (car ent))))) "INSERT") (setq dlt (cdr (assoc 10 dxf_ent))) (setq dlt '(0.0 0.0 0.0)) ) (setq ent (nentselp (cadr ent))) (setq dxf_ent (entget (car ent))) (if (member (cdr (assoc 0 dxf_ent)) '("LINE" "ARC" "CIRCLE" "LWPOLYLINE")) (list dxf_ent dlt) (progn (setq ent nil) (princ "\nL'objet ne convient pas! Attend une LIGNE, ARC, CERCLE ou POLYLIGNE.") ) ) ) (T (princ "\nAucun objet sélectionné!") ) ) ) ) (defun c:vertex_median ( / fst_ob snd_obj dxf_obj n e_valid tmp_obj delta lst1 lst2 nw_lst l_vtx l_blg lremov) (setq fst_obj (sel_obj_median "\nSélectionner le 1er objet: ") snd_obj (sel_obj_median "\nSélectionner le 2ème objet: ") ) (cond ((eq (cdr (assoc 0 fst_obj)) (cdr (assoc 0 snd_obj))) (setq dxf_obj (car fst_obj) n 1 e_valid T tmp_obj (car snd_obj) delta (cadr fst_obj)) (repeat 2 (set (read (strcat "lst" (itoa n))) (cond ((eq (cdr (assoc 0 dxf_obj)) "LINE") (list (cons (mapcar '+ (cdr (assoc 10 dxf_obj)) delta) 0.0) (cons (mapcar '+ (cdr (assoc 11 dxf_obj)) delta) 0.0)) ) ((eq (cdr (assoc 0 dxf_obj)) "ARC") (list (cons (mapcar '+ (cdr (assoc 10 dxf_obj)) delta) (cdr (assoc 40 dxf_obj))) (cons (list (cdr (assoc 50 dxf_obj)) (cdr (assoc 51 dxf_obj))) 0.0)) ) ((eq (cdr (assoc 0 dxf_obj)) "CIRCLE") (list (cons (mapcar '+ (cdr (assoc 10 dxf_obj)) delta) (cdr (assoc 40 dxf_obj)))) ) ((eq (cdr (assoc 0 dxf_obj)) "LWPOLYLINE") (mapcar 'cons (mapcar '(lambda (x) (list (+ (car x) (car delta)) (+ (cadr x) (cadr delta)))) (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 10)) dxf_obj))) (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 42)) dxf_obj)) ) ) ) ) (setq dxf_obj (car snd_obj) n (1+ n)) ) (if (not (eq (length lst1) (length lst2))) (progn (setq e_valid nil) (princ "\nPas de cohérence dans le nombre de sommets."))) (While e_valid (setq nw_lst (mapcar 'cons (mapcar '(lambda (x y) (list (* (+ (caar x) (caar y)) 0.5) (* (+ (cadar x) (cadar y)) 0.5) ) ) lst1 lst2 ) (mapcar '(lambda (x y) (* (+ (cdr x) (cdr y)) 0.5) ) lst1 lst2 ) ) ) (cond ((eq (cdr (assoc 0 dxf_obj)) "LINE") (setq dxf_obj (subst (cons 10 (caar nw_lst)) (assoc 10 dxf_obj) dxf_obj) dxf_obj (subst (cons 11 (caadr nw_lst)) (assoc 11 dxf_obj) dxf_obj) ) ) ((eq (cdr (assoc 0 dxf_obj)) "ARC") (setq dxf_obj (subst (cons 10 (caar nw_lst)) (assoc 10 dxf_obj) dxf_obj) dxf_obj (subst (cons 40 (cdar nw_lst)) (assoc 40 dxf_obj) dxf_obj) dxf_obj (subst (cons 50 (caaadr nw_lst)) (assoc 50 dxf_obj) dxf_obj) dxf_obj (subst (cons 51 (car (cdaadr nw_lst))) (assoc 51 dxf_obj) dxf_obj) ) ) ((eq (cdr (assoc 0 dxf_obj)) "CIRCLE") (setq dxf_obj (subst (cons 10 (caar nw_lst)) (assoc 10 dxf_obj) dxf_obj) dxf_obj (subst (cons 40 (cdar nw_lst)) (assoc 40 dxf_obj) dxf_obj) ) ) ((eq (cdr (assoc 0 dxf_obj)) "LWPOLYLINE") (setq l_vtx (mapcar 'car nw_lst) l_blg (mapcar 'cdr nw_lst) dxf_obj nil) (while tmp_obj (cond ((eq (caar tmp_obj) 10) (setq dxf_obj (cons (cons 10 (car l_vtx)) dxf_obj) l_vtx (cdr l_vtx)) ) ((eq (caar tmp_obj) 42) (setq dxf_obj (cons (cons 42 (car l_blg)) dxf_obj) l_blg (cdr l_blg)) ) (T (setq dxf_obj (cons (car tmp_obj) dxf_obj)) ) ) (setq tmp_obj (cdr tmp_obj)) ) (setq dxf_obj (reverse dxf_obj)) ) ) (setq lremov nil) (foreach n dxf_obj (if (member (car n) '(5 330 -1)) (setq lremov (cons (car n) lremov)))) (foreach m lremov (setq dxf_obj (vl-remove (assoc m dxf_obj) dxf_obj)) ) (entmake (subst (cons 8 (getvar "CLAYER")) (assoc 8 dxf_obj) dxf_obj)) (cond ((not (member (cdr (assoc 0 dxf_obj)) '("ARC" "CIRCLE"))) (initget "Accepter Voir _Accept See") (if (eq (getkword "\nChoisir la solution affichée, [Accepter/Voir] la suivante? <Accepter>: ") "See") (progn (setq lst2 (reverse lst2) e_valid T) (if (eq (cdr (assoc 0 dxf_obj)) "LWPOLYLINE") (setq lst2 (mapcar 'cons (mapcar 'car lst2) (mapcar '- (mapcar 'cdr (append (cdr lst2) (list (car lst2)))))) tmp_obj snd_obj ) ) (entdel (entlast)) ) (setq e_valid nil) ) ) (T (setq e_valid nil)) ) ) ) (T (princ "\nLes objet sont de nature différente") ) ) (prin1) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
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