LUDWIG Posté(e) le 9 juillet 2021 Posté(e) le 9 juillet 2021 Bonjour, Je ne sais pas si c'est le bon endroit pour faire cette demande, mais je sais que cette partie du forum est habité par des cracks, alors je tente. J'ai besoin de représenté des rayons d'action de RIA, Robinet d'Incendie Armée (on va schématiser ça à un enrouleur de tuyau d'arrosage avec 30m de tuyau). Dans un bâtiment vide, je représente juste un cercle de 30m de rayon depuis mon enrouleur. Mais je dois en fait prendre en compte les "obstacles" : murs, poteaux, mobiliers, rayonnage, machines, etc. Du coup, représenter ce rayon d'action est bien plus compliquer. Savez-vous s'il existe un add-ons d'autocad ou Revit pour ça ? ou un logiciel ? ou une méthode ? Merci d'avance, bon week end !! Citer Autocad 2021 - Revit 2022 - Windows 10
(gile) Posté(e) le 9 juillet 2021 Posté(e) le 9 juillet 2021 Salut, Essaye ça : ;; commande RIA ;; Simule le rayon d'action d'un RIA (defun c:RIA (/ *error* doc space radius rad startPt pt0 pt1 pts pline) (vl-load-com) (setq doc (vla-get-ActiveDocument (vlax-get-acad-object))) (defun *error* (msg) (and msg (/= msg "Fonction annulée") (princ (strcat "\nErreur: " msg)) ) (vla-EndUndoMark doc) (princ) ) (vla-StartUndoMark doc) (setq space (vla-get-Block (vla-get-activeLayout doc)) radius (cond ((getenv "RiaMaximumRadius")) ((setenv "RiaMaximumRadius" "30.00")) ) ) (if (setq rad (getdist (strcat "\nEntrez le rayon maximum <" radius ">: "))) (setenv "RiaMaximumRadius" (rtos rad 2 2)) (setq rad (atof radius)) ) (if (setq startPt (getpoint "\nSpécifier le point de départ: ")) (progn (vla-AddCircle space (vlax-3d-point (trans startPt 1 0)) rad) (setq pt0 startPt ) (while T (setq pt0 startPt pts nil pline nil ) (while (setq pt1 (getpoint pt0 "\nSpécifier le point suivant (ou valider): ")) (if pline ((lambda (p) (vlax-put pline 'Coordinates (append (vlax-get pline 'Coordinates) (list (car p) (cadr p))) ) ) (trans pt1 1 0) ) ((lambda (p0 p1) (setq pline (vlax-invoke space 'AddLightWeightPolyline (list (car p0) (cadr p0) (car p1) (cadr p1)) ) ) ) (trans pt0 1 0) (trans pt1 1 0) ) ) (setq pts (cons pt1 pts) pt0 pt1 ) ) (while (and pts (<= rad (vla-get-Length pline))) (if (< 4 (length (vlax-get pline 'Coordinates))) (vlax-put pline 'Coordinates (reverse (cddr (reverse (vlax-get pline 'Coordinates)))) ) (vla-Delete pline) ) (setq pts (cdr pts)) ) (if pts (vla-AddCircle space (vlax-3d-point (trans (car pts) 1 0)) (- rad (vla-get-Length pline)) ) ) ) ) ) (*error* nil) ) Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
LUDWIG Posté(e) le 12 juillet 2021 Auteur Posté(e) le 12 juillet 2021 Le 09/07/2021 à 16:42, (gile) a dit : Salut, Essaye ça : Bonjour (gile). Je suis ravi que tu te penches sur ce problème (au sens énigme, je pense que tu aimes ça). Cela dit je n'ai pas saisi l'utilisation du Lisp. Pourrais tu m'expliquer ? Merci d'avance Citer Autocad 2021 - Revit 2022 - Windows 10
(gile) Posté(e) le 12 juillet 2021 Posté(e) le 12 juillet 2021 tu entres RIA pour lancer la commande tu modifies ou tu valides par Entrée le rayon maximum (défaut = 30) tu spécifies le point de départ tu spécifies le (ou les) point(s) suivant(s) (obstacles) tu valides par Entrée pour avoir le rayon d'action restant (symbolisé par un cercle) retour à 4. ou Annuler pour sortir de la commande. Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
LUDWIG Posté(e) le 12 juillet 2021 Auteur Posté(e) le 12 juillet 2021 Ah oui d'accord. Il trace le rayon qui reste après avoir contourné les obstacles. Ca ne fonctionnait pas car j'avais laissé un rayon de 30... mais j'étais en mm donc je ne voyais rien. Super ! je te remercie. Je te tiens au courant du résultat Citer Autocad 2021 - Revit 2022 - Windows 10
(gile) Posté(e) le 12 juillet 2021 Posté(e) le 12 juillet 2021 Une version peut-être plus explicite qui dessine un cercle symbolisant le rayon d'action restant à chaque nouveau sommet spécifié. (defun c:RIA (/ *error* doc space radius rad startPt circle pt0 pt1 pts pline break) (vl-load-com) (setq doc (vla-get-ActiveDocument (vlax-get-acad-object))) (defun *error* (msg) (and msg (/= msg "Fonction annulée") (princ (strcat "\nErreur: " msg)) ) (vla-EndUndoMark doc) (princ) ) (vla-StartUndoMark doc) (setq space (vla-get-Block (vla-get-activeLayout doc)) radius (cond ((getenv "RiaMaximumRadius")) ((setenv "RiaMaximumRadius" "30.00")) ) ) (if (setq rad (getdist (strcat "\nEntrez le rayon maximum <" radius ">: "))) (setenv "RiaMaximumRadius" (rtos rad 2 2)) (setq rad (atof radius)) ) (if (setq startPt (getpoint "\nSpécifier le point de départ: ")) (progn (setq circle (vla-AddCircle space (vlax-3d-point (trans startPt 1 0)) rad)) (setq pt0 startPt ) (while (and (not break) (setq pt1 (getpoint pt0 "\nSpécifier le point suivant (ou valider): ")) ) (vla-Delete circle) (if pline (if (< (+ (vla-get-Length pline) (distance (vlax-curve-getEndPoint pline) pt1)) rad) ((lambda (p) (vlax-put pline 'Coordinates (append (vlax-get pline 'Coordinates) (list (car p) (cadr p))) ) (setq circle (vla-AddCircle space (vlax-3d-point p) (- rad (vla-get-Length pline)) ) ) ) (trans pt1 1 0) ) ((lambda (p) (vlax-put pline 'Coordinates (append (vlax-get pline 'Coordinates) (list (car p) (cadr p))) ) (setq break T) ) (trans (polar pt0 (angle pt0 pt1) (- rad (vla-get-Length pline))) 1 0) ) ) (if (< (distance pt0 pt1) rad) ((lambda (p0 p1) (setq pline (vlax-invoke space 'AddLightWeightPolyline (list (car p0) (cadr p0) (car p1) (cadr p1)) ) ) (setq circle (vla-AddCircle space (vlax-3d-point p1) (- rad (distance pt0 pt1)) ) ) ) (trans pt0 1 0) (trans pt1 1 0) ) ((lambda (p0 p1) (setq pline (vlax-invoke space 'AddLightWeightPolyline (list (car p0) (cadr p0) (car p1) (cadr p1)) ) ) (setq break T) ) (trans pt0 1 0) (trans (polar pt0 (angle pt0 pt1) (- rad (vla-get-Length pline))) 1 0) ) ) ) (setq pt0 pt1) ) ) ) (*error* nil) ) Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
LUDWIG Posté(e) le 12 juillet 2021 Auteur Posté(e) le 12 juillet 2021 il y a 43 minutes, (gile) a dit : Une version peut-être plus explicite qui dessine un cercle symbolisant le rayon d'action restant à chaque nouveau sommet spécifié. Oh yes ! C'est mieux ! Pourrais tu ne pas supprimer les cercles au fur et à mesure qu'on dessine la polyligne ? Citer Autocad 2021 - Revit 2022 - Windows 10
LUDWIG Posté(e) le 12 juillet 2021 Auteur Posté(e) le 12 juillet 2021 désolé, oui j'aurais pu me débrouiller ;(vla-Delete circle) Citer Autocad 2021 - Revit 2022 - Windows 10
Messages recommandés