Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

 

Je pensais mon problème simple, mais je n'ai pas trouvé de réponse.

 

Alors voila, j'ai 2 polylignes perpandiculaire, et je veux dessiner une nouvelle polyligne depuis l'extremité de celle perpendiculaire vers l'autre, mais à 45°

Donc la nouvelle commence à l'extremité, et finie sur un point de l'autre avec un angle de 45° avec elle.

 

Plus compliqué, reprendre la polyligne (prolonger) et faire la même chose mais avec un écart de 10 (exemple) comme avec la fonction raccord.

 

Je sais le faire sur AutoCAD avec le repérage polaire, mais je voudrais trouver une fonction plus rapide en lisp

Posté(e)

Salut,

si j'ai bien compris, tu voudrais un lisp qui te permettrait, en cliquant sur 2 polylignes qui ont un sommet identique, de fermer la forme grâce à une polyligne qui serait forcée à 45° et qui démarrerait d'une des 2 extrémités libres.

En fait, si tes 2 polylignes sont jointes, il te faudrait juste une option supplémentaire du genre " clore à 45° ". Le top serait d'avoir cette option avec la possibilité de choisir l'angle de manière libre ou incrémenté de 5°.

Je n'ai aucune connaissance en programmation, je ne peux donc t'aider, mais je suis persuadé que nos développeurs préférés auront la solution à ton problème.

Cordialement.

 

Allan

 

 

Bonjour,

 

Je pensais mon problème simple, mais je n'ai pas trouvé de réponse.

 

Alors voila, j'ai 2 polylignes perpandiculaire, et je veux dessiner une nouvelle polyligne depuis l'extremité de celle perpendiculaire vers l'autre, mais à 45°

Donc la nouvelle commence à l'extremité, et finie sur un point de l'autre avec un angle de 45° avec elle.

 

Plus compliqué, reprendre la polyligne (prolonger) et faire la même chose mais avec un écart de 10 (exemple) comme avec la fonction raccord.

 

Je sais le faire sur AutoCAD avec le repérage polaire, mais je voudrais trouver une fonction plus rapide en lisp

Cordialement

 

Le ch'ti Allan

Posté(e) (modifié)

Salut,

 

Un principe de base avec les commandes natives d’Autocad (chamfrein et prolonger), donc l’ordre et la position des points de sélection ont leurs importantances.

 

(defun c:ProCham45 (/ sel1 *error*)
 (defun *error* (msg)
   (ai_sysvar nil)
   (if msg
     (princ (strcat "\n*Abandon* " msg))
   )
   (princ)
 )
 (or *ecart* (setq *ecart* (getvar 'CHAMFERA)))
 (setq *ecart* (cond ((getdist (strcat "\nSpécifiez l'écart à conserver entre les objets <" (rtos *ecart*) ">: ")))
                     (*ecart*)
               )
 )
 (ai_sysvar (list '("CMDECHO" . 0) ; 0 Désactive l'affichage à l'écran.
                  '("TRIMMODE" . 0) ; 0 Laisse intactes les arêtes sélectionnées 
                  '("CHAMMODE" . 0) ; 0 Deux distances de chanfrein sont nécessaires
                  (cons "CHAMFERA" *ecart*) ; Définit le premier écart de chanfrein lorsque CHAMMODE est définie sur 0.
                  (cons "CHAMFERB" *ecart*) ; Définit le second écart de chanfrein lorsque CHAMMODE est définie sur 0.
            )
 )
 (command "_chamfer"
          (setq sel1 (entsel "\nSélectionnez l'objet à prolonger: "))
          (entsel "\nSélectionnez le second objet: ")
 )
 (command "_extend" (entlast) "" sel1 "")
 (*error* nil)
)

 

Nota: C'est dans le même esprit que ce qui était suggéré par Patrick_35

 

A+

 

- EDIT – En testant le code sur ma version 2007, je viens de découvrir avec amusement que la commande _chamfer avait un comportement différent sur des ligne et des pline (mode non-ajuster), en résumer le code fonctionne avec des lignes, mais pas avec des polylignes, sur des versions plus récente ça donne quoi ?

Modifié par VDH-Bruno

Apprendre => Prendre => Rendre

Posté(e)

Le but est de ne pas utiliser la commande chanfrein, car au niveau de la jonction, elle coupe la polyligne qui lui est perpandiculaire. (supprime une partie)

Ou il existe une option ? sur chanfrein et les polylignes

 

Bruno, le lisp ne tourne pas chez moi (MEP 2012), mais visiblement tu utilise la commande chanfrein, donc sa ne marchera pas.

Posté(e)

Salut

 

Ok, je viens de comprendre

 

Tu as RA qui permet un raccord sans joindre.

Cela peut servir de base pour faire ce que tu demandes (je manque de temps en ce moment)

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Salut

 

Ok, je viens de comprendre

 

Tu as RA qui permet un raccord sans joindre.

Cela peut servir de base pour faire ce que tu demandes (je manque de temps en ce moment)

 

@+

 

Merci pour ta réponse, mais j'ai toujours le même probléme qu'avec la fonction raccord (la ligne perpandiculaire est coupée)

Posté(e)

Le but est de ne pas utiliser la commande chanfrein, car au niveau de la jonction, elle coupe la polyligne qui lui est perpandiculaire. (supprime une partie)

Ou il existe une option ?

 

Oui tu peux prendre l'option Non-ajuster

 

Commande: CHANFREIN

 

(mode AJUSTER) chanfreins actuels Dist1 = 0.0000, Dist2 = 0.0000

Sélectionnez la première ligne ou

[annUler/Polyligne/Ecart/ANgle/AJuster/méthOde/Multiple]: AJ

 

Entrez l'option du mode Ajuster [Ajuster/Non-ajuster] <Ajuster>: N

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Bruno, le lisp ne tourne pas chez moi (MEP 2012), mais visiblement tu utilise la commande chanfrein, donc sa ne marchera pas.

 

Re,

A tester, c’est du dépannage, j’ai pas trop le temps en ce moment pour faire plus, cela devrait fonctionner sur des plines…

(defun c:ProCham45 (/ sel1 sel2 *error* svgpline marque)
 (defun *error* (msg)
   (ai_sysvar nil)
   (if msg
     (princ (strcat "\n*Abandon* " msg))
   )
   (princ)
 )
 (or *ecart* (setq *ecart* (getvar 'CHAMFERA)))
 (setq *ecart* (cond ((getdist (strcat "\nSpécifiez l'écart à conserver entre les objets <" (rtos *ecart*) ">: ")))
                     (*ecart*)
               )
 )
 (ai_sysvar (list '("CMDECHO" . 0) ; 0 Désactive l'affichage à l'écran.
                  '("TRIMMODE" . 0) ; 0 Laisse intactes les arêtes sélectionnées 
                  '("CHAMMODE" . 0) ; 0 Deux distances de chanfrein sont nécessaires
                  (cons "CHAMFERA" *ecart*) ; Définit le premier écart de chanfrein lorsque CHAMMODE est définie sur 0.
                  (cons "CHAMFERB" *ecart*) ; Définit le second écart de chanfrein lorsque CHAMMODE est définie sur 0.
            )
 )
 (if (setq sel1 (entsel "\nSélectionnez l'objet à prolonger: "))
   (if (setq sel2 (entsel "\nSélectionnez le second objet: "))
     ;; si le second objet est une pline => decompo
     (progn (if (= "LWPOLYLINE" (cdr (assoc 0 (entget (car sel2)))))
              (progn (setq marque (entlast))
                     (vl-cmdf "_explode" sel2 "")
                     (setq sel2 (nentselp (osnap (cadr sel2) "_near")))
              )
            )
            (vl-cmdf "_chamfer" sel1 sel2)
            (ai_sysvar '(("TRIMMODE" . 1) ("FILLETRAD" . 0)))
            (command "_fillet" sel1 "" (entlast) "")
            ;; si marque recompo => pline 
            (if marque
              (progn (vl-cmdf "_pedit" (setq marque (entnext marque)) "O" "Joindre")
                     (while (setq marque (entnext marque)) (vl-cmdf marque))
                     (vl-cmdf "" "")
              )
            )
     )
   )
 )
 (*error* nil)
)

 

A+

Apprendre => Prendre => Rendre

Posté(e)

Merci Bruno :D , ton lisp fonctionne

 

Merci aussi Bonuscad pour le cette option, que je connaissais pas, mais elle ne marche pas bien.

Car il n'y a pas une jonction entre les polylignes, ou pas d'ajustement selon la distance qui separe la polyligne à celle qu'il faut "raccorder"

Je joint une capture plus parlante

 

 

Derniere question sur les polylignes, il exite pas une variable pour qu'au tracé les polylignes ne soit pas jointe ? (il me semble que oui, mais ne retrouve pas)

 

Mais merci à tous.

Posté(e)

Oups !

Il reste un probleme, dans le cas de polyligne avec une épaisseur.

Apres le "raccord" la polyligne perd son épaisseur.

 

Vois l'image.

 

(Lili, c'est pas des lignes double, c'est pour l'exmeple avant / apres)

Posté(e)

Oups !

Il reste un probleme, dans le cas de polyligne avec une épaisseur.

Apres le "raccord" la polyligne perd son épaisseur.

 

Voilà ça devrait être réparé.. (pas testé en profondeur)

(defun c:ProCham45 (/ sel1 sel2 *error* dxfpline marque)
   (defun *error* (msg)
     (ai_sysvar nil)
     (if msg
       (princ (strcat "\n*Abandon* " msg))
     )
     (princ)
   )
   (or *ecart* (setq *ecart* (getvar 'CHAMFERA)))
   (setq *ecart* (cond ((getdist (strcat "\nSpécifiez l'écart à conserver entre les objets <" (rtos *ecart*) ">: ")))
                       (*ecart*)
                 )
   )
   (ai_sysvar (list '("CMDECHO" . 0) 
                    '("TRIMMODE" . 0) 
                    '("CHAMMODE" . 0)
                    (cons "CHAMFERA" *ecart*) 
                    (cons "CHAMFERB" *ecart*) 
              )
   )
   (if (setq sel1 (entsel "\nSélectionnez l'objet à prolonger: "))
     (if (setq sel2 (entsel "\nSélectionnez le second objet: "))
       ;; si le second objet est une pline => svg pline
       (progn (if (= "LWPOLYLINE" (cdr (assoc 0 (setq dxfpline (entget (car sel2))))))
                (progn (setq marque (entlast))
                       (vl-cmdf "_explode" sel2 "")
                       (setq sel2 (nentselp (osnap (cadr sel2) "_near")))
                )
              )
              (vl-cmdf "_chamfer" sel1 sel2)
              (ai_sysvar '(("TRIMMODE" . 1) ("FILLETRAD" . 0)))
              (command "_fillet" sel1 "" (entlast))
              ;; si marque  => restore pline
              (if marque
                (progn ((if (= "LWPOLYLINE" (cdr (assoc 0 (entget (car sel1)))))
                          list
                          entdel
                        )
                         (while (setq marque (entnext marque)) (entdel marque))
                       )
                       (entmake dxfpline)
                )
              )
       )
     )
   )
   (*error* nil)
 )

 

Nota: La fonction reposant essentiellement sur les commandes natives d’AutoCAD (Chanfrein & Raccord), elle est limité au bon fonctionnement de ces dernières..

 

A+

Apprendre => Prendre => Rendre

  • 2 ans après...
Posté(e)

Bonjour,

 

Je re-up car j'ai voulu testé ce lisp, mais j'ai un probleme de "commande inconnue".

Si j'ai bien compris, la commande "COMMAND" a été remplacé par "COMMAND-S".

mais ca ne marche pas.

Et que faire pour la commande "VL-CMDF" ?

 

Merci

Modeler Revit MEP - Référent BIM

Revit MEP - Navisworks - Magicad

Autocad MEP 2018 (mais plus beaucoup)

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é