Aller au contenu

Trait d\'axe


fauxsuisse

Messages recommandés

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é par bonuscad

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

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."

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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é par bonuscad

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

  • 1 an après...

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.

Lien vers le commentaire
Partager sur d’autres sites

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

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é