Aller au contenu

Messages recommandés

Posté(e)

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 !!

Autocad 2021 - Revit 2022 - Windows 10

Posté(e)

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)
)

 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)
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

Autocad 2021 - Revit 2022 - Windows 10

Posté(e)
  1. tu entres RIA pour lancer la commande
  2. tu modifies ou tu valides par Entrée le rayon maximum (défaut = 30)
  3. tu spécifies le point de départ
  4. tu spécifies le (ou les) point(s) suivant(s) (obstacles)
  5. tu valides par Entrée pour avoir le rayon d'action restant (symbolisé par un cercle)
  6. retour à 4. ou Annuler pour sortir de la commande.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

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

Autocad 2021 - Revit 2022 - Windows 10

Posté(e)

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)
)

 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)
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 ?

Autocad 2021 - Revit 2022 - Windows 10

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • 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é