Aller au contenu

Calcul de section et périmètre mouillé d'un cadre


Messages recommandés

Posté(e)

Bonjour à tous,

Je cherche à calculer le périmètre et section mouillé d'un cadre en prenant en compte les goussets (chanfreins) suivant la figure suivante, dans un tableau Excel.

En section pleine pas de problème, par contre avec un taux de remplissage correspondant au fil rouge j'ai beau tourné les formules dans tous les sens j'ai rien probant. Même en décomposant ...

Les élément connus sont:

la longueur L

la hauteur h

les goussets a

Merci d'avance pour vos lumières

 

image.thumb.png.31b940fa102888a30d804e4c786f722d.png

 

 

Posté(e)

pour ma part, je serais passé par une fonction si. pour déterminer si le gousset supérieur est impacté par le taux de remplissage.

je m'explique: si le niveau est inferieur à h-a alors c'est facile. par contre, si % est superieur à h-a alors il faut calculer les surfaces et perimetre en fonction du gousset (pas compliqué non plus). cela fait donc 2 formules 😉

Eric

Posté(e)

Bonjour,

Je suis pas de la partie, mais une fois  (en 2010) j'avais répondu à une question similaire, mais je n'avais jamais eu de retour...

Est ce que cela pourrait te servir?

Cela fonctionne avec des LWPOLYLINE,SPLINE,ELLIPSE,CIRCLE,ARC et cela retourne:

Demande : Coefficient de Manning et la pente

Périmètre mouillé

Surface mouillée

Rayon hydraulique

Débit hydraulique en m3/s

(vl-load-com)
(defun l-coor2l-pt (lst flag / )
  (if lst
    (cons (list (car lst) (cadr lst) (if flag (caddr lst) 0.0))
      (l-coor2l-pt (if flag (cdddr lst) (cddr lst)) flag)
    )
  )
)
(defun c:perim_mouille ( / js ename obj l_dxf coeff_manning percent key pth hand_lin dxf_ent lst_pt first_pt secnd_pt lst_pt perim_wet area_wet hydraulic_ray q_deb_Manning)
(setq key nil pth nil hand_lin nil)
  (princ "\nSélectionner le périmètre de la canalisation.")
  (while (null (setq js (ssget "_+.:E:S" '((0 . "LWPOLYLINE,SPLINE,ELLIPSE,CIRCLE,ARC")))))
    (princ "\nCe n'est pas un objet valable!")
  )
  (setq
    ename (ssname js 0)
    obj (vlax-ename->vla-object ename)
    l_dxf (entget ename)
  )
  (foreach n l_dxf
    (if (member (car n) '(-1 -2 5 330))
      (setq l_dxf (vl-remove n l_dxf))
    )
  )
  (initget 6)
  (setq coeff_manning (getreal "\Coefficient de Manning? <0.015>: "))
  (if (not coeff_manning) (setq coeff_manning 0.015))
  (setq percent (getreal "\nEntrer la valeur de la pente en % ?<3%>: "))
  (if (not percent) (setq percent 3.0))
  (setq percent (/ (abs percent) 100.0))
  (princ "\nSpécifiez un point de hauteur d'eau à l'intérieur de la canalisation: ")
  (while (and (setq key (grread T 4 0)) (/= (car key) 3))
    (cond
      ((eq (car key) 5)
        (if hand_lin (entdel (handent hand_lin)))
        (setq pth (trans (cadr key) 1 0))
        (entmake
          (append
            '(
              (0 . "LINE")
              (100 . "AcDbEntity")
            )
            (if (eq (getvar "CTAB") "Model") '((67 . 0)) '((67 . 1)))
            (list (cons 410 (getvar "CTAB")))
            (list (cons 8 (getvar "CLAYER")))
            '(
              (62 . 256)
              (6 . "ByLayer")
              (370 . -2)
              (100 . "AcDbLine")
            )
            (list (cons 10 pth))
            (list (cons 11 (polar pth 0.0 1.0)))
            '((210 0.0 0.0 1.0))
          )
        )
        (setq dxf_ent (entget (entlast)) hand_lin (cdr (assoc 5 dxf_ent)))
        (if
          (and
          (setq lst_pt
            (l-coor2l-pt
              (vlax-invoke
                (vlax-ename->vla-object (entlast))
                'IntersectWith
                obj
                acExtendThisEntity
              )
              T
            )
          )
          (eq (length lst_pt) 2)
          )
          (progn
            (entmod
              (setq dxf_ent
                (subst (cons 11 (cadr lst_pt)) (assoc 11 dxf_ent)
                  (setq dxf_ent (subst (cons 10 (car lst_pt)) (assoc 10 dxf_ent) dxf_ent))
                )
              )
            )
            (setq first_pt (vlax-curve-getparamatpoint obj (car lst_pt)) secnd_pt (vlax-curve-getparamatpoint obj (cadr lst_pt)))
            (if (> (cadr (vlax-curve-getpointatparam obj (vlax-curve-getEndParam obj))) (cadr pth))
              (setq perim_wet (abs (- (vlax-curve-getDistAtParam obj first_pt) (vlax-curve-getDistAtParam obj secnd_pt))))
              (setq perim_wet
                (+
                  (- (vlax-curve-getDistAtParam obj (vlax-curve-getEndParam obj)) (vlax-curve-getDistAtParam obj (max first_pt secnd_pt)))
                  (vlax-curve-getDistAtParam obj (min first_pt secnd_pt))
                )
              )
            )
            (grtext -1 (strcat "Périmètre mouillé = " (rtos perim_wet 2 2)))
          )
          (progn (setq perim_wet nil) (grtext))
        )
      )
      (T (grtext ""))
    )
  )
  (grtext)
  (if perim_wet
    (progn
      (cond
        ((eq (vla-get-objectname obj) "AcDbEllipse")
          (entmake l_dxf)
          (if (> (cadr pth) (caddr (assoc 10 l_dxf)))
            (progn
              (vla-put-EndParameter obj (- secnd_pt (* 2 pi)))
              (vla-put-StartParameter obj first_pt)
            )
            (progn
              (vla-put-EndParameter obj first_pt)
              (vla-put-StartParameter obj secnd_pt)
            )
          )
        )
        ((eq (vla-get-objectname obj) "AcDbArc")
          (entmake l_dxf)
          (if (> (cadr pth) (caddr (assoc 10 l_dxf)))
            (progn
              (vla-put-StartAngle obj (angle (cdr (assoc 10 l_dxf)) (vlax-curve-getpointatparam obj first_pt)))
              (vla-put-EndAngle obj (angle (cdr (assoc 10 l_dxf)) (vlax-curve-getpointatparam obj secnd_pt)))
            )
            (progn
              (vla-put-StartAngle obj (angle (cdr (assoc 10 l_dxf)) (vlax-curve-getpointatparam obj secnd_pt)))
              (vla-put-EndAngle obj (angle (cdr (assoc 10 l_dxf)) (vlax-curve-getpointatparam obj first_pt)))
            )
          )
        )
        ((eq (vla-get-objectname obj) "AcDbCircle")
          (setq l_dxf
            (append
              (subst '(0 . "ARC") (assoc 0 l_dxf) l_dxf)
              (if (> (cadr pth) (caddr (assoc 10 l_dxf)))
                (list
                  (cons 100 "AcDbArc")
                  (cons 50 (angle (cdr (assoc 10 l_dxf)) (vlax-curve-getpointatparam obj first_pt)))
                  (cons 51 (angle (cdr (assoc 10 l_dxf)) (vlax-curve-getpointatparam obj secnd_pt)))
                )
                (list
                  (cons 100 "AcDbArc")
                  (cons 50 (angle (cdr (assoc 10 l_dxf)) (vlax-curve-getpointatparam obj secnd_pt)))
                  (cons 51 (angle (cdr (assoc 10 l_dxf)) (vlax-curve-getpointatparam obj first_pt)))
                )
              )
            )
          )
          (entmake l_dxf)
          (setq obj (vlax-ename->vla-object (entlast)))
        )
        ((eq (vla-get-objectname obj) "AcDbPolyline")
          (setq lst_pt (l-coor2l-pt (vlax-get obj 'Coordinates) nil))
;         (setq lst_pt (l-coor2l-pt (vlax-safearray->list (vlax-variant-value (vla-get-Coordinates obj))) nil))
          (vla-addVertex
            obj
            (1+ (fix first_pt))
            (vlax-make-variant
              (vlax-safearray-fill
                (vlax-make-safearray vlax-vbdouble (cons 0 1))
                (list
                  (car (trans (vlax-curve-getpointatparam obj first_pt) 0 ename))
                  (cadr (trans (vlax-curve-getpointatparam obj first_pt) 0 ename))
                )
              )
            )
          )
          (setq bulg (vla-GetBulge obj (fix first_pt)))
          (vla-SetBulge obj (fix first_pt)
            (/
              (sin (/ (* 4 (atan bulg) (- first_pt (fix first_pt))) 4))
              (cos (/ (* 4 (atan bulg) (- first_pt (fix first_pt))) 4))
            )
          )
          (vla-SetBulge obj (1+ (fix first_pt))
            (/
              (sin (/ (* 4 (atan bulg) (- (1+ (fix first_pt)) first_pt)) 4))
              (cos (/ (* 4 (atan bulg) (- (1+ (fix first_pt)) first_pt)) 4))
            )
          )
;         (vla-update obj)
          (vla-addVertex
            obj
            (1+ (1+ (fix secnd_pt)))
            (vlax-make-variant
              (vlax-safearray-fill
                (vlax-make-safearray vlax-vbdouble (cons 0 1))
                (list
                  (car (trans (vlax-curve-getpointatparam obj (1+ secnd_pt)) 0 ename))
                  (cadr (trans (vlax-curve-getpointatparam obj (1+ secnd_pt)) 0 ename))
                )
              )
            )
          )
          (setq bulg (vla-GetBulge obj (1+ (fix secnd_pt))))
          (vla-SetBulge obj (1+ (fix secnd_pt))
            (/
              (sin (/ (* 4 (atan bulg) (- secnd_pt (fix secnd_pt))) 4))
              (cos (/ (* 4 (atan bulg) (- secnd_pt (fix secnd_pt))) 4))
            )
          )
          (vla-SetBulge obj (1+ (1+ (fix secnd_pt)))
            (/
              (sin (/ (* 4 (atan bulg) (- (1+ (fix secnd_pt)) secnd_pt)) 4))
              (cos (/ (* 4 (atan bulg) (- (1+ (fix secnd_pt)) secnd_pt)) 4))
            )
          )
          (vla-update obj)
        )
      )
      (setq
        area_wet (vla-get-Area obj)
        hydraulic_ray (/ area_wet perim_wet)
        q_deb_Manning (* area_wet (expt hydraulic_ray (/ 2 3.0)) (sqrt percent) (/ 1 coeff_manning))
      )
      (princ "\nPérimètre mouillé = ") (princ perim_wet)
      (princ "\nSurface mouillée  = ") (princ area_wet)
      (princ "\nRayon hydraulique = ") (princ hydraulic_ray)
      (princ "\nDébit hydraulique en m3/s = ") (princ q_deb_Manning)
    )
    (entdel (entlast))
  )
  (prin1)
)

 

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

Posté(e)

Salut Bonuscad,

les résultats semblent juste, d'après ma feuille de calcul

mais c'est plus au niveau de formulation des cadres sur excel ou j'ai un soucis.

petit soucis dans le lisp au moment de sélectionner le point intérieur de la conduite on perd les accroches objets et si on les réactivent on sort du programme.

certains diront que les goussets sont négligeables ... un delta de 2 3 cm sur le rayon hydraulique

Voilà ce que je suis entrain de monter à mes temps perdus ... une base excel qui va servir de base au xml de covadis

Capture.PNG

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é