PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Champ XAML viewer 3D
Champ XAML viewer 3D
Débuté par PJ2, 25 nov. 2020 12:23 - 6 réponses
Membre enregistré
3 messages
Posté le 25 novembre 2020 - 12:23
Bonjour à tous,

Je viens ici vous exposer notre problème.

Nous sommes actuellement en cours de développement d'une application qui a pour but de permettre à nos clients de commander des impressions 3D en nous envoyant des fichiers 3d (format stl) via celle-ci.

Windev ne proposant pas de champ pour la visualisation de fichier 3d, je cherche un moyen d'afficher un fichier stl.
Après quelques recherches, je n'ai pas trouvé de solution concrète à adapter cependant j'ai retenu principalement 2 solutions possibles:
- Utilisation du champ navigateur internet et affichage d'une page avec un viewer en javascript
- Utilisation d'un assemblage .NET.

La première solution semble fonctionner mais n'est pas assez fluide et bancale à mon gout. Je souhaite donc utiliser la 2ème.
A priori il existe un assemblage permettant de faire de la visu. 3d assez facilement : Helix Toolkit (https://github.com/helix-toolkit/helix-toolkit), je souhaite donc utiliser cette solution.

Donc si je comprends bien, il faut que j'utilise le champ XAML de Windev et que je rajoute l'assemblage .NET dans mon projet Windev.

Pour loader un fichier 3d a l'aide de Helix Toolkit, il faut utiliser la commande suivante :
<HelixToolkit:FileModelVisual3D x:Name="model1" Source="C:\$path\test_obj.obj"/>

N'ayant pas d'expérience en XAML, je ne sais pas vraiment comment faire.

Si je comprends bien le champ XAML est juste la partie graphique, l'interaction avec l'UI se fait dans un code à part.

Je ne comprends pas bien qu'est-ce qu'il faut renseigner dans le code XAML du camp correspondant dans Windev, ni ou utiliser les commandes du Helix Toolkit dans Windev.

Si quelqu'un peux m'aiguiller dans mon problème...

Merci.
Membre enregistré
962 messages
Popularité : +183 (185 votes)
Posté le 25 novembre 2020 - 15:20
hello,
il y a bien longtemps (en 2014 avec windev 16) j'avais essayé le contrôle Dotnet xaml Helix .
Avec cette description dans le contrôle :
<UserControl >
<Grid x:Name="LayoutRoot"
Background="Blue">
<Canvas Width="400" Height="424">
<Viewport3D Canvas.Left="100"
Canvas.Top="100"
Width="200"
Height="200"
Name="mainViewport"
ClipToBounds="True"
IsHitTestVisible="False">
<Viewport3D.Camera>
<PerspectiveCamera x:Name="camMain" Position="6 5 4" LookDirection="-6 -5 -4">
</PerspectiveCamera>
</Viewport3D.Camera>
<ModelVisual3D>
<ModelVisual3D.Content>
<DirectionalLight x:Name="dirLightMain" Direction="-1,-1,-1">
</DirectionalLight>
</ModelVisual3D.Content>
</ModelVisual3D>
<ModelVisual3D x:Name="MyModel">
<ModelVisual3D.Content>
<GeometryModel3D>
<GeometryModel3D.Geometry>
<MeshGeometry3D x:Name="meshMain"
Positions="0 0 0 1 0 0 0 1 0 1 1 0 0 0 1 1 0 1 0 1 1 1 1 1"
TriangleIndices="2 3 1 2 1 0 7 1 3 7 5 1 6 5 7 6 4 5 6 2 0 2 0 4 2 7 3 2 6 7 0 1 5 0 5 4">
</MeshGeometry3D>
</GeometryModel3D.Geometry>
<GeometryModel3D.Material>
<DiffuseMaterial x:Name="matDiffuseMain">
<DiffuseMaterial.Brush>
<SolidColorBrush Color="Red"/>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
</GeometryModel3D.Material>
</GeometryModel3D>
</ModelVisual3D.Content>
<ModelVisual3D.Transform>
<RotateTransform3D>
<RotateTransform3D.Rotation>
<AxisAngleRotation3D x:Name="rotate" Axis="0 2 0"/>
</RotateTransform3D.Rotation>
</RotateTransform3D>
</ModelVisual3D.Transform>
</ModelVisual3D>
</Viewport3D>
</Canvas>
<Slider Height="40" HorizontalAlignment="Left"
Margin="12,12,0,0" Name="slider1"
VerticalAlignment="Top" Width="187"
Maximum="360"
Value="{Binding ElementName=rotate, Path=Angle}" />
</Grid>
</UserControl>


j'arrivais à faire ceci :






Cela donne un point de départ mais le plus dur reste à faire !

--
Ami calmant, J.P
Membre enregistré
962 messages
Popularité : +183 (185 votes)
Posté le 27 novembre 2020 - 08:33
hello,
finalement c'est faisable mais en utilisant un usercontrol dotnet ce qui implique un développement dans un environnement dotnet (visual studio ou sharpdevelop). J'ai réussi à bidouiller un usercontrol mais cela n'est qu'au stade expérimental. Il y a dedans un contrôle helixViewport3D et un bouton pour charger un fichier stl. Cela génère un assemblage dotnet que l'on importe dans Windev
Dans la description xaml du contrôle dotnet wpf j'ai mis :
<Grid xmlns:Controls0="clr-namespace:SolHelix;assembly=SolHelix"
Height="550"
Width="640"

<Controls0:helixcontrol
Name="MyHelixControl"
Grid.Column="0"
Grid.Row="0"
Height="Auto"
Width="Auto"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Margin="0,0,0,0"
/>
</Grid>


SolHelix étant le nom de l'assemblage qui contient le usercontrol et helixcontrol le nom du usercontrol

et voici ce que ce la donne :





A noter que cela est peut-être moins risqué et plus fiable d'utiliser un activex payant de visualisation de fichier stl ou d'utiliser un programme de visualisation externe comme la visionneuse 3D de microsoft qui est gratuite.

--
Ami calmant, J.P
Membre enregistré
3 messages
Posté le 02 décembre 2020 - 16:23
Hello J.P.,

Premièrement merci pour tes réponses.
Effectivement le premier exemple n'utilise pas Helix mais les lib de Windows directement.

Je ne maitrise absolument pas dotnet, mais avec un peu d'explications et de recherche je pense pouvoir m'en sortir tout de même =).

Pourrais-tu m'envoyer ton projet Windev complet? Cela me permettrait de mieux comprendre les interactions entre les différents éléments.

Autre question, pourquoi cela serait moins risqué et plus fiable d'utiliser un activex payant ? (aurais-tu un exemple d'un viewer activx ?)
Un programme de visu externe n'est pas envisageable dans mon cas, il me faut absolument pouvoir afficher un stl depuis l'app directement... trop simple sinon :D

Merci

Cdt,
Jean
Membre enregistré
24 messages
Popularité : +2 (2 votes)
Posté le 03 décembre 2020 - 14:53
Je serai fort intéressé également si l'un de vous deux pouvait me faire parvenir ce projet comme example de base pour la manipulation des champs XAML et leur interaction avec des assembly externe en .NET.

Merci d'avance à vous
Membre enregistré
962 messages
Popularité : +183 (185 votes)
Posté le 15 décembre 2020 - 08:58
hello,
j'ai ajouté une contribution dans le forum windev de developpez.net ici :
https://www.developpez.net/forums/d2098545/environnements-developpement/windev/contribuez/utilisation-d-usercontrol-wpf-xaml-windev/…

Dans celle-ci il y a une solution dotnet et un projet windev.
voici les vidéos qui présentent les différents aspects :
pour l'aspect Dotnet :



pour l'aspect Windev :



--
Ami calmant, J.P
Membre enregistré
3 messages
Posté le 21 janvier 2021 - 19:42
Hello J.P.,

Excuse-moi pour le délai de réponse.
Je te remercie grandement pour ta contribution, cela me permet d'avoir un bon point de départ pour le développement de mon projet.

Cdt,
Jean