1
votes

Le moyen le plus simple d'afficher des boîtes 3D colorées dans des winforms

Pour un projet, je souhaite afficher une scène 3D avec des boîtes dans une application winform. Pour chaque boîte, je veux définir les coordonnées longueur / largeur / hauteur x / y / z et la couleur.Je veux que ce soit aussi simple que possible, bien que l'utilisateur devrait pouvoir faire pivoter la scène avec la souris.

J'ai beaucoup cherché sur Google, mais toutes les solutions que je trouve sont bien plus compliquées que je ne le pense. Chaque exemple vous fait dessiner vous-même chaque point et chaque sommet.

Le plus proche d'une solution simple est la bibliothèque SharpGL avec le Scenecontrol. Là, vous pouvez coder simplement:

Scene.AddBox(length, width, height, x, y, z, Rx, Ry, Rx, color)

Mais je ne parviens pas à trouver comment ajouter des couleurs et des commandes utilisateur. Je n'ai trouvé presque aucune documentation de cette bibliothèque.

Ne devrait-il pas y avoir une bibliothèque vraiment simple où vous pouvez simplement coder quelque chose comme:

var cube = new Cube();
cube.Transformation.ScaleX = 0.3f;
cube.Transformation.ScaleY = 0.2f;
cube.Transformation.ScaleZ = 0.4f;
cube.Transformation.TranslateX = 1f;
cube.Transformation.TranslateX = 2f;
cube.Transformation.TranslateX = 3f;
sceneControl1.Scene.SceneContainer.AddChild(cube);

Ou suis J'ai raté quelque chose? J'espère que quelqu'un pourra me diriger dans la bonne direction.


1 commentaires

Contrôle utilisateur affichant une scène simple utilisant uniquement des composants WPF natifs. Le même contrôle utilisateur peut être utilisé de manière interchangeable dans les applications WPF et Winforms. Dans Winforms, un ElementHost est nécessaire.


3 Réponses :


0
votes

Oubliez d'utiliser les formulaires Windows pour cela, il était destiné aux interfaces et non au rendu 3D, et il fait toujours un mauvais travail.


2 commentaires

Pourriez-vous recommander une autre façon de le faire à partir de c # (il est préférable de l'intégrer dans un winform, mais d'utiliser un autre type de contrôle?)


J'utiliserais l'unité, si l'interface n'est pas trop complexe. Si c'est le cas, WPF avec certaines bibliothèques. La seule raison d'utiliser Winforms maintenant est si vous avez du code hérité ou si votre entreprise travaille avec cela.



0
votes

Lancer OpenGL avec winforms pour rendre un cube me semble difficile mais c'est possible.

Je vous suggère d'utiliser la version web d'opengl. WebGL.

Vous aurez besoin d'un navigateur. Le problème est que winforms a un mauvais navigateur Web intégré. Vous aurez donc besoin d'un navigateur plus moderne.

Vous avez quelques options: Bord (EdgeHTML) Chrome (Chrome) Firefox (Gecko)

J'ai eu une expérience avec chacun d'eux dans winforms. Ils ont tous des avantages et des inconvénients.

Nous utiliserons Edge car ce navigateur est intégré à Windows 10 et vous pouvez l'intégrer directement dans votre application WinForms en utilisant le kit d'outils de la communauté Windows. P >

Veuillez installer le package NuGet Windows Community Toolkit pour WinForms sur votre projet.

Maintenant, actualisez votre boîte à outils et faites glisser un contrôle WebView là où vous voulez le cube.

(La taille du design dépend de vous ...)

La prochaine étape consiste à écrire du code.

Vous devrez écrire un peu de JavaScript et HTML pour afficher le cube à l'écran.

Voici un exemple que j'ai trouvé en ligne: https://codepen.io/dbrandt/pen/mEbqZz

Après avoir obtenu votre code HTML, faites quelque chose comme ceci:

webView.NavigateToString(yourHtmlAsString);

Et vous vous êtes procuré un rendu de cube 3D avec opengl sur Winforms!


0 commentaires

2
votes

Vous devez utiliser WPF / C # et obtenir la bibliothèque AB4D ou Helix Toolkit.

AB4D coûte de l'argent mais ce serait super facile de le faire. J'ai utilisé AB4D mais pas la boîte à outils Helix.

Découvrez Powertoys sur: https://www.ab4d.com/powertoys.aspx


2 commentaires

Oh mon Dieu, puni pour avoir essayé de répondre à une question qui ne respecte pas les "règles"


Je pense que la boîte à outils Helix sera le choix pour moi pour ce projet. Je vais juste devoir mordre la balle et passer à WPF (ce qui n'est pas une mauvaise idée de toute façon).