Dessiner dans une PitcureBox

Signaler
Messages postés
30
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
13 septembre 2012
-
Messages postés
30
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
13 septembre 2012
-
Bonjour à tous,
J'ai une question sur mon application VB6.

Au jour d'aujourd'hui je bosse sur une application VB6 ou il y a une
fonction visuel pour voir une pièce en cours d'usinage.

Enfaîte on voit un brut "une pièce brut" puis un outil de coupe et en tant
réel la pièce se fait grignoter.



Tout se petit monde est représenté dans une PictureBox et à chaque déplacement je fais un clear puis je redessine la pièce, le brut, les traits d'axes etc... Vue que je fais cette manip des millions de fois je vous laisse imaginer comment l'appli ralenti.

Vous avez une autre solution sans faire un clear ? histoire de garder des choses fixes sans tout redessiner ?

Je ne peux pas utiliser direct X OpenGL ou autre car le pc ou l'appli tourne n'est pas assez puissant.

Merci de votre aide.

35 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Bonjour,

J'ai déjà vu ce dessin dans ton autre discussion.
Je suis persuadé de ce que ce serait beaucoup plus clair si :
- si tu l'assortissais, pour chaque couleur, d'une petite "bulle" de commentaires
- tu expliquais en détail comment se déplace l'outil (apparemment représenté ici 2 fois ?)

Car oui, j'entrevois une solution, mais elle nécessite la confirmation de ce que je "pressens" depuis le tout début, mais qui n'est pas encore suffisamment précisé.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Ma première réaction, à ce stade, est qu'il est fort vraisemblable que tu gagnerais à utiliser la fonction FloodFill de la librairie gdi32 de l'Api de Windows.
Mais il te faudrait alors envisager de ne pas utiliser de "hachurage" et de le remplacer par une couleur différente, significative de ta pièce.
Ce n'est toutefois là qu'une réaction "instinctive" dont le bien fondé ne pourra être confirmé ou infirmé qu'en meilleure connaissance de cause (voir mon message précédent).


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
30
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
13 septembre 2012

Autant pour moi :(
Alors pour les explications :

On voit sur cette image qu'il y a un outil (en jaune) avec une piece
(en grise)


Petit a petit l'outil avance et grignote la piece :





Ce matin j'ai avancé, j'ai fais en sorte de ne pas redessiner la pièce
et les hachures grâce à : Picture.AutoRedraw

Je suis plus clair ?

Merci encore
Messages postés
30
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
13 septembre 2012

Je suis obligé de garder l'image comme ça avec les hachures :(
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Bon:
1) Qu'est la zone grise non hachurée ? Est-ce la matière à rogner ?
2) Qu'est la zone grise hachurée ?
3) Pourquoi, sur la 3ème image, l'axe vertical gauche en rouge pointillé est-il discontinu ? Est-ce voulu ou une erreur ?


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Autre question importante :
Je suppose que le lame de ton outil se déplace selon un algo et que tu connais les coordonnées de la pointe à chaque mini-déplacement :
2 questions :
1) fais-tu un relevé de ces positions pixel par pixel ? et ===>>
--- 2) si oui ce sera facile
--- 3) si non : les déplacements d'un point au point suivant ne peuvent-ils n'être que verticaux ou horizontaux (et ce sera alors également facile) ou peuvent-ils également être obliques ?


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
30
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
13 septembre 2012

Bon:
1) Qu'est la zone grise non hachurée ? Est-ce la matière à rogner ?
2) Qu'est la zone grise hachurée ?
3) Pourquoi, sur la 3ème image, l'axe vertical gauche en rouge pointillé est-il discontinu ? Est-ce voulu ou une erreur ?



1) Oui tout à fait
2) La pièce finit
3) C'est de ma faute suite à mon figeage de l'image mais je vais y changer
facilement :)

Autre question importante :
Je suppose que le lame de ton outil se déplace selon un algo et que tu connais les coordonnées de la pointe à chaque mini-déplacement :
2 questions :
1) fais-tu un relevé de ces positions pixel par pixel ? et ===>>
--- 2) si oui ce sera facile
--- 3) si non : les déplacements d'un point au point suivant ne peuvent-ils n'être que verticaux ou horizontaux (et ce sera alors également facile) ou peuvent-ils également être obliques ?



Enfaîte c'est une appli qui est embarqué sur une machine d'usinage (un tour) donc le pc ou tourne l'appli est accouplé avec une Commande Numérique.
La CN m'envoi la position réel de mon outil et moi je redessine mon outil avec les nouvelles coordonnée via un Line...
Je peux faire des angles aussi donc bouger sur 2 axes en même temps.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
2) La pièce finie

je ne comprends pas !: car toujours la même sur tes 3 images. Qu'en est-il donc ?
Voudrais-tu (peut-être) dire plutôt, alors "telle qu'elle devrait être in fine" ?
Je peux faire des angles aussi donc bouger sur 2 axes en même temps.

Il devient alors très important de répondre (pas fait complètement) avec précision aux questions que je t'ai posées, notamment la 1ère !
1) fais-tu un relevé de ces positions pixel par pixel ? et ===>>
--- 2) si oui ce sera facile
--- 3) si non : les déplacements d'un point au point suivant ne peuvent-ils n'être que verticaux ou horizontaux (et ce sera alors également facile) ou peuvent-ils également être obliques ?

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
728
Date d'inscription
samedi 4 avril 2009
Statut
Membre
Dernière intervention
30 mars 2014
6
Bonjour yostone,

Déjà bien comprendre ....

La partie haute, est-ce une vue en coupe, tu parles d'un tour, donc le mandrin doit être à gauche et la poupée (si besoin à droite) ?

Là ton outils attaque la pièce perpendiculairement, il fait donc des gorges dans un cylindre je présume ?

Le reste en D.I est assez confus, qu'il y ait la position de l'outil, le sens de travail et la matière rognée, certes, mais ls traits partout, rouge, jaune, du bleu en dessous, etc, on ne peut pas faire plus simple pour avoir moins à écrire ?

Le trait en pointillés long dans la zone grise, est-ce l'axe du milieu du cylinde, une partie caché de la forme de la pièce ?

Est-ce un usinage, ou un réusinage sur un pièce déjà usinée ?

Est-ce fait en une seule passe, ou plusieurs passes ?

Si on simplifiait, on pourrait ne changer que la zone concernée (rouge), ce qui irait plus vite, exemple :




Cordialement, Joe.
Messages postés
30
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
13 septembre 2012

Mes impressions écrans sont en cours d'usinage et non du début à la fin.
Oui tu as raison c'est plutôt "telle qu'elle devrait être in fine"

Pour la question importante je n'ai pas su l’interpréter :(
Pour faire la pointe de coupe de mon outil je fais comme ça ?

                
Form1.Picture2.CurrentY = Origine_Outil_X
Form1.Picture2.CurrentX = Origine_Outil_Z 
Form1.Picture2.Line -Step(i * Outil_tmps_Diametre * 0.5 * Phy, -i * Outil_tmps_Diametre * 0.25 * Phy), Couleur_Jaune
Form1.Picture2.Line -Step(-i * Outil_tmps_Diametre * Phy, 0), Couleur_Jaune
Form1.Picture2.Line -Step(i * Outil_tmps_Diametre * 0.5 * Phy, i * Outil_tmps_Diametre * 0.25 * Phy), Couleur_Jaune               


A chaque déplacements de l'outil (en réel) les points "Origine_Outil"
évolues donc je redessine mon outil plus loin...

J'ai pu répondre à ta question ? désolé mais cette fonction a été développé par mon successeur moi je la découvre...

Merci encore.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Toujours non suffisamment précis, mais ===>>
De toutes manières :
1) si déplacements du point d'usure de 1 pixel par un pixel (quel que soit le sens) ===>>> méthode :
Peindre ce pixel en bleu. Peindre également en bleu le pixel de coordonnée = coordonée du point - 1 (pour traiter le cas d'un déplacement oblique).

2) si deplacements de plus de 1 pixel ===>> méthode :
tracer une line peinte en bleu du point de départ au point d'arrivée. Aller au point de coordonnée = celle du point d'arrivée - 1 et y utiliser la fonction FloodFill (dont je t'ai parlé plus haut) pour y peindre en bleu (pour traiter le cas d'un déplacement oblique)

A noter : tu pourrais, tant dans le 1er cas que dans le second, gagner (mais si peu) un peu de temps d'exécution en n'allant "peindre" au dessous que dans les cas de déplacements oblique. Mais ce ne serait que pour la "beauté du geste").



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
30
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
13 septembre 2012



La partie haute, est-ce une vue en coupe, tu parles d'un tour, donc le mandrin doit être à gauche et la poupée (si besoin à droite) ?


Oui c'est ça, oui le mandrin est à gauche et la contre-pointe à droite
(la poupée est la partie que contient la broche ou le mandrin est fixé)


Là ton outils attaque la pièce perpendiculairement, il fait donc des gorges dans un cylindre je présume ?


Non mon outil usine la pièce de droite à gauche puis après avoir finie
avec cette outil j'utilise un outil à gorge pour faire le reste


Le reste en D.I est assez confus, qu'il y ait la position de l'outil, le sens de travail et la matière rognée, certes, mais ls traits partout, rouge, jaune, du bleu en dessous, etc, on ne peut pas faire plus simple pour avoir moins à écrire ?


Non je dois rester comme ça (ce n'est pas moi qui décide )


Le trait en pointillés long dans la zone grise, est-ce l'axe du milieu du cylinde, une partie caché de la forme de la pièce ?


C'est le centre de la pièce oui


Est-ce un usinage, ou un réusinage sur un pièce déjà usinée ?
Est-ce fait en une seule passe, ou plusieurs passes ?


C'est un exemple de pièces, j'usine la pièce via des paramètres définit
(Profondeur de passe, vitesse etc...) Et la CN va calculer le nombres
de passe à prendre puis va usiner jusqu'aux trait rouge (avec la partie jaune) puis si je lance la passe de finition il va usiner le tout en une seul passe.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Bon...
Je pense t'avoir personnellement tout dit.
J'y ajoute simplement ceci :
- Pset (natif de vb6) te permet de colorer un pixel
- Line (natif de vb6) te permet de dessiner/colorer un segment
En ce qui concerne l'effet "rouleau" (floodfill) ===>>
Tu vas en trouver un exemple complet Sur cette source déposée par mon "frère jumeau" jmfmarques.

Tu as maintenant là tout ce qu'il te faut pour mettre en oeuvre.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
30
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
13 septembre 2012

Bon...
Je pense t'avoir personnellement tout dit.
J'y ajoute simplement ceci :
- Pset (natif de vb6) te permet de colorer un pixel
- Line (natif de vb6) te permet de dessiner/colorer un segment
En ce qui concerne l'effet "rouleau" (floodfill) ===>>
Tu vas en trouver un exemple complet Sur cette source déposée par mon "frère jumeau" jmfmarques.

Tu as maintenant là tout ce qu'il te faut pour mettre en oeuvre.


Merci pour ton aide, je dois finir une fonction de com pour ma CN et je test tout ça ;-)
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
ce que tu dessines arrive sur le .Image
ce qui reste après le Clear est le .Picture

possible de transferer le .image vers le .picture :

Set picture1.Picture = picture1.image

donc, ta pièce sur le .picture

et en boucle :
clear
tu rogne ta pièce
tu transfere en .Picture
tu dessine axes, outils, etc. (=>Image)

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
30
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
13 septembre 2012

ce que tu dessines arrive sur le .Image
ce qui reste après le Clear est le .Picture

possible de transferer le .image vers le .picture :

Set picture1.Picture = picture1.image

donc, ta pièce sur le .picture

et en boucle :
clear
tu rogne ta pièce
tu transfere en .Picture
tu dessine axes, outils, etc. (=>Image)


Si j'ai bien compris,
Je dessine tout se que je veux dessiner en fixe puis après j'y passe
en .Picture, quand je lance le .clear l'amont du .Picture reste ?
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
yep


Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
et l'autoredraw, en fait, ne fait que conserver le .Image pour le restituer quand necessaire

possible que tu aies a jouer avec (a l'activer/desactiver etc)

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
30
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
13 septembre 2012

Bonjour, j'ai bien avancé sur ma gestion grâce à vous :)

J'aimerai savoir si ce n'est pas possible de rajouter une picturebox
ou autre histoire de super-positionner sur mon outil dessiné (en jaune)
l'image réel de l'outil ? Je pense que ça serait plus parlant comme représentation.

L'outil donnera la taille de la picturebox (pour ajuster la taille de mon outil en image) et se déplacera en même temps ?

Merci encore à vous :)
Messages postés
30
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
13 septembre 2012

De retour pour vous tenir au courant,
Alors j'ai bien réussi a mettre une picturebox par dessus pour afficher
une image de l'outil, elle se déplace bien en même temps que l'usinage,

mais mon seul souci c'est qu'une picturebox est QUE carré et vue que j'ai
des outils ronds ou en losange je me retrouve avec un petit souci de fond.
(je vais vous poster des impr écran)

Vous avez une solution pour avoir une picturebox de la forme de mon outil ?
ou je me retrouve dans une impasse ?

Merci à vous :)