Forum Clubic

Utiliser OpenCascade dans un applet java

Bonjour,

Je suis en train de travailler sur un projet qui consite à créer un applet java permettant de visualiser un objet CAO au format STEP, et donc de pouvoir le manipuler (rotation, zoom etc…).

Afin d’importer un tel objet (STEP) j’ai appris sur la toile qu’on pouvait utiliser OpenCascade, mais j’ai trouvé très peu d’information sur cette libraire mis-appart la doc officiel. je suis un peu perdu avec cette libraire et je ne sais pas si on peut l’utiliser dans un applet (et donc avec JAVA), et si oui comment? Quelqun connait-il cette librairie?

J’ai également entendu parler de JCAE et OCCJava qui ont l’air de pouvoir m’être utile et qui sont également lié avec OpenCascade http://jcae.sourceforge.net/[/url], notamment le viewer3D [url=http://jcae.sourceforge.net/viewer3d.html]http://jcae.sourceforge.net/viewer3d.html.

Je suis un peu perdu avec toute ces choses,quelqun pourrait m’éclairer?

Merci d’avance.
Edité le 08/10/2007 à 11:39

Re-bonjour,

Ce serait vraiment super que quelqun puisse m’aider, je suis actuellement bloqué là dessus!!!:frowning:
Faut-il que je précise un peu mieux ma question? Si oui je le ferai volontier!

Merci d’avance pour votre aide.

Bonjour,
je pense que si personne ne répond, c’est que personnne ne connait open-cascade(mais je peux difficilement répondre pour les autres)

par contre, voici les info que j’aursi si tu ne les a déjà:

  • il faut utilise OCCJava pour l’applet, OpenCascade est apparament en C.
  • Tu peux l’utiliser dans une applet en adaptant une application java/Swing “classique” (typiquement, l’applet est un Panel, il suffit d’utiliser le Panel de l’applet en se servant ensuite du même code qu’en swing.

Si tu as un exemple Java pur qui fonctionne avec les classes graphiques “swing”, ça sera un bon point de départ pour l’applet.

Bonjour,

merci pour ta réponse, je suis effectivement en train de voir pour utiliser OCC JAVA.
Cependant j’aurais encore une question. par la suite, j’aimerais que l’application permette de visualiser le dessin 3D depuis plusieurs PC reliés entre eux via internet. Il doit être possible de manipuler le dessin depuis l?un ou l?autre des PC pour l?observer sous différents angles et d?ajouter des commentaires (tous les utilisateurs voient le même objet sous le même angle). comme dit plus haut, le dessin importé est au format STEP.

Penses-tu que le fait d’utiliser un JNI comme OCC JAVA puisse compromettre l’application??? car le fait d’utiliser un JNI annule la portabilité de JAVA non?

Oui, tout à fait, ce n’est plus complètement portable puisqu’il faut déployer les librairies utilisées (probablement des dll) et paramétrer la jvm installée pour qu’elle accepte ces dll en positionnant le “lib path”.

Une solution radicalement différente serait d’avoir un serveur Java/Tomcat qui génère des images fixes à la volée pour tes clients. (mais la ça devient nettement plus compliqué)

Merci

Alors voilà, après discussion avec mon mandant, je vais devoir partir sur la solution avec le serveur Tomcat. Je vais faire tout les calcul du côté serveur et envoyé aux clients le résultat. Je ne suis pas sur mais est-ce que OpenCascade produit bien du Java3D en sortie du fichier STEP???
je n’ai pas trouvé de réponse très clair à ce sujet mais je pense que oui.
Edité le 09/10/2007 à 09:50

Bonjour,

Pour l’instant je n’ai pas encore de solution définitive, mais je suis sur une piste. Actuellement j’utilise OCCJAVA et son viewer 3d afin d’afficher mon objet au format STEP dans mon application JAVA. Ca fonctionne parfaitement, de plus les méthodes de rotation et de zoom sont déjà implémenté. D’après ce que j’ai pu lire sur le site de JCAE l’objet est affiché en Java3d. Voici le code qui permet donc d’afficher en dans un application java un objet au format STEP,IGES ou BREP.

import java.io.File;
import javax.swing.JFrame;
import org.jcae.viewer3d.View;
import org.jcae.viewer3d.cad.ViewableCAD;
import org.jcae.viewer3d.cad.occ.OCCProvider;

/** Exemple pour le viewer 3D */
public class Example1
{
	public static void main(String[] args)
	{
		try
		{
			// The swing frame where we will put the view
			JFrame feFrame=new JFrame();
			feFrame.setSize(800,600);
	
			// Put it all in a view
			View feView=new View(feFrame);
			feFrame.addWindowListener(new EcouteurFenetre());
			
			// let's add a CAD viewable loaded from a STEP file.
			File f = new File("src\\linkrods.step");
			System.out.println(f.getAbsolutePath());
			ViewableCAD fcad=new ViewableCAD(new OCCProvider(f.getAbsolutePath()));
			feView.add(fcad);

			// Fit the view to the object
			feView.fitAll();
			
			// Put it all in a Swing frame
			feFrame.getContentPane().add(feView);
			feFrame.setVisible(true);
		}
		catch(Exception ex)
		{
			ex.printStackTrace();
		}
	}
}

Mon problème est que j’aimerais maintenant pouvoir récupérer cette forme en java3d, afin de pouvoir l’envoyer au différent client. La méthode de la classe Viewable (libraire viewer3d) appelé getJ3DNode() pourrait bien répondre à mon besoin. Voici la doc de l’API viewer3d http://jcae.sourceforge.net/viewer3d-doc/

Plusieurs questions ce posent maintenant :

Est-il possible qu’un noeud contienne tout l’objet java3d? si oui comment l’afficher?
Sous quel forme serait-il judicieux d’envoyer l’objet au client? Encapuslé dans un objet par exemple?

Merci d’avance

Bonjour,
il faut rappeler que tu est en serveur java, et pour passer l’objet à un client en applet n’est pas forcément simple, alors tu as plusieurs options:

  • tu peux commencer par générer simplement une image, et reposter au serveur porur chaque déplacement cf:
    today.java.net…
    (tu dessine dans le graphics d’une image que tu renvoie en png.

  • tu peux essayer de créer les objets Java3D dans l’applet par WSDL (il faut générer un WebService WSDL côté serveur, puis l’intégrer côté client) mais ce n’est pas forcément très simple.

  • tu peux tenter de recréer un objet Java3D à partir d’une forme sérializée, que tu obtient soit par le paramètre de l’applet, soit via une socket (ce qui revient à te faire un WSDL)

C’est la 1ère solution la plus simple (pas besoin d’applet) mais évidemment la moins souple (pas de déplacement TR)

edit:
et je pense qu’effectivement le new ViewableCAD.getJ3DNode() est une piste à creuser, il ne faut plus utiliser les package d’OC dans l’applet, mais uniquement ceux de javax; vérifie cependant que ces classes sont bien utilisable en Applet.
Edité le 17/10/2007 à 10:23

Tout d’abord merci pour ta réponse!!!
Je vais analyser chacune des solutions que tu propose afin de déterminer celle qui me conviendra le mieux. En effet, la première paraît être la plus simple, mais comment ensuite permettre à l’utilisateur de manipuler l’objet, c’est à dire détecter quelle mouvement il lui a fait subir si l’objet est sous forme d’image png?

Le cas image est “statique” tu peux au mieux ajouter des boutons de déplacement qui rechargent l’image en repostant au serveur, éventuellement détecter la position d’un “clic” sur l’image en javascript.

Re-bonjour,

Voilà finalement j’ai décidé d’utiliser la librairie viewer3d de JCAE. Elle est très complète et permet de faire pas mal de chose. notamment de récupérer la position de la vue sur l’objet (grace à la méthode where de la classe view) et de fixer la vue (grace à la méthode move). Je précise également que le résultat est bien du JAVA3D. Concernant la partie client/serveur j’ai décidé d’utiliser la technologie RMI qui me paraît assez adapté au problème…:wink:

Je vous tiendrai au courant du résultat.
Edité le 25/10/2007 à 18:31