Skip to main content
Inspiring
August 17, 2013
Answered

how to get exact positon of the text?

  • August 17, 2013
  • 1 reply
  • 1410 views

Hi try below code, i am not getting exact position of the text.

InterfacePtr< ITextModel > textModel( Utils< IXMLUtils >()->QueryTextModel( inXMLElement ) );

                    InterfacePtr< IFrameList > frameList( textModel->QueryFrameList() );

                    TextIndex start_pos, end_pos;

                    Utils< IXMLUtils >()->GetElementIndices(inXMLElement,&start_pos,&end_pos);

                    int32 fidx;

                    InterfacePtr<ITextFrameColumn> textFrameColumn(frameList->QueryFrameContaining(start_pos, &fidx));

                    UIDRef focusedText = ::GetUIDRef(textFrameColumn);

                    unsigned int current_page = GetPageNumberFromUIDRef(focusedText);

                    UID pageUID;

                    UIDRef spreadUIDRef = GetPageSpreadUIDRef(current_page,pageUID);

                    PMRect PageCoords = GetPagePasteBoardPos(UIDRef(db,pageUID));

  InterfacePtr<IWaxStrand> waxStrandFrame(((IWaxStrand*)textModel->QueryStrand(kFrameListBoss, IID_IWAXSTRAND)));

                    if (waxStrandFrame == nil)break;

                    K2::scoped_ptr<IWaxIterator> waxIterator(waxStrandFrame->NewWaxIterator());

                    PMReal yposition = 0;

                    if (waxIterator == nil)break;

                    IWaxLine* waxLine = waxIterator->GetFirstWaxLine(start_pos);

                    yposition = waxLine->GetYPosition();

Can you any one suggest solution for above problem.

This topic has been closed for replies.
Correct answer T. Schneider

I changed, above code by your reply but still i not get exact postion

InterfacePtr< ITextModel > textModel( Utils< IXMLUtils >()->QueryTextModel( inXMLElement ) );

                    InterfacePtr< IFrameList > frameList( textModel->QueryFrameList() );

                    TextIndex start_pos, end_pos;

                    Utils< IXMLUtils >()->GetElementIndices(inXMLElement,&start_pos,&end_pos);

 

                    int32 fidx;

                    InterfacePtr<ITextFrameColumn> textFrameColumn(frameList->QueryFrameContaining(start_pos, &fidx));

                    UIDRef focusedText = ::GetUIDRef(textFrameColumn);

 

                    unsigned int current_page = GetPageNumberFromUIDRef(focusedText);

 

                    UID pageUID;

                    UIDRef spreadUIDRef = GetPageSpreadUIDRef(current_page,pageUID);

 

                    PMRect PageCoords = GetPagePasteBoardPos(UIDRef(db,pageUID));

 

  InterfacePtr<IWaxStrand> waxStrandFrame(((IWaxStrand*)textModel->QueryStrand(kFrameListBoss, IID_IWAXSTRAND)));

 

                    const int32 kNoDamage = -1;

                    if (frameList->GetFirstDamagedFrameIndex() != kNoDamage)

                    {

  // Recompose.

  InterfacePtr<IFrameListComposer> frameListComposer(frameList, UseDefaultIID());

                              ASSERT(frameListComposer);

                              if (!frameListComposer) {

                                        break;

                              }

                              frameListComposer->RecomposeThruLastFrame();

                    }

 

 

                    if (waxStrandFrame == nil)break;

                    K2::scoped_ptr<IWaxIterator> waxIterator(waxStrandFrame->NewWaxIterator());

 

                    PMReal yposition = 0;

                    if (waxIterator == nil)break;

                    IWaxLine* waxLine = waxIterator->GetFirstWaxLine(start_pos);

                    yposition = waxLine->GetYPosition();

 

  InterfacePtr<IWaxLineShape> waxlineshape(waxLine,UseDefaultIID());

                    PMRect textcoord;

                    waxlineshape->GetInkBounds(&textcoord);

 

                    position = PMPoint(PageCoords.LeftTop().X(),PageCoords.LeftTop().Y()+yposition);


In stead of GetYPosition, try waxLine->GetToPasteboardMatrix().Transform(&positionPB); Then you can convert it to page coordinates


1 reply

Bartek_Kropaczewski
Inspiring
August 17, 2013

Good question and it's already answared on this forum.

Regards

Bartek

ArunRathAuthor
Inspiring
August 17, 2013

can you give link forum?

Bartek_Kropaczewski
Inspiring
August 17, 2013

I know it might be a little confusing but if you'll type some keywords in the "Ask a Question" field, it works same as search.

Here i found an answare for your question. But beware. It's expensive.

http://forums.adobe.com/message/2653902

Regards

Bartek