Aller au contenu

LIsp pour raccord à 45


grandss

Messages recommandés

Bonjour,

 

Je cherche un lisp me permettant de faire des raccords à 45° sur des schémas d'eaux usées.

Nous utilisons un petit addin (CADPROFI) mais il crée des raccords en TE.

J'ai donc besoin d'un lisp qui me permet de sélectionner une ligne 1 qui se raccorde à une ligne 2 et qui insère une ligne à 45° sans couper la ligne 2 (voir image)

J'ai bien lisp qui s'appelle RRX mais il ne fonctionne pas.

 

Merci.

post-16556-0-24052400-1608287285_thumb.jpg

Modeler Revit MEP - Référent BIM

Revit MEP - Navisworks - Magicad

Autocad MEP 2018 (mais plus beaucoup)

Lien vers le commentaire
Partager sur d’autres sites

Le voila :

(defun c:rrx (/ 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))
                       (command-s "_explode" sel2 "")
                       (setq sel2 (nentselp (osnap (cadr sel2) "_near")))
                )
              )
              (command-s "chamfer" sel1 sel2)
              (ai_sysvar '(("TRIMMODE" . 1) ("FILLETRAD" . 0)))
              (command-s "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)
 )

Modeler Revit MEP - Référent BIM

Revit MEP - Navisworks - Magicad

Autocad MEP 2018 (mais plus beaucoup)

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

Voir ta routine RRX ( Avec 2 micro-corrections ) ci-dessous qui fait qq chose en effet ...

 

Mais je ne sais pas exactement quel resultat tu desires ?

 

LA SANTE, Joyeux Noel, Bye, lecrabe

 

;; 
;; https://cadxp.com/topic/49500-lisp-pour-raccord-a-45/page__pid__297377
;; 
;; grandss >>> 
;; Je cherche un lisp me permettant de faire des raccords à 45° sur des schémas d'eaux usées.
;; Nous utilisons un petit addin (CADPROFI) mais il crée des raccords en TE.
;; J'ai donc besoin d'un lisp qui me permet de sélectionner une ligne 1 qui se raccorde à une ligne 2 
;; et qui insère une ligne à 45° sans couper la ligne 2 (voir image) 
;; J'ai bien lisp qui s'appelle RRX mais il ne fonctionne pas.
;; 

(defun c:RRX (/ 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 "\nSpecifiez l'ecart a 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 "\nSelectionnez l'objet a prolonger: "))
     (if (setq sel2 (entsel "\nSelectionnez 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))
                       (command-s "_explode" sel2 "")
                       (setq sel2 (nentselp (osnap (cadr sel2) "_near")))
                )
              )
              (command-s "_chamfer" sel1 sel2)  ;; --> "_chamfer"
              (ai_sysvar '(("TRIMMODE" . 1) ("FILLETRAD" . 0)))
              (command-s "_fillet" sel1 "" (entlast))  ;; --> "_fillet"
              ;; 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)
 ) 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

J'ai testé, mais sans succès.

J'ai les messages suivants :

Sélectionnez le second objet: ERREUR d'application: Liste entité/point incorrecte.

 

*Abandon* Erreur inconnue de (command-s).

 

Pour le résultat à obtenir, voir les images jointes avec mon premier message.

Modeler Revit MEP - Référent BIM

Revit MEP - Navisworks - Magicad

Autocad MEP 2018 (mais plus beaucoup)

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

OK desole mais ca fait qq chose !

 

J ai donc dessine une polyligne 2D horizontale ...

Puis j ai dessine une autre polyligne montant a la verticale depuis UN point PROCHE ...

 

Commande: RRX

CLIC sur la polyligne verticale montante ...

CLIC sur la polyligne horizontale juste avant l intersection ...

 

LA SANTE, Joyeux Noel, Bye, lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

+1 avec Maxime063 !

 

Tu as quelle version de AutoCAD ??

 

---- RAPPEL (Merci Mr hmsilva) ----

Command-s was introduced in AutoCAD 2012, also *push-error-using-command*, *push-error-using-stack* and *pop-error-mode* were introduced in AC2012

 

La Sante, Bye, lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Salut lecrabe,

 

Je suis bien parti de ta version mais ca ne fonctionnait pas.

Mais j'y suis arrivé.

J'ai donc pour cela supprimé le -s de command-s et ensuite j'ai rajouté un point aux commande chamfer et fillet, mais je n'ai pas compris pourquoi :o

 

(defun c:RRX (/ 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 "\nSpecifiez l'ecart a 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 "\nSelectionnez l'objet a prolonger: "))
     (if (setq sel2 (entsel "\nSelectionnez 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))
                       (command "_explode" sel2 "")
                       (setq sel2 (nentselp (osnap (cadr sel2) "_near")))
                )
              )
              (command "_.chamfer" sel1 sel2)  ;; --> "_chamfer"
              (ai_sysvar '(("TRIMMODE" . 1) ("FILLETRAD" . 0)))
              (command "_.fillet" sel1 "" (entlast))  ;; --> "_fillet"
              ;; 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)
 ) 

Modeler Revit MEP - Référent BIM

Revit MEP - Navisworks - Magicad

Autocad MEP 2018 (mais plus beaucoup)

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

À mon avis command ou command-s, ce n'est pas le problème !

 

Sans doute que les commandes FILLET & CHAMFER ont été redéfinis dans ton MEP !

 

Et donc le POINT force la commande originale !

Et le Souligné / Underscore force la commande US/English !

 

La Santé, Bye, lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Le SOULIGNE je connaissais, mais pas le POINT.

Le command-s m'envoie bien un message d'erreur.

Mais de toute façon, le lisp ne réagit pas correctement à chaque fois. Peut-être dû à CadProfi, je ne sais pas.

Il me mets les raccords un peu n'importe comment. Parfois bien, parfois mal.

Modeler Revit MEP - Référent BIM

Revit MEP - Navisworks - Magicad

Autocad MEP 2018 (mais plus beaucoup)

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

Desole mais pour moi, c incomprehensible !

command ou command-s (dans ce micro-Lisp) avec un AutoCAD MEP 2018 ...

command-s existe depuis la version 2012 ...

 

En attente de l'explication d'un Pro: Gilles, Bruno, Didier, Tramber, VDH-Bruno, Luna, etc ...

 

LA SANTE, Joyeux Noel, Bye, lecrabe

Autodesk Expert Elite Team

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é