GaugeGadget - Version 2.1.0

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

GaugeGadget - Version 2.1.0

Message par Guimauve »

Bonjour à tous,

J'avais besoin de me changer les idées et en parcourant le forum Anglais, Trond à présenté un code à propos d'un GaugeGadget (Un cadran indicateur avec une aiguille). Son code fonctionnait très bien mais je n'aimais pas l'aiguille. J'ai donc repris le code en question je l'ai revu et amélioré.

Édit 1 : Cette version devrait être plus rapide que la précédente. De plus, la librairie Image Rotation routine programmée par Luis n'est plus nécessaire.

Édit 2 : La version 2.0.0 avec un dessin plus beau et dessin de ce qui est seulement nécessaire lors des rafraîchissements de la jauge.

Édit 3 : La version 2.1.0 Optimisation de la vitesse d'affichage, suppression d'éléments superflus. Il manque les commandes pour changer les couleurs de l'aiguille et de l'échelle.

A+
Guimauve

Code : Tout sélectionner

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Project name : GaugeGadget
; File Name : GaugeGadget.pb
; File version: 2.1.0
; Programmation : OK
; Programmed by : Trond
; Modified by : Guimauve
; Date : 20-02-2011
; Mise à jour : 22-05-2011
; PureBasic code : 4.51
; Plateform : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Notes :
;
; Some field in the Gauge Structure has been 
; renamed or suppressed.
; 
; A layer has been added for the Needle. The size 
; for this layer is 4 times larger than other 
; layer. This is needed to draw the needle more 
; smootly. 
;
; Finally, the GaugeGadget shape can be square
; only.
;
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration de la Structure <<<<<

Structure Gauge
  
  PosX.w
  PosY.w
  Size.w
  Center.w
  ScaleRadius.w
  Min.l
  Max.l
  BigStep.l
  SmallStep.l
  SectorDegrees.w
  Value.l
  Text.s
  SubText.s
  GadgetID.l
  GadgetHandle.l
  BackGroundColor.l
  ScaleColor.l
  ScaleBackGroundColor.l
  TextColor.l
  SubTextColor.l
  NeedleColor.l
  ScaleFontHandle.i
  TextFontHandle.i
  SubTextFontHandle.i
  LayerSize.w
  NeedleLength.l
  NeedlePivotRadius.l
  NeedleTipWidth.l
  NeedleCenWidth.l
  ScaleLayer.l
  NeedleLayer.l
  ComposedLayer.l
  
EndStructure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs <<<<<

Macro GetGaugePosX(GaugeA)
  
  GaugeA\PosX
  
EndMacro

Macro GetGaugePosY(GaugeA)
  
  GaugeA\PosY
  
EndMacro

Macro GetGaugeSize(GaugeA)
  
  GaugeA\Size
  
EndMacro

Macro GetGaugeCenter(GaugeA)
  
  GaugeA\Center
  
EndMacro

Macro GetGaugeScaleRadius(GaugeA)
  
  GaugeA\ScaleRadius
  
EndMacro

Macro GetGaugeMin(GaugeA)
  
  GaugeA\Min
  
EndMacro

Macro GetGaugeMax(GaugeA)
  
  GaugeA\Max
  
EndMacro

Macro GetGaugeBigStep(GaugeA)
  
  GaugeA\BigStep
  
EndMacro

Macro GetGaugeSmallStep(GaugeA)
  
  GaugeA\SmallStep
  
EndMacro

Macro GetGaugeSectorDegrees(GaugeA)
  
  GaugeA\SectorDegrees
  
EndMacro

Macro GetGaugeValue(GaugeA)
  
  GaugeA\Value
  
EndMacro

Macro GetGaugeText(GaugeA)
  
  GaugeA\Text
  
EndMacro

Macro GetGaugeSubText(GaugeA)
  
  GaugeA\SubText
  
EndMacro

Macro GetGaugeGadgetID(GaugeA)
  
  GaugeA\GadgetID
  
EndMacro

Macro GetGaugeGadgetHandle(GaugeA)
  
  GaugeA\GadgetHandle
  
EndMacro

Macro GetGaugeBackGroundColor(GaugeA)
  
  GaugeA\BackGroundColor
  
EndMacro

Macro GetGaugeScaleColor(GaugeA)
  
  GaugeA\ScaleColor
  
EndMacro

Macro GetGaugeScaleBackGroundColor(GaugeA)
  
  GaugeA\ScaleBackGroundColor
  
EndMacro

Macro GetGaugeTextColor(GaugeA)
  
  GaugeA\TextColor
  
EndMacro

Macro GetGaugeSubTextColor(GaugeA)
  
  GaugeA\SubTextColor
  
EndMacro

Macro GetGaugeNeedleColor(GaugeA)
  
  GaugeA\NeedleColor
  
EndMacro

Macro GetGaugeScaleFontHandle(GaugeA)
  
  GaugeA\ScaleFontHandle
  
EndMacro

Macro GetGaugeTextFontHandle(GaugeA)
  
  GaugeA\TextFontHandle
  
EndMacro

Macro GetGaugeSubTextFontHandle(GaugeA)
  
  GaugeA\SubTextFontHandle
  
EndMacro

Macro GetGaugeLayerSize(GaugeA)
  
  GaugeA\LayerSize
  
EndMacro

Macro GetGaugeNeedleLength(GaugeA)
  
  GaugeA\NeedleLength
  
EndMacro

Macro GetGaugeNeedlePivotRadius(GaugeA)
  
  GaugeA\NeedlePivotRadius
  
EndMacro

Macro GetGaugeNeedleTipWidth(GaugeA)
  
  GaugeA\NeedleTipWidth
  
EndMacro

Macro GetGaugeNeedleCenWidth(GaugeA)
  
  GaugeA\NeedleCenWidth
  
EndMacro

Macro GetGaugeScaleLayer(GaugeA)
  
  GaugeA\ScaleLayer
  
EndMacro

Macro GetGaugeNeedleLayer(GaugeA)
  
  GaugeA\NeedleLayer
  
EndMacro

Macro GetGaugeComposedLayer(GaugeA)
  
  GaugeA\ComposedLayer
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs <<<<<

Macro SetGaugePosX(GaugeA, P_PosX)
  
  GetGaugePosX(GaugeA) = P_PosX
  
EndMacro

Macro SetGaugePosY(GaugeA, P_PosY)
  
  GetGaugePosY(GaugeA) = P_PosY
  
EndMacro

Macro SetGaugeSize(GaugeA, P_Size)
  
  GetGaugeSize(GaugeA) = P_Size
  
EndMacro

Macro SetGaugeCenter(GaugeA, P_Center)
  
  GetGaugeCenter(GaugeA) = P_Center
  
EndMacro

Macro SetGaugeScaleRadius(GaugeA, P_ScaleRadius)
  
  GetGaugeScaleRadius(GaugeA) = P_ScaleRadius
  
EndMacro

Macro SetGaugeMin(GaugeA, P_Min)
  
  GetGaugeMin(GaugeA) = P_Min
  
EndMacro

Macro SetGaugeMax(GaugeA, P_Max)
  
  GetGaugeMax(GaugeA) = P_Max
  
EndMacro

Macro SetGaugeBigStep(GaugeA, P_BigStep)
  
  GetGaugeBigStep(GaugeA) = P_BigStep
  
EndMacro

Macro SetGaugeSmallStep(GaugeA, P_SmallStep)
  
  GetGaugeSmallStep(GaugeA) = P_SmallStep
  
EndMacro

Macro SetGaugeSectorDegrees(GaugeA, P_SectorDegrees)
  
  GetGaugeSectorDegrees(GaugeA) = P_SectorDegrees
  
EndMacro

Macro SetGaugeValue(GaugeA, P_Value)
  
  GetGaugeValue(GaugeA) = P_Value
  
EndMacro

Macro SetGaugeText(GaugeA, P_Text)
  
  GetGaugeText(GaugeA) = P_Text
  
EndMacro

Macro SetGaugeSubText(GaugeA, P_SubText)
  
  GetGaugeSubText(GaugeA) = P_SubText
  
EndMacro

Macro SetGaugeGadgetID(GaugeA, P_GadgetID)
  
  GetGaugeGadgetID(GaugeA) = P_GadgetID
  
EndMacro

Macro SetGaugeGadgetHandle(GaugeA, P_GadgetHandle)
  
  GetGaugeGadgetHandle(GaugeA) = P_GadgetHandle
  
EndMacro

Macro SetGaugeBackGroundColor(GaugeA, P_BackGroundColor)
  
  GetGaugeBackGroundColor(GaugeA) = P_BackGroundColor
  
EndMacro

Macro SetGaugeScaleColor(GaugeA, P_ScaleColor)
  
  GetGaugeScaleColor(GaugeA) = P_ScaleColor
  
EndMacro

Macro SetGaugeScaleBackGroundColor(GaugeA, P_ScaleBackGroundColor)
  
  GetGaugeScaleBackGroundColor(GaugeA) = P_ScaleBackGroundColor
  
EndMacro

Macro SetGaugeTextColor(GaugeA, P_TextColor)
  
  GetGaugeTextColor(GaugeA) = P_TextColor
  
EndMacro

Macro SetGaugeSubTextColor(GaugeA, P_SubTextColor)
  
  GetGaugeSubTextColor(GaugeA) = P_SubTextColor
  
EndMacro

Macro SetGaugeNeedleColor(GaugeA, P_NeedleColor)
  
  GetGaugeNeedleColor(GaugeA) = P_NeedleColor
  
EndMacro

Macro SetGaugeScaleFontHandle(GaugeA, P_ScaleFontHandle)
  
  GetGaugeScaleFontHandle(GaugeA) = P_ScaleFontHandle
  
EndMacro

Macro SetGaugeTextFontHandle(GaugeA, P_TextFontHandle)
  
  GetGaugeTextFontHandle(GaugeA) = P_TextFontHandle
  
EndMacro

Macro SetGaugeSubTextFontHandle(GaugeA, P_SubTextFontHandle)
  
  GetGaugeSubTextFontHandle(GaugeA) = P_SubTextFontHandle
  
EndMacro

Macro SetGaugeLayerSize(GaugeA, P_LayerSize)
  
  GetGaugeLayerSize(GaugeA) = P_LayerSize
  
EndMacro

Macro SetGaugeNeedleLength(GaugeA, P_NeedleLength)
  
  GetGaugeNeedleLength(GaugeA) = P_NeedleLength
  
EndMacro

Macro SetGaugeNeedlePivotRadius(GaugeA, P_NeedlePivotRadius)
  
  GetGaugeNeedlePivotRadius(GaugeA) = P_NeedlePivotRadius
  
EndMacro

Macro SetGaugeNeedleTipWidth(GaugeA, P_NeedleTipWidth)
  
  GetGaugeNeedleTipWidth(GaugeA) = P_NeedleTipWidth
  
EndMacro

Macro SetGaugeNeedleCenWidth(GaugeA, P_NeedleCenWidth)
  
  GetGaugeNeedleCenWidth(GaugeA) = P_NeedleCenWidth
  
EndMacro

Macro SetGaugeScaleLayer(GaugeA, P_ScaleLayer)
  
  GetGaugeScaleLayer(GaugeA) = P_ScaleLayer
  
EndMacro

Macro SetGaugeNeedleLayer(GaugeA, P_NeedleLayer)
  
  GetGaugeNeedleLayer(GaugeA) = P_NeedleLayer
  
EndMacro

Macro SetGaugeComposedLayer(GaugeA, P_ComposedLayer)
  
  GetGaugeComposedLayer(GaugeA) = P_ComposedLayer
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code généré en : 00.010 secondes (49500.00 lignes/seconde) <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Reset <<<<<

Macro ResetGauge(GaugeA)
  
  SetGaugePosX(GaugeA, 0)
  SetGaugePosY(GaugeA, 0)
  SetGaugeSize(GaugeA, 0)
  SetGaugeScaleRadius(GaugeA, 0)
  SetGaugeMin(GaugeA, 0)
  SetGaugeMax(GaugeA, 0)
  SetGaugeBigStep(GaugeA, 0)
  SetGaugeSmallStep(GaugeA, 0)
  SetGaugeValue(GaugeA, 0)
  SetGaugeText(GaugeA, "")
  SetGaugeSubText(GaugeA, "")
  SetGaugeGadgetID(GaugeA, 0)
  SetGaugeGadgetHandle(GaugeA, 0)
  SetGaugeBackGroundColor(GaugeA, 0)
  SetGaugeScaleColor(GaugeA, 0)
  SetGaugeScaleBackGroundColor(GaugeA, 0)
  SetGaugeTextColor(GaugeA, 0)
  SetGaugeSubTextColor(GaugeA, 0)
  SetGaugeNeedleColor(GaugeA, 0)
  SetGaugeLayerSize(GaugeA, 0)
  SetGaugeNeedleLength(GaugeA, 0)
  SetGaugeNeedlePivotRadius(GaugeA, 0)
  SetGaugeNeedleTipWidth(GaugeA, 0)
  SetGaugeNeedleCenWidth(GaugeA, 0)
  
  If GetGaugeScaleFontHandle(GaugeA)
    FreeFont(GetGaugeScaleFontHandle(GaugeA))
    SetGaugeScaleFontHandle(GaugeA, 0)
  EndIf
  
  If GetGaugeTextFontHandle(GaugeA)
    FreeFont(GetGaugeTextFontHandle(GaugeA))
    SetGaugeTextFontHandle(GaugeA, 0)
  EndIf
  
  If GetGaugeSubTextFontHandle(GaugeA)
    FreeFont(GetGaugeSubTextFontHandle(GaugeA))
    SetGaugeSubTextFontHandle(GaugeA, 0)
  EndIf
  
  If GetGaugeScaleLayer(GaugeA)
    FreeImage(GetGaugeScaleLayer(GaugeA))
    SetGaugeScaleLayer(GaugeA, 0)
  EndIf 
  
  If GetGaugeNeedleLayer(GaugeA)
    FreeImage(GetGaugeNeedleLayer(GaugeA))
    SetGaugeNeedleLayer(GaugeA, 0)
  EndIf 
  
  If GetGaugeComposedLayer(GaugeA)
    FreeImage(GetGaugeComposedLayer(GaugeA))
    SetGaugeComposedLayer(GaugeA, 0)
  EndIf 
  
EndMacro

Macro ResizeGaugeGadget(GaugeA)
  
  If GetGaugeGadgetID(GaugeA) <> #PB_Any
    ResizeGadget(GetGaugeGadgetID(GaugeA), GetGaugePosX(GaugeA), GetGaugePosY(GaugeA), #PB_Ignore, #PB_Ignore)
  Else     
    ResizeGadget(GetGaugeGadgetHandle(GaugeA), GetGaugePosX(GaugeA), GetGaugePosY(GaugeA), #PB_Ignore, #PB_Ignore)
  EndIf 
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Dessiner un texte centré en x, y <<<<<

Macro DrawTextCentered(x, y, Text, FrontColor, BackColor)
  
  DrawText(x - TextWidth(Text) >> 1, y - TextHeight("Wg") >> 1, Text, FrontColor, BackColor)
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Trouver la plus grande valeur de type double <<<<<

Procedure.d MaxDouble(P_Number01.d, P_Number02.d)
  
  Biggest_Double.d = P_Number01
  
  If P_Number02 > Biggest_Double
    Biggest_Double = P_Number02
  EndIf
  
  ProcedureReturn Biggest_Double
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Trouver la plus grande valeur de type long <<<<<

Procedure.l MaxLong(P_Number01.l, P_Number02.l)
  
  Biggest_Long.l = P_Number01
  
  If P_Number02 > Biggest_Long
    Biggest_Long = P_Number02
  EndIf
  
  ProcedureReturn Biggest_Long
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs spéciaux <<<<<

Macro SetGaugePositionSize(GaugeA, P_X, P_Y, P_Size)
  
  SetGaugePosX(GaugeA, P_X)
  SetGaugePosY(GaugeA, P_Y)
  SetGaugeSize(GaugeA, P_Size)
  
EndMacro 

Macro SetGaugeTextEx(GaugeA, Text, Color_RGBA)
  
  SetGaugeText(GaugeA, Text)
  SetGaugeTextColor(GaugeA, Color_RGBA)
  
EndMacro 

Macro SetGaugeSubTextEx(GaugeA, SubText, Color_RGBA)
  
  SetGaugeSubText(GaugeA, SubText)
  SetGaugeSubTextColor(GaugeA, Color_RGBA)
  
EndMacro 

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeBackground <<<<<

Macro PaintGaugeBackground(GaugeA)
  
  DrawingMode(#PB_2DDrawing_AllChannels)
  Box(0, 0, GetGaugeLayerSize(GaugeA), GetGaugeLayerSize(GaugeA), GetGaugeBackGroundColor(GaugeA))
  
  ; DrawingMode(#PB_2DDrawing_AllChannels | #PB_2DDrawing_Outlined)
  ; Box(0, 0, GetGaugeSize(GaugeA), GetGaugeSize(GaugeA), RGBA(0, 0, 0, 32))
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeScale <<<<<

Macro PaintGaugeScale(GaugeA)
  
  StartDegree.i = ((360 - GetGaugeSectorDegrees(GaugeA)) >> 1)
  
  wpx = GetGaugeLayerSize(GaugeA) / 33
  wpx2 = wpx / 4.0 * 3 - 1
  
  SmallStepDegrees.d = GetGaugeSmallStep(GaugeA) / GetGaugeMax(GaugeA) * GetGaugeSectorDegrees(GaugeA)
  BigStepDegrees.d = GetGaugeBigStep(GaugeA) / GetGaugeMax(GaugeA) * GetGaugeSectorDegrees(GaugeA)
  
  DrawingMode(#PB_2DDrawing_AllChannels)
  
  For I = 0 To GetGaugeSectorDegrees(GaugeA)
    x = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
    y = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
    Circle(x, y, wpx, GetGaugeScaleColor(GaugeA))
  Next
  
  DrawingMode(#PB_2DDrawing_AllChannels)
  
  For I = 0 To GetGaugeSectorDegrees(GaugeA)
    x = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
    y = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
    Circle(x, y, wpx2, GetGaugeScaleBackGroundColor(GaugeA))
  Next
  
  dI.d = 0
  
  While dI <= GetGaugeSectorDegrees(GaugeA)
    x1 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx2)
    y1 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx2)
    x2 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - (wpx2 / 2))
    y2 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - (wpx2 / 2))
    LineXY(x1, y1, x2, y2, GetGaugeScaleColor(GaugeA))
    dI + SmallStepDegrees
  Wend
  
  dI = 0
  
  While dI <= GetGaugeSectorDegrees(GaugeA) + 1 ;?!
    x1 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx)
    y1 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx)
    x2 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx)
    y2 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx)
    LineXY(x1, y1, x2, y2, GetGaugeScaleColor(GaugeA))
    dI + BigStepDegrees
  Wend
  
  DrawingMode(#PB_2DDrawing_AlphaBlend | #PB_2DDrawing_Transparent)
  DrawingFont(FontID(GetGaugeScaleFontHandle(GaugeA)))
  
  dI = 0
  I = 0
  
  While dI <= GetGaugeSectorDegrees(GaugeA) + 1 ; not sure why that is needed
    
    Offset.w = MaxLong(3, Len(Str(GetGaugeMax(GaugeA) - I)))
    
    x = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx * Offset)
    y = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx * Offset)
    DrawTextCentered(x, y, Str(GetGaugeMax(GaugeA) - I), GetGaugeTextColor(GaugeA), RGBA(0, 0, 0, 0))
    dI + BigStepDegrees
    I + GetGaugeBigStep(GaugeA)
    
  Wend
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeDescription <<<<<

Macro PaintGaugeDescription(GaugeA)
  
  DrawingMode(#PB_2DDrawing_AlphaBlend | #PB_2DDrawing_Transparent)
  DrawingFont(FontID(GetGaugeTextFontHandle(GaugeA)))
  
  x = GetGaugeCenter(GaugeA)
  y = 32 * GetGaugeSize(GaugeA) / 10
  
  DrawTextCentered(x, y, GetGaugeText(GaugeA), GetGaugeTextColor(GaugeA), RGBA(0, 0, 0, 0))
  y + TextHeight("Wg")
  
  DrawingFont(FontID(GetGaugeSubTextFontHandle(GaugeA)))
  DrawTextCentered(x, y, GetGaugeSubText(GaugeA), GetGaugeSubTextColor(GaugeA), RGBA(0, 0, 0, 0))
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeHand <<<<<

Macro PaintGaugeNeedle(GaugeA)
  
  DrawingMode(#PB_2DDrawing_AllChannels)
  
  HalfSize = GetGaugeLayerSize(GaugeA) >> 1
  
  StartDegree.i = ((360 - GetGaugeSectorDegrees(GaugeA)) >> 1)
  DirDegrees.d = StartDegree + (GetGaugeMax(GaugeA) - GetGaugeValue(GaugeA)) / GetGaugeMax(GaugeA) * GetGaugeSectorDegrees(GaugeA)
  
  SinAngle.d = Sin(Radian(-DirDegrees))
  CosAngle.d = Cos(Radian(-DirDegrees))
  
  x1 = HalfSize + (GetGaugeNeedleCenWidth(GaugeA) * CosAngle); - 0 * SinAngle)
  y1 = HalfSize + (GetGaugeNeedleCenWidth(GaugeA) * SinAngle); + 0 * CosAngle)
  
  x2 = HalfSize + (-GetGaugeNeedleCenWidth(GaugeA) * CosAngle); - 0 * SinAngle)
  y2 = HalfSize + (-GetGaugeNeedleCenWidth(GaugeA) * SinAngle); + 0 * CosAngle)
  
  x3 = HalfSize + (-GetGaugeNeedleTipWidth(GaugeA) * CosAngle - GetGaugeNeedleLength(GaugeA) * SinAngle)
  y3 = HalfSize + (-GetGaugeNeedleTipWidth(GaugeA) * SinAngle + GetGaugeNeedleLength(GaugeA) * CosAngle)
  
  x4 = HalfSize + (GetGaugeNeedleTipWidth(GaugeA) * CosAngle - GetGaugeNeedleLength(GaugeA) * SinAngle)
  y4 = HalfSize + (GetGaugeNeedleTipWidth(GaugeA) * SinAngle + GetGaugeNeedleLength(GaugeA) * CosAngle)
  
  x5 = HalfSize + (-15 * SinAngle); + 0 * CosAngle)
  y5 = HalfSize + (15 * CosAngle); + 0 * SinAngle)
  
  LineXY(x1, y1, x2, y2, GetGaugeNeedleColor(GaugeA))
  LineXY(x2, y2, x3, y3, GetGaugeNeedleColor(GaugeA))
  LineXY(x3, y3, x4, y4, GetGaugeNeedleColor(GaugeA))
  LineXY(x4, y4, x1, y1, GetGaugeNeedleColor(GaugeA))
  
  FillArea(x5, y5, GetGaugeNeedleColor(GaugeA), GetGaugeNeedleColor(GaugeA))
  
  Circle(HalfSize, HalfSize, GetGaugeNeedlePivotRadius(GaugeA), GetGaugeNeedleColor(GaugeA))
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur LoadGaugeFont <<<<<

Procedure LoadGaugeFont(*GaugeA.Gauge, FontName.s)
  
  If GetGaugeScaleFontHandle(*GaugeA)
    FreeFont(GetGaugeScaleFontHandle(*GaugeA))
  EndIf
  
  If GetGaugeTextFontHandle(*GaugeA)
    FreeFont(GetGaugeTextFontHandle(*GaugeA))
  EndIf
  
  If GetGaugeSubTextFontHandle(*GaugeA)
    FreeFont(GetGaugeSubTextFontHandle(*GaugeA))
  EndIf
  
  SetGaugeScaleFontHandle(*GaugeA, LoadFont(#PB_Any, FontName, 4 * MaxDouble(8, 0.04 * GetGaugeSize(*GaugeA))))
  SetGaugeTextFontHandle(*GaugeA, LoadFont(#PB_Any, FontName, 4 * MaxDouble(9, 0.056 * GetGaugeSize(*GaugeA)), #PB_Font_Bold))
  SetGaugeSubTextFontHandle(*GaugeA, LoadFont(#PB_Any, FontName, 4 * MaxDouble(8, 0.04 * GetGaugeSize(*GaugeA))))
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RepaintGaugeLayer <<<<<

Procedure RepaintGaugeLayer(*GaugeA.Gauge, Needle.b, Scale.b)
  
  If Needle = #True
    
    If GetGaugeNeedleLayer(*GaugeA)
      FreeImage(GetGaugeNeedleLayer(*GaugeA))
    EndIf 
    
    SetGaugeNeedleLayer(*GaugeA, CreateImage(#PB_Any, GetGaugeLayerSize(*GaugeA), GetGaugeLayerSize(*GaugeA), 32 | #PB_Image_Transparent))
    
    If StartDrawing(ImageOutput(GetGaugeNeedleLayer(*GaugeA)))
      PaintGaugeNeedle(*GaugeA)
      StopDrawing()
    EndIf 
    
    ResizeImage(GetGaugeNeedleLayer(*GaugeA), GetGaugeSize(*GaugeA), GetGaugeSize(*GaugeA))
    
  EndIf
  
  If Scale = #True 
    
    If GetGaugeScaleLayer(*GaugeA)
      FreeImage(GetGaugeScaleLayer(*GaugeA))
    EndIf 
    
    SetGaugeScaleLayer(*GaugeA, CreateImage(#PB_Any, GetGaugeLayerSize(*GaugeA), GetGaugeLayerSize(*GaugeA), 32 | #PB_Image_Transparent))
    
    If StartDrawing(ImageOutput(GetGaugeScaleLayer(*GaugeA)))
      PaintGaugeBackground(*GaugeA)
      PaintGaugeScale(*GaugeA)
      PaintGaugeDescription(*GaugeA)
      StopDrawing()
    EndIf 
    
    ResizeImage(GetGaugeScaleLayer(*GaugeA), GetGaugeSize(*GaugeA), GetGaugeSize(*GaugeA))
    
  EndIf
  
EndProcedure 

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RefreshGaugeGadget <<<<<

Procedure RefreshGaugeGadget(*GaugeA.Gauge)
  
  If GetGaugeComposedLayer(*GaugeA)
    FreeImage(GetGaugeComposedLayer(*GaugeA))
  EndIf
  
  SetGaugeComposedLayer(*GaugeA, CreateImage(#PB_Any, GetGaugeSize(*GaugeA), GetGaugeSize(*GaugeA), 32 | #PB_Image_Transparent))
  
  If StartDrawing(ImageOutput(GetGaugeComposedLayer(*GaugeA)))
    
    DrawingMode(#PB_2DDrawing_AlphaBlend)
    DrawImage(ImageID(GetGaugeScaleLayer(*GaugeA)), 0, 0)
    DrawImage(ImageID(GetGaugeNeedleLayer(*GaugeA)), 0, 0)
    StopDrawing()
    
  EndIf 
  
  If GetGaugeGadgetID(*GaugeA) <> #PB_Any
    SetGadgetState(GetGaugeGadgetID(*GaugeA), ImageID(GetGaugeComposedLayer(*GaugeA)))
  Else     
    SetGadgetState(GetGaugeGadgetHandle(*GaugeA), ImageID(GetGaugeComposedLayer(*GaugeA)))
  EndIf 
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur GaugeGadget <<<<<

Procedure GaugeGadget(*GaugeA.Gauge, GaugeID.l, x.w, y.w, Size.w, FontName.s = "", Options.l = 0)
  
  SetGaugeGadgetID(*GaugeA, GaugeID)
  SetGaugeGadgetHandle(*GaugeA, ImageGadget(GetGaugeGadgetID(*GaugeA), x, y, Size, Size, 0, Options))
  
  If GetGaugeGadgetID(*GaugeA) <> #PB_Any
    SetGadgetData(GetGaugeGadgetID(*GaugeA), *GaugeA)
  Else
    
  EndIf 
  
  SetGaugePositionSize(*GaugeA, x, y, Size)
  
  SetGaugeCenter(*GaugeA, (4*Size) >> 1)
  SetGaugeScaleRadius(*GaugeA, 4 * Size * 3 / 10)
  
  SetGaugeLayerSize(*GaugeA, Size * 4)
  
  SetGaugeNeedleLength(*GaugeA, (1 + GetGaugeScaleRadius(*GaugeA)))
  SetGaugeNeedlePivotRadius(*GaugeA, GetGaugeNeedleLength(*GaugeA) / 10)
  SetGaugeNeedleTipWidth(*GaugeA, GetGaugeNeedlePivotRadius(*GaugeA) / 7)
  SetGaugeNeedleCenWidth(*GaugeA, GetGaugeNeedlePivotRadius(*GaugeA) / 2)
  
  If FontName <> ""
    LoadGaugeFont(*GaugeA, FontName)
  EndIf 
  
  SetGaugeSectorDegrees(*GaugeA, 270)
  
  SetGaugeBackGroundColor(*GaugeA, RGBA(0, 0, 0, 0))
  SetGaugeScaleColor(*GaugeA, RGBA(62, 62, 128, 192))
  SetGaugeScaleBackGroundColor(*GaugeA, RGBA(64, 64, 64, 32))
  SetGaugeTextColor(*GaugeA, RGBA(0, 0, 0, 255))
  SetGaugeSubTextColor(*GaugeA, RGBA(92, 92, 92, 255))
  SetGaugeNeedleColor(*GaugeA, RGBA(255, 000, 000, 255))
  SetGaugeMin(*GaugeA, 0)
  SetGaugeMax(*GaugeA, 100)
  SetGaugeBigStep(*GaugeA, 10)
  SetGaugeSmallStep(*GaugeA, 5)
  SetGaugeValue(*GaugeA, 0)
  SetGaugeText(*GaugeA, "Value")
  SetGaugeSubText(*GaugeA, "in units")
  
  RepaintGaugeLayer(*GaugeA, #True, #True)
  RefreshGaugeGadget(*GaugeA)
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur ChangeGaugeGadgetValue <<<<<

Procedure ChangeGaugeGadgetValue(*GaugeA.Gauge, P_Value.l)
  
  SetGaugeValue(*GaugeA, P_Value)
  RepaintGaugeLayer(*GaugeA, #True, #False)
  RefreshGaugeGadget(*GaugeA)
  
EndProcedure

Procedure ChangeGaugeGadgetSectorDegrees(*GaugeA.Gauge, P_SectorDegrees.l)
  
  SetGaugeSectorDegrees(*GaugeA, P_SectorDegrees)
  RepaintGaugeLayer(*GaugeA, #True, #True)
  RefreshGaugeGadget(*GaugeA)
  
EndProcedure

Procedure ChangeGaugeGadgetMinMaxSteps(*GaugeA.Gauge, P_Min.l, P_Max.l, P_BigStep.l, P_SmallStep.l)
  
  SetGaugeMin(*GaugeA, P_Min)
  SetGaugeMax(*GaugeA, P_Max)
  SetGaugeBigStep(*GaugeA, P_BigStep)
  SetGaugeSmallStep(*GaugeA, P_SmallStep)
  RepaintGaugeLayer(*GaugeA, #False, #True)
  RefreshGaugeGadget(*GaugeA)
  
EndProcedure

Procedure ChangeGaugeGadgetDescription(*GaugeA.Gauge, P_Text.s, P_SubText.s)
  
  SetGaugeText(*GaugeA, P_Text)
  SetGaugeSubText(*GaugeA, P_SubText)
  RepaintGaugeLayer(*GaugeA, #False, #True)
  RefreshGaugeGadget(*GaugeA)
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
; <<<<< !!! WARNING - YOU ARE NOW IN A TESTING ZONE - WARNING !!! <<<<< 
; <<<<< !!! WARNING - THIS CODE SHOULD BE COMMENTED - WARNING !!! <<<<< 
; <<<<< !!! WARNING - BEFORE THE FINAL COMPILATION. - WARNING !!! <<<<< 
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 

#Size = 200

#W = 2 * #Size + 145
#H = 2 * #Size + 25

CompilerSelect #PB_Compiler_OS
    
  CompilerCase #PB_OS_Linux
    FontName.s = "Liberation Sans"
    
  CompilerCase #PB_OS_Windows
    FontName.s = "Tahoma"
    
CompilerEndSelect

If OpenWindow(0, 0, 0, #W, #H, "Gauge Gadget Demo", #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)

  TrackBarGadget(0, 5, 5, 20, #Size, 0, 3600, #PB_TrackBar_Vertical)
  TrackBarGadget(1, 30, 5, 20, #Size, 1, 360, #PB_TrackBar_Vertical)  
  SetGadgetState(0, 0)
  SetGadgetState(1, 270)
  
  GaugeGadget(Pressure.Gauge, 3, 55, 5, #Size, FontName, 1)
  ChangeGaugeGadgetMinMaxSteps(Pressure, 0, 3600, 300, 150)
  ChangeGaugeGadgetDescription(Pressure, "Pressure", "in kPa")
  
  
  TrackBarGadget(4, 85 + #Size, 5, 20, #Size, 0, 200, #PB_TrackBar_Vertical)
  TrackBarGadget(5, 110 + #Size, 5, 20, #Size, 1, 360, #PB_TrackBar_Vertical)
  SetGadgetState(4, 0)
  SetGadgetState(5, 250)
  
  GaugeGadget(Temperature.Gauge, 6, 135 + #Size, 5, #Size, FontName, 1)
  ChangeGaugeGadgetMinMaxSteps(Temperature, 0, 200, 20, 5)
  ChangeGaugeGadgetDescription(Temperature, "Temperature", "in K")
  ChangeGaugeGadgetSectorDegrees(Temperature, 250)
  
  
  
  TrackBarGadget(7, 5 , 15 + #Size, 20, #Size, 0, 100, #PB_TrackBar_Vertical)
  TrackBarGadget(8, 30, 15 + #Size, 20, #Size, 1, 360, #PB_TrackBar_Vertical)
  SetGadgetState(7, 0)
  SetGadgetState(8, 270)
  
  GaugeGadget(Humidity.Gauge, 9, 55, 15 + #Size, #Size, FontName, 1)
  ChangeGaugeGadgetMinMaxSteps(Humidity, 0, 100, 10, 5)
  ChangeGaugeGadgetDescription(Humidity, "Humidity", "in %")
  

  

  TrackBarGadget(10, 85 + #Size, 15 + #Size, 20, #Size, 0, 50, #PB_TrackBar_Vertical)
  TrackBarGadget(11, 110 + #Size, 15 + #Size, 20, #Size, 1, 360, #PB_TrackBar_Vertical)
  SetGadgetState(10, 0)
  SetGadgetState(11, 250)
  
  GaugeGadget(Density.Gauge, 12, 135 + #Size, 15 + #Size, #Size, FontName, 1)
  ChangeGaugeGadgetMinMaxSteps(Density, 0, 50, 5, 1)
  ChangeGaugeGadgetDescription(Density, "Density", "kg/m³")
  

    
  Repeat
    
    Select WaitWindowEvent()
        
      Case #PB_Event_Gadget 
        
        Select EventGadget()
            
          Case 0 ; Change value
            ChangeGaugeGadgetValue(Pressure, GetGadgetState(0))
            
          Case 1 ; Change size in degrees
            ChangeGaugeGadgetSectorDegrees(Pressure, GetGadgetState(1))
            
          Case 4 ; Change value
            ChangeGaugeGadgetValue(Temperature, GetGadgetState(4))
            
          Case 5 ; Change size in degrees
            ChangeGaugeGadgetSectorDegrees(Temperature, GetGadgetState(5))
            
          Case 7 ; Change value
            ChangeGaugeGadgetValue(Humidity, GetGadgetState(7))
            
          Case 8 ; Change size in degrees
            ChangeGaugeGadgetSectorDegrees(Humidity, GetGadgetState(8))
            
          Case 10 ; Change value
            ChangeGaugeGadgetValue(Density, GetGadgetState(10))
            
          Case 11 ; Change size in degrees
            ChangeGaugeGadgetSectorDegrees(Density, GetGadgetState(11)) 
            
        EndSelect
        
      Case #PB_Event_CloseWindow
        Break
        
    EndSelect
    
  ForEver
  
  ResetGauge(Pressure)
  ResetGauge(Temperature)
  ResetGauge(Humidity)
  ResetGauge(Density)
  
EndIf 

; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< END OF FILE <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<
Dernière modification par Guimauve le dim. 22/mai/2011 5:37, modifié 6 fois.
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: GaugeGadget - Version 1.1.0

Message par dayvid »

Ouoi Punese :o

Trop excelent ce code :o
Excelent, Excelent

Super code d'enfer :D

Par conte sa rame un peut
est-ce que c'est normale :D

Félicitation au créateur de ce bijoue
et a toi Guimauve :)
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: GaugeGadget - Version 1.1.0

Message par Kwai chang caine »

J'ose plus rien dire :oops:
Mais Dayvid il a raison, ça sacade et cette fois j'ai bien la v4.51 et mon portable du boulot habituel :roll:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
MetalOS
Messages : 1510
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: GaugeGadget - Version 1.1.0

Message par MetalOS »

Je viens de tester sous Ubuntu 10.04 et ca marche super. 8O 8O 8O 8O Merci de ton code.
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: GaugeGadget - Version 1.1.0

Message par G-Rom »

Merci guimmauve , mais c'est pas fluide , en regardant vite fait , j'ai cru comprendre que tu redessines systématiquement le gadget à chaque changement de valeur.
du devrais séparé ton gadget en 2 images distinct , le fond, l'aiguille.
Le fond est assez complexe , et prend pas mal de temps à être dessiner , l'aiguille , quand à elle reste simple à dessiner.
Quand tu bouge l'aiguille , tu effaces le contenu , tu affiches l'image du fond (que tu as fabriquer durant la création du gadget) , tu affiches l'image de l'aiguille avec son nouvel angle. si tu changes le fond , tu redessines le fond, pas l'aiguille , tu affiches ensuite les 2 images dans l'ordre.
tu gagneras en fluidité.

sinon super code , comme d'hab. ;)
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: GaugeGadget - Version 1.1.0

Message par Guimauve »

Bonjour,

Primo, je ne suis pas l'auteur original de ce Gadget. C'est plutôt Trond voir ici http://www.purebasic.fr/english/viewtop ... 12&t=45513
Deusio, avec les problèmes perso, sans donner les détails, ont vraiment calé le moteur comme on dit. Je tente de le redémarrer mais c'est sans succès pour le moment. Malheureusement, la dernière fois ou un truc du genre c'est produit, mon état a oscillé pendant des mois.
Tertio, je songe fortement à passer au C/C++ pour la simple et bonne raison que je risque fort d'être forcé de l'utiliser dans mon futur emplois. Donc PB n'a plus vraiment la cote en ce moment.

Tout ça pour dire que si vous voyez des trucs à faire pour améliorer le code, GO FOR IT MAN ! GO FOR IT !, le forum est là pour ça.

A+
Guimauve
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: GaugeGadget - Version 1.1.0

Message par G-Rom »

une dernière petite question avant que tu nous quitte aussi ,
je vois dans tout tes codes ce genre de trucs :
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code généré en : 00.021 secondes (22571.43 lignes/seconde) <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Ma question est donc :

- Est tu humain ?
- Est ce que c'est Google qui t'a programmer , est tu une version finale d'un 'bot' ? , est tu accompagner d'autres membres dont je tairais les nom qui eux sont encore au stade alpha de leur développement ?
- Peut tu m'expliquer ?

:mrgreen:
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: GaugeGadget - Version 1.1.0

Message par Guimauve »

G-Rom a écrit :une dernière petite question avant que tu nous quitte aussi ,
je vois dans tout tes codes ce genre de trucs :
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code généré en : 00.021 secondes (22571.43 lignes/seconde) <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Ma question est donc :

- Est tu humain ?
- Est ce que c'est Google qui t'a programmer , est tu une version finale d'un 'bot' ? , est tu accompagner d'autres membres dont je tairais les nom qui eux sont encore au stade alpha de leur développement ?
- Peut tu m'expliquer ?

:mrgreen:
Pour répondre à ta question, c'est simple. En 2006, j'ai commencé à développer un petit programme pour écrire le une partie du code à ma place. L'idée générale derrière c'est la PBO ou Programmation Basée Objet qui permet de modulariser les parties d'un programme.

Donc oui, la machine génère le code à ma place à une vitesse EXTRÊME. Mais cette vitesse varie en fonction de la grandeur de la structure, si j'écoute de la musique pendant que je travaille, etc.

Par exemple j'ai une Structure du genre Matrix44 qui ressemble à ceci :

Code : Tout sélectionner

Structure Matrix44
  
  e11.d
  e21.d
  e31.d
  e41.d
  e12.d
  e22.d
  e32.d
  e42.d
  e13.d
  e23.d
  e33.d
  e43.d
  e14.d
  e24.d
  e34.d
  e44.d
  
EndStructure
Et la je te dis que j'aimerais avoir une commande pour lire et écrire cette structure dans un fichier binaire, dans un fichier pref etdans un fichier xml. J'aimerais aussi avoir des macros pour faire les opérations mathématique de base. Donc je lance le petit programme en question, je donne le nom de la structure avec les champs, je coche les instructions que je juge pertinante et BANG ! Voilà ce que ça donne :

Code : Tout sélectionner

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; CODE GÉNÉRÉ AUTOMATIQUEMENT, NE PAS MODIFIER À
; MOINS D'AVOIR UNE RAISON TRÈS TRÈS VALABLE !!!
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Code généré par : Dev-Type V2.0.2
; Nom du projet : Le nom du projet ici
; Nom du fichier : Nom du fichier
; Version du fichier : 0.0.0
; Programmation : À vérifier
; Programmé par : Votre Nom Ici
; Alias : Votre Pseudo Ici
; Courriel : adresse@quelquechose.com
; Date : 25-03-2011
; Mise à jour : 25-03-2011
; Codé pour PureBasic V4.51
; Plateforme : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration de la Structure <<<<<

Structure Matrix44

  e11.d
  e21.d
  e31.d
  e41.d
  e12.d
  e22.d
  e32.d
  e42.d
  e13.d
  e23.d
  e33.d
  e43.d
  e14.d
  e24.d
  e34.d
  e44.d

EndStructure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs <<<<<

Macro GetMatrix44e11(MatrixA)

  MatrixA\e11

EndMacro

Macro GetMatrix44e21(MatrixA)

  MatrixA\e21

EndMacro

Macro GetMatrix44e31(MatrixA)

  MatrixA\e31

EndMacro

Macro GetMatrix44e41(MatrixA)

  MatrixA\e41

EndMacro

Macro GetMatrix44e12(MatrixA)

  MatrixA\e12

EndMacro

Macro GetMatrix44e22(MatrixA)

  MatrixA\e22

EndMacro

Macro GetMatrix44e32(MatrixA)

  MatrixA\e32

EndMacro

Macro GetMatrix44e42(MatrixA)

  MatrixA\e42

EndMacro

Macro GetMatrix44e13(MatrixA)

  MatrixA\e13

EndMacro

Macro GetMatrix44e23(MatrixA)

  MatrixA\e23

EndMacro

Macro GetMatrix44e33(MatrixA)

  MatrixA\e33

EndMacro

Macro GetMatrix44e43(MatrixA)

  MatrixA\e43

EndMacro

Macro GetMatrix44e14(MatrixA)

  MatrixA\e14

EndMacro

Macro GetMatrix44e24(MatrixA)

  MatrixA\e24

EndMacro

Macro GetMatrix44e34(MatrixA)

  MatrixA\e34

EndMacro

Macro GetMatrix44e44(MatrixA)

  MatrixA\e44

EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs <<<<<

Macro SetMatrix44e11(MatrixA, P_e11)

  GetMatrix44e11(MatrixA) = P_e11

EndMacro

Macro SetMatrix44e21(MatrixA, P_e21)

  GetMatrix44e21(MatrixA) = P_e21

EndMacro

Macro SetMatrix44e31(MatrixA, P_e31)

  GetMatrix44e31(MatrixA) = P_e31

EndMacro

Macro SetMatrix44e41(MatrixA, P_e41)

  GetMatrix44e41(MatrixA) = P_e41

EndMacro

Macro SetMatrix44e12(MatrixA, P_e12)

  GetMatrix44e12(MatrixA) = P_e12

EndMacro

Macro SetMatrix44e22(MatrixA, P_e22)

  GetMatrix44e22(MatrixA) = P_e22

EndMacro

Macro SetMatrix44e32(MatrixA, P_e32)

  GetMatrix44e32(MatrixA) = P_e32

EndMacro

Macro SetMatrix44e42(MatrixA, P_e42)

  GetMatrix44e42(MatrixA) = P_e42

EndMacro

Macro SetMatrix44e13(MatrixA, P_e13)

  GetMatrix44e13(MatrixA) = P_e13

EndMacro

Macro SetMatrix44e23(MatrixA, P_e23)

  GetMatrix44e23(MatrixA) = P_e23

EndMacro

Macro SetMatrix44e33(MatrixA, P_e33)

  GetMatrix44e33(MatrixA) = P_e33

EndMacro

Macro SetMatrix44e43(MatrixA, P_e43)

  GetMatrix44e43(MatrixA) = P_e43

EndMacro

Macro SetMatrix44e14(MatrixA, P_e14)

  GetMatrix44e14(MatrixA) = P_e14

EndMacro

Macro SetMatrix44e24(MatrixA, P_e24)

  GetMatrix44e24(MatrixA) = P_e24

EndMacro

Macro SetMatrix44e34(MatrixA, P_e34)

  GetMatrix44e34(MatrixA) = P_e34

EndMacro

Macro SetMatrix44e44(MatrixA, P_e44)

  GetMatrix44e44(MatrixA) = P_e44

EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Reset <<<<<

Macro ResetMatrix44(MatrixA)

  SetMatrix44e11(MatrixA, 0)
  SetMatrix44e21(MatrixA, 0)
  SetMatrix44e31(MatrixA, 0)
  SetMatrix44e41(MatrixA, 0)
  SetMatrix44e12(MatrixA, 0)
  SetMatrix44e22(MatrixA, 0)
  SetMatrix44e32(MatrixA, 0)
  SetMatrix44e42(MatrixA, 0)
  SetMatrix44e13(MatrixA, 0)
  SetMatrix44e23(MatrixA, 0)
  SetMatrix44e33(MatrixA, 0)
  SetMatrix44e43(MatrixA, 0)
  SetMatrix44e14(MatrixA, 0)
  SetMatrix44e24(MatrixA, 0)
  SetMatrix44e34(MatrixA, 0)
  SetMatrix44e44(MatrixA, 0)

  ; ClearStructure(MatrixA, Matrix44)

EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Copy : A = Source : B = Destination <<<<<

Macro CopyMatrix44(MatrixA, MatrixB)

  SetMatrix44e11(MatrixB, GetMatrix44e11(MatrixA))
  SetMatrix44e21(MatrixB, GetMatrix44e21(MatrixA))
  SetMatrix44e31(MatrixB, GetMatrix44e31(MatrixA))
  SetMatrix44e41(MatrixB, GetMatrix44e41(MatrixA))
  SetMatrix44e12(MatrixB, GetMatrix44e12(MatrixA))
  SetMatrix44e22(MatrixB, GetMatrix44e22(MatrixA))
  SetMatrix44e32(MatrixB, GetMatrix44e32(MatrixA))
  SetMatrix44e42(MatrixB, GetMatrix44e42(MatrixA))
  SetMatrix44e13(MatrixB, GetMatrix44e13(MatrixA))
  SetMatrix44e23(MatrixB, GetMatrix44e23(MatrixA))
  SetMatrix44e33(MatrixB, GetMatrix44e33(MatrixA))
  SetMatrix44e43(MatrixB, GetMatrix44e43(MatrixA))
  SetMatrix44e14(MatrixB, GetMatrix44e14(MatrixA))
  SetMatrix44e24(MatrixB, GetMatrix44e24(MatrixA))
  SetMatrix44e34(MatrixB, GetMatrix44e34(MatrixA))
  SetMatrix44e44(MatrixB, GetMatrix44e44(MatrixA))

  ; CopyMemory(MatrixA, MatrixB, SizeOf(Matrix44))

EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Compare <<<<<

Procedure.b CompareMatrix44(*MatrixA.Matrix44, *MatrixB.Matrix44)

  Compare.b = #True

  If GetMatrix44e11(*MatrixA) <> GetMatrix44e11(*MatrixB)
    Compare = #False
  EndIf

  If GetMatrix44e21(*MatrixA) <> GetMatrix44e21(*MatrixB)
    Compare = #False
  EndIf

  If GetMatrix44e31(*MatrixA) <> GetMatrix44e31(*MatrixB)
    Compare = #False
  EndIf

  If GetMatrix44e41(*MatrixA) <> GetMatrix44e41(*MatrixB)
    Compare = #False
  EndIf

  If GetMatrix44e12(*MatrixA) <> GetMatrix44e12(*MatrixB)
    Compare = #False
  EndIf

  If GetMatrix44e22(*MatrixA) <> GetMatrix44e22(*MatrixB)
    Compare = #False
  EndIf

  If GetMatrix44e32(*MatrixA) <> GetMatrix44e32(*MatrixB)
    Compare = #False
  EndIf

  If GetMatrix44e42(*MatrixA) <> GetMatrix44e42(*MatrixB)
    Compare = #False
  EndIf

  If GetMatrix44e13(*MatrixA) <> GetMatrix44e13(*MatrixB)
    Compare = #False
  EndIf

  If GetMatrix44e23(*MatrixA) <> GetMatrix44e23(*MatrixB)
    Compare = #False
  EndIf

  If GetMatrix44e33(*MatrixA) <> GetMatrix44e33(*MatrixB)
    Compare = #False
  EndIf

  If GetMatrix44e43(*MatrixA) <> GetMatrix44e43(*MatrixB)
    Compare = #False
  EndIf

  If GetMatrix44e14(*MatrixA) <> GetMatrix44e14(*MatrixB)
    Compare = #False
  EndIf

  If GetMatrix44e24(*MatrixA) <> GetMatrix44e24(*MatrixB)
    Compare = #False
  EndIf

  If GetMatrix44e34(*MatrixA) <> GetMatrix44e34(*MatrixB)
    Compare = #False
  EndIf

  If GetMatrix44e44(*MatrixA) <> GetMatrix44e44(*MatrixB)
    Compare = #False
  EndIf

  ProcedureReturn Compare
EndProcedure

; Macro CompareMatrix44(MatrixA, MatrixB)
  ; CompareMemory(MatrixA, MatrixB, SizeOf(Matrix44))
; EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Swap <<<<<

Macro SwapMatrix44(MatrixA, MatrixB)

  Swap GetMatrix44e11(MatrixA), GetMatrix44e11(MatrixB)
  Swap GetMatrix44e21(MatrixA), GetMatrix44e21(MatrixB)
  Swap GetMatrix44e31(MatrixA), GetMatrix44e31(MatrixB)
  Swap GetMatrix44e41(MatrixA), GetMatrix44e41(MatrixB)
  Swap GetMatrix44e12(MatrixA), GetMatrix44e12(MatrixB)
  Swap GetMatrix44e22(MatrixA), GetMatrix44e22(MatrixB)
  Swap GetMatrix44e32(MatrixA), GetMatrix44e32(MatrixB)
  Swap GetMatrix44e42(MatrixA), GetMatrix44e42(MatrixB)
  Swap GetMatrix44e13(MatrixA), GetMatrix44e13(MatrixB)
  Swap GetMatrix44e23(MatrixA), GetMatrix44e23(MatrixB)
  Swap GetMatrix44e33(MatrixA), GetMatrix44e33(MatrixB)
  Swap GetMatrix44e43(MatrixA), GetMatrix44e43(MatrixB)
  Swap GetMatrix44e14(MatrixA), GetMatrix44e14(MatrixB)
  Swap GetMatrix44e24(MatrixA), GetMatrix44e24(MatrixB)
  Swap GetMatrix44e34(MatrixA), GetMatrix44e34(MatrixB)
  Swap GetMatrix44e44(MatrixA), GetMatrix44e44(MatrixB)

EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Equal : A = B <<<<<

Macro EqualMatrix44(MatrixA, MatrixB)

  SetMatrix44e11(MatrixA, GetMatrix44e11(MatrixB))
  SetMatrix44e21(MatrixA, GetMatrix44e21(MatrixB))
  SetMatrix44e31(MatrixA, GetMatrix44e31(MatrixB))
  SetMatrix44e41(MatrixA, GetMatrix44e41(MatrixB))
  SetMatrix44e12(MatrixA, GetMatrix44e12(MatrixB))
  SetMatrix44e22(MatrixA, GetMatrix44e22(MatrixB))
  SetMatrix44e32(MatrixA, GetMatrix44e32(MatrixB))
  SetMatrix44e42(MatrixA, GetMatrix44e42(MatrixB))
  SetMatrix44e13(MatrixA, GetMatrix44e13(MatrixB))
  SetMatrix44e23(MatrixA, GetMatrix44e23(MatrixB))
  SetMatrix44e33(MatrixA, GetMatrix44e33(MatrixB))
  SetMatrix44e43(MatrixA, GetMatrix44e43(MatrixB))
  SetMatrix44e14(MatrixA, GetMatrix44e14(MatrixB))
  SetMatrix44e24(MatrixA, GetMatrix44e24(MatrixB))
  SetMatrix44e34(MatrixA, GetMatrix44e34(MatrixB))
  SetMatrix44e44(MatrixA, GetMatrix44e44(MatrixB))

  ; MatrixA = MatrixB

EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Plus : R = A + B <<<<<

Macro PlusMatrix44(MatrixR, MatrixA, MatrixB)

  SetMatrix44e11(MatrixR, GetMatrix44e11(MatrixA) + GetMatrix44e11(MatrixB))
  SetMatrix44e21(MatrixR, GetMatrix44e21(MatrixA) + GetMatrix44e21(MatrixB))
  SetMatrix44e31(MatrixR, GetMatrix44e31(MatrixA) + GetMatrix44e31(MatrixB))
  SetMatrix44e41(MatrixR, GetMatrix44e41(MatrixA) + GetMatrix44e41(MatrixB))
  SetMatrix44e12(MatrixR, GetMatrix44e12(MatrixA) + GetMatrix44e12(MatrixB))
  SetMatrix44e22(MatrixR, GetMatrix44e22(MatrixA) + GetMatrix44e22(MatrixB))
  SetMatrix44e32(MatrixR, GetMatrix44e32(MatrixA) + GetMatrix44e32(MatrixB))
  SetMatrix44e42(MatrixR, GetMatrix44e42(MatrixA) + GetMatrix44e42(MatrixB))
  SetMatrix44e13(MatrixR, GetMatrix44e13(MatrixA) + GetMatrix44e13(MatrixB))
  SetMatrix44e23(MatrixR, GetMatrix44e23(MatrixA) + GetMatrix44e23(MatrixB))
  SetMatrix44e33(MatrixR, GetMatrix44e33(MatrixA) + GetMatrix44e33(MatrixB))
  SetMatrix44e43(MatrixR, GetMatrix44e43(MatrixA) + GetMatrix44e43(MatrixB))
  SetMatrix44e14(MatrixR, GetMatrix44e14(MatrixA) + GetMatrix44e14(MatrixB))
  SetMatrix44e24(MatrixR, GetMatrix44e24(MatrixA) + GetMatrix44e24(MatrixB))
  SetMatrix44e34(MatrixR, GetMatrix44e34(MatrixA) + GetMatrix44e34(MatrixB))
  SetMatrix44e44(MatrixR, GetMatrix44e44(MatrixA) + GetMatrix44e44(MatrixB))

EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Minus : R = A - B <<<<<

Macro MinusMatrix44(MatrixR, MatrixA, MatrixB)

  SetMatrix44e11(MatrixR, GetMatrix44e11(MatrixA) - GetMatrix44e11(MatrixB))
  SetMatrix44e21(MatrixR, GetMatrix44e21(MatrixA) - GetMatrix44e21(MatrixB))
  SetMatrix44e31(MatrixR, GetMatrix44e31(MatrixA) - GetMatrix44e31(MatrixB))
  SetMatrix44e41(MatrixR, GetMatrix44e41(MatrixA) - GetMatrix44e41(MatrixB))
  SetMatrix44e12(MatrixR, GetMatrix44e12(MatrixA) - GetMatrix44e12(MatrixB))
  SetMatrix44e22(MatrixR, GetMatrix44e22(MatrixA) - GetMatrix44e22(MatrixB))
  SetMatrix44e32(MatrixR, GetMatrix44e32(MatrixA) - GetMatrix44e32(MatrixB))
  SetMatrix44e42(MatrixR, GetMatrix44e42(MatrixA) - GetMatrix44e42(MatrixB))
  SetMatrix44e13(MatrixR, GetMatrix44e13(MatrixA) - GetMatrix44e13(MatrixB))
  SetMatrix44e23(MatrixR, GetMatrix44e23(MatrixA) - GetMatrix44e23(MatrixB))
  SetMatrix44e33(MatrixR, GetMatrix44e33(MatrixA) - GetMatrix44e33(MatrixB))
  SetMatrix44e43(MatrixR, GetMatrix44e43(MatrixA) - GetMatrix44e43(MatrixB))
  SetMatrix44e14(MatrixR, GetMatrix44e14(MatrixA) - GetMatrix44e14(MatrixB))
  SetMatrix44e24(MatrixR, GetMatrix44e24(MatrixA) - GetMatrix44e24(MatrixB))
  SetMatrix44e34(MatrixR, GetMatrix44e34(MatrixA) - GetMatrix44e34(MatrixB))
  SetMatrix44e44(MatrixR, GetMatrix44e44(MatrixA) - GetMatrix44e44(MatrixB))

EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Zero <<<<<

Macro ZeroMatrix44(MatrixA)

  SetMatrix44e11(MatrixA, 0)
  SetMatrix44e21(MatrixA, 0)
  SetMatrix44e31(MatrixA, 0)
  SetMatrix44e41(MatrixA, 0)
  SetMatrix44e12(MatrixA, 0)
  SetMatrix44e22(MatrixA, 0)
  SetMatrix44e32(MatrixA, 0)
  SetMatrix44e42(MatrixA, 0)
  SetMatrix44e13(MatrixA, 0)
  SetMatrix44e23(MatrixA, 0)
  SetMatrix44e33(MatrixA, 0)
  SetMatrix44e43(MatrixA, 0)
  SetMatrix44e14(MatrixA, 0)
  SetMatrix44e24(MatrixA, 0)
  SetMatrix44e34(MatrixA, 0)
  SetMatrix44e44(MatrixA, 0)

  ; ClearStructure(MatrixA, Matrix44)

EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur One <<<<<

Macro OneMatrix44(MatrixA)

  SetMatrix44e11(MatrixA, 1)
  SetMatrix44e21(MatrixA, 1)
  SetMatrix44e31(MatrixA, 1)
  SetMatrix44e41(MatrixA, 1)
  SetMatrix44e12(MatrixA, 1)
  SetMatrix44e22(MatrixA, 1)
  SetMatrix44e32(MatrixA, 1)
  SetMatrix44e42(MatrixA, 1)
  SetMatrix44e13(MatrixA, 1)
  SetMatrix44e23(MatrixA, 1)
  SetMatrix44e33(MatrixA, 1)
  SetMatrix44e43(MatrixA, 1)
  SetMatrix44e14(MatrixA, 1)
  SetMatrix44e24(MatrixA, 1)
  SetMatrix44e34(MatrixA, 1)
  SetMatrix44e44(MatrixA, 1)

EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur ProductByScalar : R = A * Scalar <<<<<

Macro ProductByScalarMatrix44(MatrixR, MatrixA, Scalar)

  SetMatrix44e11(MatrixR, GetMatrix44e11(MatrixA) * Scalar)
  SetMatrix44e21(MatrixR, GetMatrix44e21(MatrixA) * Scalar)
  SetMatrix44e31(MatrixR, GetMatrix44e31(MatrixA) * Scalar)
  SetMatrix44e41(MatrixR, GetMatrix44e41(MatrixA) * Scalar)
  SetMatrix44e12(MatrixR, GetMatrix44e12(MatrixA) * Scalar)
  SetMatrix44e22(MatrixR, GetMatrix44e22(MatrixA) * Scalar)
  SetMatrix44e32(MatrixR, GetMatrix44e32(MatrixA) * Scalar)
  SetMatrix44e42(MatrixR, GetMatrix44e42(MatrixA) * Scalar)
  SetMatrix44e13(MatrixR, GetMatrix44e13(MatrixA) * Scalar)
  SetMatrix44e23(MatrixR, GetMatrix44e23(MatrixA) * Scalar)
  SetMatrix44e33(MatrixR, GetMatrix44e33(MatrixA) * Scalar)
  SetMatrix44e43(MatrixR, GetMatrix44e43(MatrixA) * Scalar)
  SetMatrix44e14(MatrixR, GetMatrix44e14(MatrixA) * Scalar)
  SetMatrix44e24(MatrixR, GetMatrix44e24(MatrixA) * Scalar)
  SetMatrix44e34(MatrixR, GetMatrix44e34(MatrixA) * Scalar)
  SetMatrix44e44(MatrixR, GetMatrix44e44(MatrixA) * Scalar)

EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur DivideByScalar : R = A / Scalar <<<<<

Macro DivideByScalarMatrix44(MatrixR, MatrixA, Scalar)

  SetMatrix44e11(MatrixR, GetMatrix44e11(MatrixA) / Scalar)
  SetMatrix44e21(MatrixR, GetMatrix44e21(MatrixA) / Scalar)
  SetMatrix44e31(MatrixR, GetMatrix44e31(MatrixA) / Scalar)
  SetMatrix44e41(MatrixR, GetMatrix44e41(MatrixA) / Scalar)
  SetMatrix44e12(MatrixR, GetMatrix44e12(MatrixA) / Scalar)
  SetMatrix44e22(MatrixR, GetMatrix44e22(MatrixA) / Scalar)
  SetMatrix44e32(MatrixR, GetMatrix44e32(MatrixA) / Scalar)
  SetMatrix44e42(MatrixR, GetMatrix44e42(MatrixA) / Scalar)
  SetMatrix44e13(MatrixR, GetMatrix44e13(MatrixA) / Scalar)
  SetMatrix44e23(MatrixR, GetMatrix44e23(MatrixA) / Scalar)
  SetMatrix44e33(MatrixR, GetMatrix44e33(MatrixA) / Scalar)
  SetMatrix44e43(MatrixR, GetMatrix44e43(MatrixA) / Scalar)
  SetMatrix44e14(MatrixR, GetMatrix44e14(MatrixA) / Scalar)
  SetMatrix44e24(MatrixR, GetMatrix44e24(MatrixA) / Scalar)
  SetMatrix44e34(MatrixR, GetMatrix44e34(MatrixA) / Scalar)
  SetMatrix44e44(MatrixR, GetMatrix44e44(MatrixA) / Scalar)

EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Lecture d'un groupe Préférences <<<<<

Procedure ReadPreferenceMatrix44(GroupName.s, *MatrixA.Matrix44)

  PreferenceGroup(GroupName)

  SetMatrix44e11(*MatrixA, ReadPreferenceDouble("e11", GetMatrix44e11(*MatrixA)))
  SetMatrix44e21(*MatrixA, ReadPreferenceDouble("e21", GetMatrix44e21(*MatrixA)))
  SetMatrix44e31(*MatrixA, ReadPreferenceDouble("e31", GetMatrix44e31(*MatrixA)))
  SetMatrix44e41(*MatrixA, ReadPreferenceDouble("e41", GetMatrix44e41(*MatrixA)))
  SetMatrix44e12(*MatrixA, ReadPreferenceDouble("e12", GetMatrix44e12(*MatrixA)))
  SetMatrix44e22(*MatrixA, ReadPreferenceDouble("e22", GetMatrix44e22(*MatrixA)))
  SetMatrix44e32(*MatrixA, ReadPreferenceDouble("e32", GetMatrix44e32(*MatrixA)))
  SetMatrix44e42(*MatrixA, ReadPreferenceDouble("e42", GetMatrix44e42(*MatrixA)))
  SetMatrix44e13(*MatrixA, ReadPreferenceDouble("e13", GetMatrix44e13(*MatrixA)))
  SetMatrix44e23(*MatrixA, ReadPreferenceDouble("e23", GetMatrix44e23(*MatrixA)))
  SetMatrix44e33(*MatrixA, ReadPreferenceDouble("e33", GetMatrix44e33(*MatrixA)))
  SetMatrix44e43(*MatrixA, ReadPreferenceDouble("e43", GetMatrix44e43(*MatrixA)))
  SetMatrix44e14(*MatrixA, ReadPreferenceDouble("e14", GetMatrix44e14(*MatrixA)))
  SetMatrix44e24(*MatrixA, ReadPreferenceDouble("e24", GetMatrix44e24(*MatrixA)))
  SetMatrix44e34(*MatrixA, ReadPreferenceDouble("e34", GetMatrix44e34(*MatrixA)))
  SetMatrix44e44(*MatrixA, ReadPreferenceDouble("e44", GetMatrix44e44(*MatrixA)))

EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Écriture d'un groupe de Préférences <<<<<

Procedure WritePreferenceMatrix44(GroupName.s, *MatrixA.Matrix44)

  PreferenceGroup(GroupName)

  WritePreferenceDouble("e11", GetMatrix44e11(*MatrixA))
  WritePreferenceDouble("e21", GetMatrix44e21(*MatrixA))
  WritePreferenceDouble("e31", GetMatrix44e31(*MatrixA))
  WritePreferenceDouble("e41", GetMatrix44e41(*MatrixA))
  WritePreferenceDouble("e12", GetMatrix44e12(*MatrixA))
  WritePreferenceDouble("e22", GetMatrix44e22(*MatrixA))
  WritePreferenceDouble("e32", GetMatrix44e32(*MatrixA))
  WritePreferenceDouble("e42", GetMatrix44e42(*MatrixA))
  WritePreferenceDouble("e13", GetMatrix44e13(*MatrixA))
  WritePreferenceDouble("e23", GetMatrix44e23(*MatrixA))
  WritePreferenceDouble("e33", GetMatrix44e33(*MatrixA))
  WritePreferenceDouble("e43", GetMatrix44e43(*MatrixA))
  WritePreferenceDouble("e14", GetMatrix44e14(*MatrixA))
  WritePreferenceDouble("e24", GetMatrix44e24(*MatrixA))
  WritePreferenceDouble("e34", GetMatrix44e34(*MatrixA))
  WritePreferenceDouble("e44", GetMatrix44e44(*MatrixA))

EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Lecture sur fichier Binaire <<<<<

Procedure ReadMatrix44(FileID.l, *MatrixA.Matrix44)

  SetMatrix44e11(*MatrixA, ReadDouble(FileID))
  SetMatrix44e21(*MatrixA, ReadDouble(FileID))
  SetMatrix44e31(*MatrixA, ReadDouble(FileID))
  SetMatrix44e41(*MatrixA, ReadDouble(FileID))
  SetMatrix44e12(*MatrixA, ReadDouble(FileID))
  SetMatrix44e22(*MatrixA, ReadDouble(FileID))
  SetMatrix44e32(*MatrixA, ReadDouble(FileID))
  SetMatrix44e42(*MatrixA, ReadDouble(FileID))
  SetMatrix44e13(*MatrixA, ReadDouble(FileID))
  SetMatrix44e23(*MatrixA, ReadDouble(FileID))
  SetMatrix44e33(*MatrixA, ReadDouble(FileID))
  SetMatrix44e43(*MatrixA, ReadDouble(FileID))
  SetMatrix44e14(*MatrixA, ReadDouble(FileID))
  SetMatrix44e24(*MatrixA, ReadDouble(FileID))
  SetMatrix44e34(*MatrixA, ReadDouble(FileID))
  SetMatrix44e44(*MatrixA, ReadDouble(FileID))

EndProcedure

; Macro ReadMatrix44(FileID, MatrixA)
  ; ReadData(FileID, MatrixA, SizeOf(Matrix44))
; EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Écriture sur fichier Binaire <<<<<

Procedure WriteMatrix44(FileID.l, *MatrixA.Matrix44)

  WriteDouble(FileID, GetMatrix44e11(*MatrixA))
  WriteDouble(FileID, GetMatrix44e21(*MatrixA))
  WriteDouble(FileID, GetMatrix44e31(*MatrixA))
  WriteDouble(FileID, GetMatrix44e41(*MatrixA))
  WriteDouble(FileID, GetMatrix44e12(*MatrixA))
  WriteDouble(FileID, GetMatrix44e22(*MatrixA))
  WriteDouble(FileID, GetMatrix44e32(*MatrixA))
  WriteDouble(FileID, GetMatrix44e42(*MatrixA))
  WriteDouble(FileID, GetMatrix44e13(*MatrixA))
  WriteDouble(FileID, GetMatrix44e23(*MatrixA))
  WriteDouble(FileID, GetMatrix44e33(*MatrixA))
  WriteDouble(FileID, GetMatrix44e43(*MatrixA))
  WriteDouble(FileID, GetMatrix44e14(*MatrixA))
  WriteDouble(FileID, GetMatrix44e24(*MatrixA))
  WriteDouble(FileID, GetMatrix44e34(*MatrixA))
  WriteDouble(FileID, GetMatrix44e44(*MatrixA))

EndProcedure

; Macro WriteMatrix44(FileID, MatrixA)
  ; WriteData(FileID, MatrixA, SizeOf(Matrix44))
; EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Set - Noeud avec noeuds enfants <<<<<

Procedure SetMatrix44XMLNode(CurrentNode, *MatrixA.Matrix44)

  If ParentXMLNode(CurrentNode) = #Null
    StructNode = CreateXMLNode(CurrentNode)
    SetXMLNodeName(StructNode, "Matrix44")
  Else
    StructNode = CurrentNode
  EndIf

  FieldNode = CreateXMLNode(StructNode)
  SetXMLNodeName(FieldNode, "e11")
  SetXMLNodeText(FieldNode, StrD(GetMatrix44e11(*MatrixA)))

  FieldNode = CreateXMLNode(StructNode)
  SetXMLNodeName(FieldNode, "e21")
  SetXMLNodeText(FieldNode, StrD(GetMatrix44e21(*MatrixA)))

  FieldNode = CreateXMLNode(StructNode)
  SetXMLNodeName(FieldNode, "e31")
  SetXMLNodeText(FieldNode, StrD(GetMatrix44e31(*MatrixA)))

  FieldNode = CreateXMLNode(StructNode)
  SetXMLNodeName(FieldNode, "e41")
  SetXMLNodeText(FieldNode, StrD(GetMatrix44e41(*MatrixA)))

  FieldNode = CreateXMLNode(StructNode)
  SetXMLNodeName(FieldNode, "e12")
  SetXMLNodeText(FieldNode, StrD(GetMatrix44e12(*MatrixA)))

  FieldNode = CreateXMLNode(StructNode)
  SetXMLNodeName(FieldNode, "e22")
  SetXMLNodeText(FieldNode, StrD(GetMatrix44e22(*MatrixA)))

  FieldNode = CreateXMLNode(StructNode)
  SetXMLNodeName(FieldNode, "e32")
  SetXMLNodeText(FieldNode, StrD(GetMatrix44e32(*MatrixA)))

  FieldNode = CreateXMLNode(StructNode)
  SetXMLNodeName(FieldNode, "e42")
  SetXMLNodeText(FieldNode, StrD(GetMatrix44e42(*MatrixA)))

  FieldNode = CreateXMLNode(StructNode)
  SetXMLNodeName(FieldNode, "e13")
  SetXMLNodeText(FieldNode, StrD(GetMatrix44e13(*MatrixA)))

  FieldNode = CreateXMLNode(StructNode)
  SetXMLNodeName(FieldNode, "e23")
  SetXMLNodeText(FieldNode, StrD(GetMatrix44e23(*MatrixA)))

  FieldNode = CreateXMLNode(StructNode)
  SetXMLNodeName(FieldNode, "e33")
  SetXMLNodeText(FieldNode, StrD(GetMatrix44e33(*MatrixA)))

  FieldNode = CreateXMLNode(StructNode)
  SetXMLNodeName(FieldNode, "e43")
  SetXMLNodeText(FieldNode, StrD(GetMatrix44e43(*MatrixA)))

  FieldNode = CreateXMLNode(StructNode)
  SetXMLNodeName(FieldNode, "e14")
  SetXMLNodeText(FieldNode, StrD(GetMatrix44e14(*MatrixA)))

  FieldNode = CreateXMLNode(StructNode)
  SetXMLNodeName(FieldNode, "e24")
  SetXMLNodeText(FieldNode, StrD(GetMatrix44e24(*MatrixA)))

  FieldNode = CreateXMLNode(StructNode)
  SetXMLNodeName(FieldNode, "e34")
  SetXMLNodeText(FieldNode, StrD(GetMatrix44e34(*MatrixA)))

  FieldNode = CreateXMLNode(StructNode)
  SetXMLNodeName(FieldNode, "e44")
  SetXMLNodeText(FieldNode, StrD(GetMatrix44e44(*MatrixA)))

EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Get - Noeud avec noeuds enfants <<<<<

Procedure GetMatrix44XMLNode(CurrentNode, *MatrixA.Matrix44)

  If ParentXMLNode(CurrentNode) = #Null
    StructNode = ChildXMLNode(CurrentNode)
    If GetXMLNodeName(StructNode) = "Matrix44"
      Success = #True
    EndIf
  Else
    Success = #True
    StructNode = CurrentNode
  EndIf

  If Success = #True

    FieldNode = ChildXMLNode(StructNode)

    While FieldNode

      Select GetXMLNodeName(FieldNode)

        Case "e11"
          SetMatrix44e11(*MatrixA, ValD(GetXMLNodeText(FieldNode)))

        Case "e21"
          SetMatrix44e21(*MatrixA, ValD(GetXMLNodeText(FieldNode)))

        Case "e31"
          SetMatrix44e31(*MatrixA, ValD(GetXMLNodeText(FieldNode)))

        Case "e41"
          SetMatrix44e41(*MatrixA, ValD(GetXMLNodeText(FieldNode)))

        Case "e12"
          SetMatrix44e12(*MatrixA, ValD(GetXMLNodeText(FieldNode)))

        Case "e22"
          SetMatrix44e22(*MatrixA, ValD(GetXMLNodeText(FieldNode)))

        Case "e32"
          SetMatrix44e32(*MatrixA, ValD(GetXMLNodeText(FieldNode)))

        Case "e42"
          SetMatrix44e42(*MatrixA, ValD(GetXMLNodeText(FieldNode)))

        Case "e13"
          SetMatrix44e13(*MatrixA, ValD(GetXMLNodeText(FieldNode)))

        Case "e23"
          SetMatrix44e23(*MatrixA, ValD(GetXMLNodeText(FieldNode)))

        Case "e33"
          SetMatrix44e33(*MatrixA, ValD(GetXMLNodeText(FieldNode)))

        Case "e43"
          SetMatrix44e43(*MatrixA, ValD(GetXMLNodeText(FieldNode)))

        Case "e14"
          SetMatrix44e14(*MatrixA, ValD(GetXMLNodeText(FieldNode)))

        Case "e24"
          SetMatrix44e24(*MatrixA, ValD(GetXMLNodeText(FieldNode)))

        Case "e34"
          SetMatrix44e34(*MatrixA, ValD(GetXMLNodeText(FieldNode)))

        Case "e44"
          SetMatrix44e44(*MatrixA, ValD(GetXMLNodeText(FieldNode)))

      EndSelect

      FieldNode = NextXMLNode(FieldNode)

    Wend

  EndIf

  ProcedureReturn Success
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Set - Noeud avec attributs <<<<<

Procedure SetMatrix44XMLAttribute(CurrentNode, *MatrixA.Matrix44)

  StructNode = CreateXMLNode(CurrentNode)
  SetXMLNodeName(StructNode, "Matrix44")

  SetXMLAttribute(StructNode, "e11", StrD(GetMatrix44e11(*MatrixA)))
  SetXMLAttribute(StructNode, "e21", StrD(GetMatrix44e21(*MatrixA)))
  SetXMLAttribute(StructNode, "e31", StrD(GetMatrix44e31(*MatrixA)))
  SetXMLAttribute(StructNode, "e41", StrD(GetMatrix44e41(*MatrixA)))
  SetXMLAttribute(StructNode, "e12", StrD(GetMatrix44e12(*MatrixA)))
  SetXMLAttribute(StructNode, "e22", StrD(GetMatrix44e22(*MatrixA)))
  SetXMLAttribute(StructNode, "e32", StrD(GetMatrix44e32(*MatrixA)))
  SetXMLAttribute(StructNode, "e42", StrD(GetMatrix44e42(*MatrixA)))
  SetXMLAttribute(StructNode, "e13", StrD(GetMatrix44e13(*MatrixA)))
  SetXMLAttribute(StructNode, "e23", StrD(GetMatrix44e23(*MatrixA)))
  SetXMLAttribute(StructNode, "e33", StrD(GetMatrix44e33(*MatrixA)))
  SetXMLAttribute(StructNode, "e43", StrD(GetMatrix44e43(*MatrixA)))
  SetXMLAttribute(StructNode, "e14", StrD(GetMatrix44e14(*MatrixA)))
  SetXMLAttribute(StructNode, "e24", StrD(GetMatrix44e24(*MatrixA)))
  SetXMLAttribute(StructNode, "e34", StrD(GetMatrix44e34(*MatrixA)))
  SetXMLAttribute(StructNode, "e44", StrD(GetMatrix44e44(*MatrixA)))

EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Get - Noeud avec attributs <<<<<

Procedure GetMatrix44XMLAttribute(CurrentNode, *MatrixA.Matrix44)

  StructNode = ChildXMLNode(CurrentNode)

  If GetXMLNodeName(StructNode) = "Matrix44"

    SetMatrix44e11(*MatrixA, ValD(GetXMLAttribute(StructNode, "e11")))
    SetMatrix44e21(*MatrixA, ValD(GetXMLAttribute(StructNode, "e21")))
    SetMatrix44e31(*MatrixA, ValD(GetXMLAttribute(StructNode, "e31")))
    SetMatrix44e41(*MatrixA, ValD(GetXMLAttribute(StructNode, "e41")))
    SetMatrix44e12(*MatrixA, ValD(GetXMLAttribute(StructNode, "e12")))
    SetMatrix44e22(*MatrixA, ValD(GetXMLAttribute(StructNode, "e22")))
    SetMatrix44e32(*MatrixA, ValD(GetXMLAttribute(StructNode, "e32")))
    SetMatrix44e42(*MatrixA, ValD(GetXMLAttribute(StructNode, "e42")))
    SetMatrix44e13(*MatrixA, ValD(GetXMLAttribute(StructNode, "e13")))
    SetMatrix44e23(*MatrixA, ValD(GetXMLAttribute(StructNode, "e23")))
    SetMatrix44e33(*MatrixA, ValD(GetXMLAttribute(StructNode, "e33")))
    SetMatrix44e43(*MatrixA, ValD(GetXMLAttribute(StructNode, "e43")))
    SetMatrix44e14(*MatrixA, ValD(GetXMLAttribute(StructNode, "e14")))
    SetMatrix44e24(*MatrixA, ValD(GetXMLAttribute(StructNode, "e24")))
    SetMatrix44e34(*MatrixA, ValD(GetXMLAttribute(StructNode, "e34")))
    SetMatrix44e44(*MatrixA, ValD(GetXMLAttribute(StructNode, "e44")))

  EndIf

EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Ajout d'attribus au noeud courant <<<<<

Macro AddMatrix44XMLAttribute(CurrentNode, MatrixA)

  SetXMLAttribute(CurrentNode, "e11", StrD(GetMatrix44e11(MatrixA)))
  SetXMLAttribute(CurrentNode, "e21", StrD(GetMatrix44e21(MatrixA)))
  SetXMLAttribute(CurrentNode, "e31", StrD(GetMatrix44e31(MatrixA)))
  SetXMLAttribute(CurrentNode, "e41", StrD(GetMatrix44e41(MatrixA)))
  SetXMLAttribute(CurrentNode, "e12", StrD(GetMatrix44e12(MatrixA)))
  SetXMLAttribute(CurrentNode, "e22", StrD(GetMatrix44e22(MatrixA)))
  SetXMLAttribute(CurrentNode, "e32", StrD(GetMatrix44e32(MatrixA)))
  SetXMLAttribute(CurrentNode, "e42", StrD(GetMatrix44e42(MatrixA)))
  SetXMLAttribute(CurrentNode, "e13", StrD(GetMatrix44e13(MatrixA)))
  SetXMLAttribute(CurrentNode, "e23", StrD(GetMatrix44e23(MatrixA)))
  SetXMLAttribute(CurrentNode, "e33", StrD(GetMatrix44e33(MatrixA)))
  SetXMLAttribute(CurrentNode, "e43", StrD(GetMatrix44e43(MatrixA)))
  SetXMLAttribute(CurrentNode, "e14", StrD(GetMatrix44e14(MatrixA)))
  SetXMLAttribute(CurrentNode, "e24", StrD(GetMatrix44e24(MatrixA)))
  SetXMLAttribute(CurrentNode, "e34", StrD(GetMatrix44e34(MatrixA)))
  SetXMLAttribute(CurrentNode, "e44", StrD(GetMatrix44e44(MatrixA)))

EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Collecte d'attributs à partir du noeud courant <<<<<

Macro CollectMatrix44XMLAttribute(CurrentNode, MatrixA)

  SetMatrix44e11(MatrixA, ValD(GetXMLAttribute(CurrentNode, "e11")))
  SetMatrix44e21(MatrixA, ValD(GetXMLAttribute(CurrentNode, "e21")))
  SetMatrix44e31(MatrixA, ValD(GetXMLAttribute(CurrentNode, "e31")))
  SetMatrix44e41(MatrixA, ValD(GetXMLAttribute(CurrentNode, "e41")))
  SetMatrix44e12(MatrixA, ValD(GetXMLAttribute(CurrentNode, "e12")))
  SetMatrix44e22(MatrixA, ValD(GetXMLAttribute(CurrentNode, "e22")))
  SetMatrix44e32(MatrixA, ValD(GetXMLAttribute(CurrentNode, "e32")))
  SetMatrix44e42(MatrixA, ValD(GetXMLAttribute(CurrentNode, "e42")))
  SetMatrix44e13(MatrixA, ValD(GetXMLAttribute(CurrentNode, "e13")))
  SetMatrix44e23(MatrixA, ValD(GetXMLAttribute(CurrentNode, "e23")))
  SetMatrix44e33(MatrixA, ValD(GetXMLAttribute(CurrentNode, "e33")))
  SetMatrix44e43(MatrixA, ValD(GetXMLAttribute(CurrentNode, "e43")))
  SetMatrix44e14(MatrixA, ValD(GetXMLAttribute(CurrentNode, "e14")))
  SetMatrix44e24(MatrixA, ValD(GetXMLAttribute(CurrentNode, "e24")))
  SetMatrix44e34(MatrixA, ValD(GetXMLAttribute(CurrentNode, "e34")))
  SetMatrix44e44(MatrixA, ValD(GetXMLAttribute(CurrentNode, "e44")))

EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code généré en : 00.031 secondes (30290.32 lignes/seconde) <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< FIN DU FICHIER <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<
Et après ça, il me reste à coder ce qui manque, bien souvent en copiant et en éditant une commande générée automatiquement qui est la plus proche de ce que je veux faire. Dans le cas d'une Matrice il est plus facile d'insérer les valeurs ligne par ligne dans la matrice. ce qui donne un truc du genre :

Code : Tout sélectionner

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs ligne par ligne <<<<<
  
Macro SetMatrix44Line1(MatrixA, P_e11, P_e12, P_e13, P_e14)
  
  SetMatrix44e11(MatrixA, P_e11)
  SetMatrix44e12(MatrixA, P_e12)
  SetMatrix44e13(MatrixA, P_e13)
  SetMatrix44e14(MatrixA, P_e14)
  
EndMacro
  
Macro SetMatrix44Line2(MatrixA, P_e21, P_e22, P_e23, P_e24)
  
  SetMatrix44e21(MatrixA, P_e21)
  SetMatrix44e22(MatrixA, P_e22)
  SetMatrix44e23(MatrixA, P_e23)
  SetMatrix44e24(MatrixA, P_e24)
  
EndMacro
  
Macro SetMatrix44Line3(MatrixA, P_e31, P_e32, P_e33, P_e34)
  
  SetMatrix44e31(MatrixA, P_e31)
  SetMatrix44e32(MatrixA, P_e32)
  SetMatrix44e33(MatrixA, P_e33)
  SetMatrix44e34(MatrixA, P_e34)
  
EndMacro
  
Macro SetMatrix44Line4(MatrixA, P_e41, P_e42, P_e43, P_e44)
  
  SetMatrix44e41(MatrixA, P_e41)
  SetMatrix44e42(MatrixA, P_e42)
  SetMatrix44e43(MatrixA, P_e43)
  SetMatrix44e44(MatrixA, P_e44)
  
EndMacro
Et j'ajoute en suite d'autre instruction comme celle-ci par exemple :

Code : Tout sélectionner

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur IdentityMatrix44 <<<<<
  
Macro IdentityMatrix44(MatrixA)
  
  SetMatrix44Line1(MatrixA, 1, 0, 0, 0)
  SetMatrix44Line2(MatrixA, 0, 1, 0, 0)
  SetMatrix44Line3(MatrixA, 0, 0, 1, 0)
  SetMatrix44Line4(MatrixA, 0, 0, 0, 1)
  
EndMacro
Et ainsi de suite pour les autres commandes manquantes.

Ce qui à de plus comique c'est qu'à l'origine j'avais proposer le petit programme en question ici même sur le forum mais de nombreux membres m'ont fait par que d'écrire le code de cette façon était LONG, PÉNIBLE, FASTIDIEUX, ETC strictement pour rien. Donc j'ai abandonné l'idée de le diffuser suite à tout ces commentaires négatifs.

J'espère que ce la répond à ta question !

A+
Guimauve
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: GaugeGadget - Version 1.1.0

Message par G-Rom »

Ce qui à de plus comique c'est qu'à l'origine j'avais proposer le petit programme en question ici même sur le forum mais de nombreux membres m'ont fait par que d'écrire le code de cette façon était LONG, PÉNIBLE, FASTIDIEUX, ETC strictement pour rien. Donc j'ai abandonné l'idée de le diffuser suite à tout ces commentaires négatifs.
C'est bête , ton truc, c'est du tonnerre , c'est original & en plus cela te sort un code propre. En tout cas , je n'avais jamais pensé à ce genre d'outils ! Tu es peu être le mc-gyver du purebasic qui sait ? en tout cas c'est idiot ce comportement envers toi , tu est en quelque sorte notre Galilée donc ;)
Avatar de l’utilisateur
MetalOS
Messages : 1510
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: GaugeGadget - Version 1.1.0

Message par MetalOS »

Moi je ne suis pas assé bon, mais si quelqu'un pouvais en faire une lib ca serais bien.
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: GaugeGadget - Version 1.1.0

Message par dayvid »

Ouais cool ce truc :o
ouoi, sa me dépasse moi :)
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: GaugeGadget - Version 1.1.0

Message par Guimauve »

G-Rom a écrit :C'est bête , ton truc, c'est du tonnerre , c'est original & en plus cela te sort un code propre. En tout cas , je n'avais jamais pensé à ce genre d'outils ! Tu es peu être le mc-gyver du purebasic qui sait ? en tout cas c'est idiot ce comportement envers toi , tu est en quelque sorte notre Galilée donc ;)
La question est donc pourquoi dépenser de l'énergie pour faire un truc alors que personne semblaient en vouloir à l'époque ? Pour ce qui est de l'utilitaire en question, je dois refaire en grande partie le générateur de code pour prendre en compte les listes chainée, les tableaux dynamique ainsi que les Map qui sont devenu possible dans les structures depuis la version 4.50 de PB.

Écoutez, présentement je suis dans mon dernier 2 semaines et un peu plus d'université (j'ai mon dernier examen le 11 avril) donc je n'ai pas le temps de travailler là dessus pour le moment. Mais après ça, je vais voir ce que je peux faire puisque je vais devoir faire de la recherche d'emplois donc entre l'envoi de CV et l'attente de réponse je pourrai certainement travailler là dessus.

A+
Guimauve
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: GaugeGadget - Version 1.1.0

Message par dayvid »

Tu m'as l'air bien calé toi :) :wink:
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Avatar de l’utilisateur
MetalOS
Messages : 1510
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: GaugeGadget - Version 1.1.0

Message par MetalOS »

Quelqu'un peut me dire comment faire pour gérer 2 gauges indépendament l'une de l'autre ? Merci.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: GaugeGadget - Version 1.1.0

Message par falsam »

Si c'est de la barre de progression classique de Pure Basic dont tu parles.

Code : Tout sélectionner

Enumeration
  #jauge1
  #jauge2
  #jauge3
EndEnumeration

If OpenWindow(0, 0, 0, 320, 160, "ProgressBarGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
    TextGadget       (3,  10, 10, 250,  20, "Barre de progression standard  (50/100)", #PB_Text_Center)
    ProgressBarGadget(#jauge1,  10, 30, 250,  30, 0, 100)
    SetGadgetState   (#jauge1, 50)   ;  change la valeur de la 1ère barre de progression (ID = 0) à 50 sur 100
    
    TextGadget       (4,  10, 70, 250,  20, "Barre de progression précise  (50/200)", #PB_Text_Center)
    ProgressBarGadget(#jauge2,  10, 90, 250,  30, 0, 200, #PB_ProgressBar_Smooth)
    SetGadgetState   (#jauge2, 50)   ;  change la valeur de la 2ème barre de progression (ID = 1) à 50 sur 200
    
    TextGadget       (5, 100,135, 200,  20, "Barre de progression verticale  (100/300)", #PB_Text_Right)
    ProgressBarGadget(#jauge3, 270, 10,  30, 120, 0, 300, #PB_ProgressBar_Vertical)
    SetGadgetState   (#jauge3, 100)   ; change la valeur de la 3ème barre de progression (ID = 2) à 100 sur 300
    Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
  EndIf

Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Répondre