IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Vos contributions VB6 Discussion :

Rotation d'un rectangle [Sources]


Sujet :

Vos contributions VB6

  1. #1
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut Rotation d'un rectangle
    La présente proposition est le résultat du travail commun accompli par Asdorve et jmfmarques.

    Certains d'entre vous auront pu assister en direct à toutes les étapes de son développement, depuis l'idée jusqu'à sa naissance... en passant par des modifications de stratégie.

    http://www.developpez.net/forums/sho...d.php?t=168174

    Il s'agit là, apparemment, de la première application faite à deux et nous espérons que cette façon de procéder sera imitée par d'autres.

    Le mot de jmfmarques:
    J'ai éprouvé beaucoup de plaisir à participer au développement de ce projet. Je félicite Asdorve d'avoir choisi ce chemin, qui est celui de la création personnelle, en s'efforçant de rester dans l'esprit de VB. J'aimerais assez voir d'autres forumeurs de DVP se grouper, à 2 ou 3 (pas plus), pour mettre au point, dans le même esprit, des applications ou des outils encore inédits.

    Le mot d'Asdorve:
    J'ai également pris beaucoup de plaisir aux côtés de jmfmarques et je remercie ce dernier pour ce qu'il m'a apporté durant le temps de ce projet.
    Je me joints à lui pour inciter d'autres personnes à faire de même.



    Ce "source" est donc signé et proposé conjointement par jmfmarques et Asdorve

    PRESENTATION DE L'APPLICATION :
    Cette application montre comment dessiner des rectangles vides ou pleins de dimensions choisies, de définir une épaisseur et une couleur de trait pour ses contours, ainsi qu'une couleur de fond (pour les rectangles pleins) et surtout comment les faire pivoter autour d'un centre prédéfini, tout en gardant les mêmes paramètres de trait et de couleur.
    Une opération peut-être annulée (bouton ad hoc) jusqu'à ce que l'utilisateur décide de la valider par un bouton "Figer".
    Plusieurs rectangles peuvent être dessinés sur la même Form, avec les mêmes paramètres ou des paramètres différents.
    Fichiers attachés Fichiers attachés
    Xavier

  2. #2
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Dans la perspective d'un outil de dessin complet, nous avons modifié :

    1) la présentation
    La rotation est maintenant "insérée" dans un "cadre" destiné à recevoir d'autres fonctions, au fur et à mesure.
    D'autres fonctions de dessin seront proposées . Chacune fera l'objet d'une présentation "séparée", mais toujours dans le même "cadre" d'outil, et, parallèlement, insérée dans l'outil général
    2) l'utilisation de mécanismes
    - une seule "Form"
    - la "toile" est maintenant dimensionnable et, si ses dimensions sont plus grandes que la surface d'affichage, tant en longueur qu'en hauteur, la ou les barres nécessaires apparaissent pour en assurer le déroulement...
    - dans la perspective d'un outil général, le choix des couleurs (de 1er plan et de fond) ainsi que celui de l'épaisseur du trait se font maintenant ailleurs que dans la fenêtre destinée au seul rectangle orientable
    - un menu a été installé, toujours dans la perspective d'un outil général

    3) L'outil général sera trilingue (français, espagnol et anglais). Ce module l'est donc également.
    Nous l'avons donc doté d'un fichier de ressources

    4) La gestion d'un redimensionnement pour faire face à différentes résolutions n'est pour l'instant traitée que de façon grossière.
    Nous en avons décidé ainsi pour ne pas, à ce niveau, "noyer" l'essentiel. Lorsque l'outil général sera arrêté, il sera doté d'un OCX nettement plus performant et libre de droits (il m'appartient).
    Dans l'état actuel des choses, donc, le présent outil présente un meilleur aspect en résolution 1280 x 1024, mais réagit bien jusqu'à 800 x 600
    Il a besoin de la présence, sur le PC client, de l'une des polices de caractères suivantes, qu'il utilisera dans un ordre préférentiel décroissant :

    Times New Roman
    MS Serif
    Tahoma
    Courier New
    Garamond

    Signé : Asdorve et jmfmarques

    EDITE par jmfmarques : tout ce qui n'était pas la rotation elle-même (l'aspect trilingue en particulier), ayant donné , d'une part, à des observations inattendues et, d'autre part, la nécessité de "faire le ménage" dans mes pièces jointes pour regagner un peu de place dans mon quota, le dernier zip (celui qui présentait les choses dans la perspective de la construction d'un outil de dessin complet) a été supprimé.
    Disparaissent ainsi, entre autres, pour ne laisser place qu'à la seule rotation brute : l'utilisation d'un fichier de ressources pour traduire en plusieurs langues et les instructions relatives à un redimensionnement.
    J'en suis désolé.

  3. #3
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Je suis, mais alors là, vraiement tres admiratif envers les gens maitrisant la géometrie, qui pour moi , tiens toujours de l'incompréhension totale.

    J'ai lu/relu le code plusieurs fois et me suis apperçu que la rotation d'un rectectangle se fait en calculant la rotation de chacuns des points.
    Et la je me suis dit, pourquoi ne pas avoir fait une routine séparée pour le calcul de la rotation d'un seul point ? Cà ouvrirait la porte a la rotation de n'importe quel polygone, regulier ou non, fermé ou ouvert
    je vous propose mon expression de votre formulation

    dans un module séparé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Public Type Point
      X As Single
      Y As Single
    End Type
     
    Public Function RotatePoint(Angle As Long, _
                                Centre As Point, _
                                Pt As Point) As Point
      Static Pi As Double
      Dim AngCrad As Single
      If Pi = 0 Then Pi = 4 * Atn(1)
      AngCrad = (Pi * Angle) / 180
      RotatePoint.X = ((Pt.X - Centre.X) * Cos(AngCrad) - (Pt.Y - Centre.Y) * Sin(AngCrad) + Centre.X)
      RotatePoint.Y = ((Pt.X - Centre.X) * Sin(AngCrad) + (Pt.Y - Centre.Y) * Cos(AngCrad) + Centre.Y)
    End Function
    Votre fonction tournons deviendrait alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    Public Sub tournons(forma As Form, _
                        CentreX As Single, _
                        CentreY As Single, _
                        Longueur As Integer, _
                        Largeur As Integer, _
                        Epaisseur, _
                        Coultrait, _
                        Plein)
      Dim Centre As Point
      Dim PtOrg1 As Point, PtOrg2 As Point, PtOrg3 As Point, PtOrg4 As Point
      Dim PtDest1 As Point, PtDest2 As Point, PtDest3 As Point, PtDest4 As Point
      Dim Angle As Long
     
      Angle = CLng(AngleRot)
      Centre.X = CentreX
      Centre.Y = CentreY
     
      PtOrg1.X = Centre.X - Longueur / 2:  PtOrg1.Y = Centre.Y - Largeur / 2
      PtDest1 = RotatePoint(Angle, Centre, PtOrg1)
     
      PtOrg2.X = PtOrg1.X + Longueur:  PtOrg2.Y = PtOrg1.Y
      PtDest2 = RotatePoint(Angle, Centre, PtOrg2)
     
      PtOrg3.X = PtOrg2.X:  PtOrg3.Y = PtOrg1.Y + Largeur
      PtDest3 = RotatePoint(Angle, Centre, PtOrg3)
     
      PtOrg4.X = PtOrg1.X:  PtOrg4.Y = PtOrg3.Y
      PtDest4 = RotatePoint(Angle, Centre, PtOrg4)
     
      forma.DrawWidth = Epaisseur
      forma.ForeColor = Coultrait
      ' nous pouvons maintenant dessiner les 4 segments qui sont les côtés du rectangle
      forma.Line (PtDest1.X, PtDest1.Y)-(PtDest2.X, PtDest2.Y)
      forma.Line (PtDest2.X, PtDest2.Y)-(PtDest3.X, PtDest3.Y)
      forma.Line (PtDest3.X, PtDest3.Y)-(PtDest4.X, PtDest4.Y)
      forma.Line (PtDest4.X, PtDest4.Y)-(PtDest1.X, PtDest1.Y)
    End Sub
    Qu'en pensez vous ?
    En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
    (ALEXANDRE DUMAS)

    N'hésitez pas à visiter ma page de contributions

  4. #4
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Bonjour DelBeke,

    Regarde mieux le code écrit pour la rotation d'un rectangle.

    Il s'agit précisément, pour chaque segment, de la rotation de 2 points (ceux des extrémités). Ces 2 seuls points permettent ensuite le tracé de la droite.

    Ce principe peut bien évidemment être appliqué à tout polygone, régulier ou non.... à condition toutefois que le polygone existe.... et soit donc au préalable déssiné (et là commencera la difficulté... ).
    Tu peux en effet définir aisément, en code, les 4 coins d'un quadrilatère, en indiquant la hauteur et la largeur.
    Tu peux définir aisément un triangle isocèle (et donc ses 3 coins) en donnat sa base et sa hauteur.
    etc...

    Comment définirais-tu (pour voir) par code les coordonnées des n coins d'un polygone irrégulier modifiable (pour le dessiner par code et pas à main levée.... si tu le faisais à main levée, il te faudrait aller ensuite cliquer sur chaque coin, dans un ordre précis, pour que l'appli repère ces coordonnées et les garde en mémoire ) ?

    C'est là la principale raison, Delbeke, de la limitation aux quadrilatères, cercles et ellipses, pour les dessins de VB (par line avec l'option B, etc...) ainsi que celle pour laquelle les contrôles Shape de VB (ainsi que les dessins ajoutés de Corel) restent ceux qu'il sont.

  5. #5
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Loin de moi l'idée de vouloir sous estimer la valeur de ce que vous avez fait.
    C'etait une idée. Elle ne plait pas, je la remets dans ma culotte

    Sinon, si j'avais a faire un projet de ce type, je mettrais en place des collections d'objets , avec differents type d'objets, le polygone par exemple aurait une collection de points, et le rectangle seulement deux points, etc ..
    Heuresement que je n'ai pas à le faire !
    Bonne continuation, l'idée de faire un projet avec quelqu'un de moins expérimenté est très admirable. J'approuve. Je le ferais peut être un jour.
    En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
    (ALEXANDRE DUMAS)

    N'hésitez pas à visiter ma page de contributions

  6. #6
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    J"ai déjà commencé il y a quelques années, Delbeke, ... et ai abandonné pour les raisons que je t'ai indiquées, notamment sur la non "modifiabilité" en cours de route.
    Ce que tu dis va bien avec des fichiers Metafiles (donc par vecteurs mémorisés) mais pas avec des Bmp (sauf à ne plus pouvoir modifier l'image ou les dimensions du polygone)

  7. #7
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    c'est evident
    En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
    (ALEXANDRE DUMAS)

    N'hésitez pas à visiter ma page de contributions

  8. #8
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Malheureusement, VB ne traite pas les métafiles.
    Pour être complet, Delbeke, il en va différemment en ce qui concerne les figures géométrique régulières qui ont toujours un centre de rotation (2 en ce qui concerne les ellipses) et en ce qui concerne les polygones non réguliers.
    S'il fallait de surcroît jouer à la bataille navale avec des valeurs dans des textboxes, celà demanderait plus de concentration à l'utilisateur que de dessiner directement des segments en continu (je sais faire...) puis d'utiliser, pour le remplissage éventuel, une API (je sais faire aussi) et de ne valider (figer l'image) que lorsque satisfait.
    En résumé : facile de faire tourner également un triangle (isocèle ou equilatéral), un losange, etc...
    Il est plutôt scabreux de passer par cette méthode pour des polygones irréguliers.

Discussions similaires

  1. [Canvas] Rotation d'un rectangle ou image
    Par airod dans le forum Tkinter
    Réponses: 1
    Dernier message: 03/10/2007, 19h59
  2. [OpenGl] Problème rotation d'un rectangle
    Par dib258 dans le forum SDL
    Réponses: 2
    Dernier message: 20/12/2006, 17h02
  3. [vb6] Rotation d'un rectangle
    Par Asdorve dans le forum Vos contributions VB6
    Réponses: 106
    Dernier message: 05/07/2006, 11h06
  4. Rotation d'un rectangle
    Par erwan.bodere dans le forum SDL
    Réponses: 4
    Dernier message: 02/12/2005, 21h19
  5. Rotation d'un rectangle autour du centre de gravité
    Par bucheron dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 22/06/2004, 11h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo