Jump to content

LIsp pour raccord à 45


Recommended Posts

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)

Link to post
Share on other 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)

Link to post
Share on other 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

Link to post
Share on other 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)

Link to post
Share on other 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

Link to post
Share on other 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

Link to post
Share on other 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)

Link to post
Share on other 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

Link to post
Share on other 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)

Link to post
Share on other 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

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...