
Thu, 04/19/2018 - 01:26
I am building a Viewer on top of a MFC application. I have OpenCascade installed and running in a MFC view. I am running into problems send geometry data to the view via a MFC document. If I create geometry from with the document everything is fine. But if I call for the creation of the same geometry from a different file I get a Standard_Transient* ControlAccess() error the return type is entity. attached is the code for the circle creation:
void CVMS7Doc::DrawTestCircle()
{
Standard_Real x;
Standard_Real y;
Standard_Real z;
Standard_Real rad;
rad = 100;
gp_Dir dir(0,0,1); // you can change this
gp_Pnt point(100,200,300);
gp_Circ circle(gp_Ax2( point, dir),rad);
BRepBuilderAPI_MakeEdge makeEdge(circle);
Handle(AIS_Shape) shape = new AIS_Shape(TopoDS_Edge());
shape ->Set(makeEdge.Edge());
myAISContext->Display(shape , 1);
}If I call this from within the DOC it works fine but not from a second file:
/////////////////////////////////////////
void draw_circle_view( _FEATURE *feature, double red, double green, double blue )
/////////////////////////////////////////
{
double x = feature->element[ _X_LOC ];
double y = feature->element[ _Y_LOC ];
double z = feature->element[ _Z_LOC ];
double radius = feature->element[ _RADIUS ];
if( !feature->part_coordinates ) {
machine_to_part_coordinates(&x, &y, &z);
}
pRender->DrawOglCircle(x, y, 0.0, radius, feature, red, green, blue);
pOpenDoc->DrawTestCircle();
} let me know if you see anything That I have done wrong
Thu, 04/19/2018 - 07:38
Hello Derrek,
What I see is that you create AIS_Shape object with a NULL edge which is not very logical. I'd rewrite your code like this:
BRepBuilderAPI_MakeEdge makeEdge(circle);
TopoDS_Shape edge = makeEdge.Edge();
Handle(AIS_Shape) shape = new AIS_Shape(edge);
myAISContext->Display(shape , 1);
If that won't help, we might propose you deeper analysis in the frames of a support program, for example.
Please, contact us to know more about our support offer.
Best regards,
Forum supervisor
Fri, 04/27/2018 - 18:24
Hello, Im getting no ware with this. No matter what I try I get the same error message:
//! Returns non-const pointer to referred object
Standard_Transient* ControlAccess() const
{
return entity;
}
Does the entity need to be initalized on order to be used? Any suggestions would be great.
Derrek
Sat, 04/28/2018 - 13:27
Hello Derrek,
Actually, at what line of your code the exception is thrown?
May it be that the variable pOpenDoc is not properly initialized?
Best regards,
Forum supervisor
Sat, 04/28/2018 - 21:27
Hello,
myAISContext->Display(shape , 1); right after this line I get the error. pOpenDoc appears to initialized properly. Im a lttle confused on why I am calling for drawing in the DOC component and not the View side. I also have many views. It would not surprized if I have a " plumbing problem". If I call the draw command from the constructor of the DOC everything works. I am migrating from a working OpenGL renderer.
Thanks
-Derrek
Wed, 05/02/2018 - 22:59
Hello Derek,
it is difficult following you code and give some advices, since too many items become unclean.
I suppose you do understand, that mixing two OpenGL viewers requires extra attention, and may result have a lot of side effects if not done correctly (although, unlikely in the way you are currently experienced)?
There are two ways for embedding custom OpenGL code - through implementing custom OpenGl_Element, or through overriding redraw routines - otherwise result might be undefined, especially if custom OpenGL code has own context initialization routines / camera / projection matrices / OpenGL state management.
Anyway, I would start from simplifying the code and excluding as much functionality as possible - ideally by providing reproducible code samples or at least providing complete call stack.
Wed, 05/02/2018 - 22:51
Hello, The error appears to be coming from TS_Shape location. I cant seem to figure out why this is happening. Is there away to set it a 0,0,0? Derrek
Wed, 05/02/2018 - 23:02
Setting a zero location is straightforward - just calling TopoDS_Shape::Location (TopLoc_Location()).
How do you do this now?
Thu, 05/03/2018 - 23:53
The problem appears to be in the way Im using The CDocument Class. When the program starts up the DOC constuctor is creating myAISContent. However when I try to add geometry to to the Document my AISContext is no longer intialized. I have looked at all the available samples and not found a solution.