LEADTOOLS Support
Document
Document SDK Questions
Insert an LAnnotation obj in LAnnContainer C++
This topic and its replies were posted before the current version of LEADTOOLS was released and may no longer be applicable.
#1
Posted
:
Tuesday, August 29, 2006 6:21:37 AM(UTC)
Groups: Registered
Posts: 8
[ Lead version 14.5 ]
[ c++ using ltWrappr]
Hi, I have a question using the LAnnContainer
When I want to insert a Lannotation into a LAnnContainer,
The Lannotation object inside the LAnnContainer will be destroyed when the destructor from my Lannotation obj is called.
- A solution could be, to construct them in the heap and keep a pointer for each Lannotation object during the life cycle of a LAnnContainer. (Else the debugger detects memory leaks)
Disadvantage:
The administration of all Lannotation objects gets complicated when working with more containers in a project, coping inserting deleting etc.
- Another solution could be, inserting the obj in a TempLAnnContainer and save this container to memory: TempLAnnContainer.SaveMemory(…)
And loading in a second TempLAnnContainer2:
TempLAnnContainer2.LoadMemory(…)
Inserting the TempLAnnContainer2 in the LAnnContainer will do the job, without administration of Lannotation objects.
Disadvantage:
The SaveMemory() function sometimes gives “an Access violation” for the moment it is hard to make a condition where it will appear reproducible.
I don’t like both constructions at all, in my opinion there should be a more simple way. But I couldn’t find a solution jet.
So my question is, is there one or should I make a feature request.
Slager
#2
Posted
:
Thursday, August 31, 2006 1:01:10 AM(UTC)
Groups: Registered, Tech Support
Posts: 1,326
Was thanked: 1 time(s) in 1 post(s)
Hello,
Instead of using a separate LAnnotation class for each annotation object, use only one LAnnotation class to handle different annotation objects and insert them into the container. Keep this class alive for the duration of your program, and since it's only one class, maintaining it should be easy.
You can change the annotation objects in this LAnnotation class using LAnnotation::SetHandle or LAnnotation::Copy (to copy from a temporary LAnnotation).
Please let me know if this helps.
Thanks,
Maen Badwan
LEADTOOLS Technical Support
#3
Posted
:
Thursday, August 31, 2006 5:23:17 AM(UTC)
Groups: Registered
Posts: 8
Maen,
Thanks for your response,
I tried your suggestion, in my case I kept one LAnnotation member in my class, but every time I call the LAnnotation::Copy( ) function, it removes the previous Annotation, from the container.
I attached a small project to show you:
Draw lines in the red window, they will be copied to the green window.
Regards,
Slager
#4
Posted
:
Sunday, September 3, 2006 3:31:09 AM(UTC)
Groups: Registered, Tech Support
Posts: 1,326
Was thanked: 1 time(s) in 1 post(s)
Hello,
I checked your code and resolved the problem. You need to remove the connection between the Annotation object and the wrapping class by setting the m_Annotation.SetHandle to 0 before calling the m_Annotation.Copy.
The code as follows:
+------------------+
//-------------------------------------------------------------
void CAnnotationDerivedWindow::InsertObject( LAnnotation& LAnnObject )
//-------------------------------------------------------------
{
m_bHandleAnnEvent = false;
m_Annotation.SetHandle(0);
m_Annotation.Copy( LAnnObject );
LAnnotationWindow::GetContainerObject( ).Insert( m_Annotation );
m_bHandleAnnEvent = true;
}
+------------------+
Thanks,
Maen Badwan
LEADTOOLS Technical Support
#5
Posted
:
Sunday, September 3, 2006 9:43:40 PM(UTC)
Groups: Registered
Posts: 8
Thanks,
This works, and makes my design a lot easier!!.
Slager
LEADTOOLS Support
Document
Document SDK Questions
Insert an LAnnotation obj in LAnnContainer C++
You cannot post new topics in this forum.
You cannot reply to topics in this forum.
You cannot delete your posts in this forum.
You cannot edit your posts in this forum.
You cannot create polls in this forum.
You cannot vote in polls in this forum.