Home
Reply
Visitor
Markus
Posts: 3

HowTo to port from GL-GI-Husk to HOOPS

Dear community,
 
is there something like a cook book, how-to, tips & tricks that describes the best practice to port an application using ACIS kernel and the abandoned GI/GI-Husks to ACIS and HOOPS?
 
Could anyone, who did it already post his/her experiences?
Maybe showing where the pitfalls and problems are and how to avoid them?
 
Anything covering this issue is greatly appreciated.
 
Greetings from Germany
Markus
Spatial Employee
Bashi
Posts: 22

Re: HowTo to port from GL-GI-Husk to HOOPS

Hello Markus,
 
I have developed an application using GI/GL, Visman and HOOPS with ACIS (of course).
HOOPS/3DGS (3D Graphics System) is the core sub-components of HOOPS/3DAF (3D Application Framework).
HOOPS/3DAF includes other sub-components these are helpful to shorten development time and effort.
HOOPS/MVO is one of such sub-components.
HOOPS/MVO provides many classes those simplify generic functionality rather calling many HOOPS APIs in HOOPS/3DGS.
HBaseDB, HBaseModel and HBaseView are major classes in MVO.
Those classes are similar to that of ACIS MFC as below.
 HDB - CAcisApp
 HBaseModel - CAcisDoc
 HBaseView - CAcisView

There is also event handling class called HBaseOperator that is similar to input_event_handler class in GI/GL husk.
 HBaseOperator - input_event_handler
MVO stands for Model View Operator.
 
HOOPS/MFC is a part of HOOPS/GUI sub-component.
Although it's not mandatory to use HOOPS/MFC, but it contains useful example code such as printing.
If you use HOOPS/MFC, the relation between ACIS MFC and HOOPS/MFC will be as below.
 CHoopsApp - CAcisApp
 CHoopsDoc - CAcisDoc
 CHoopsView - CAcisView

HOOPS/MFC requires MOOPS/MVO, since each class has pointer to corresponding HOOPS/MVO classes.
 CHoopsApp (HDB)
 CHoopsDoc (HBaseModel)
 CHoopsView (HBaseView)
 
Like AcisMfc did, event message from MFC class will be conveyed to lower level classes.
For my case, I made several classes to bridge MFC and HOOPS as below. (Classes that have prefix "AH" are my own class.)
 MyApp[CWinApp] -> AHApp -> AHBaseDB -> HDB
 MyDoc[CDocument] -> AHDoc -> AHBaseModel -> HBaseModel
 MyView[CView] -> AHView -> AHBaseView -> HBaseView
 
I implemented ACIS related functions such as AcisInitInstance() and AcisExitInstance() in AHApp like AcisMfc did.
I implemented several event functions such as OnLButtonDown() in AHView so that application can call it like AcisMfc did.
I implemented several document related wrapper function such as OnEditUndo(), OnUpdateEditRedo(), AddEntity(), RemoveEntity() and so on.
This structure may depend on each application or developer.
 
If you would like, you can use HOOPS/ACIS Bridge that is provided with ACIS.
This component provides HA_Part that wraps PART class, and provides means to automate creating/maintaining visualization object whenever ACIS ENTITY is created/modified/deleted.
HA_Render_Entity source code may be useful to understand how to make HOOPS object from ACIS ENTITY.
There are few pitfall when developing an application using HOOPS and ACIS simultaneously (I think).
First of all, some terminologies are used common between ACIS and HOOPS, but meaning is different.
 
[SHELL]
ACIS - SHELL is one of topology class. It aggregates FACE entity.
HOOPS - SHELL is one of graphical object that is kind of polygonal data representation for surface.
 
[FACE]
ACIS - FACE is one of topology class. It has SURFACE geometry entity and aggregates LOOP entity that represents boundary of surface.
HOOPS - FACE is an element of SHELL.
 
[EDGE]
ACIS - EDGE is one of topology class. It has CURVE geometry entity and aggregates VERTEX.
HOOPS - EDGE is an element of SHELL.
 
[VERTEX]
ACIS - VERTEX is one of topology class. It has APOINT geometry entity.
HOOPS - VERTEX is an element of SHELL.
 
Second, each HBaseView will have individual HBaseOperator (derived class). If your application supports multiple views for one document, you should consider and implement mechanism to share one HBaseOperator for multiple HBaseView.
 
I hope this helps.
 
Bashi