Using the quadrilateral points is annoying, as you have to convert them
between rects/strings, shift them, reorder them, shift them back, and
convert back to strings. Moreover, if you have a line like

selection1 selection2

then combining them should get you a single rectangle, which using
quadrilateral points cannot give you.

Anyway, using the selection *should* work, if it does not work in some cases
the problem should be somewhere else.

Christiaan

On 8/16/07, Christiaan Hofman <[EMAIL PROTECTED]> wrote:
>
> I don't see your problem. What is the problem with PDFSelection? It
> works for me, even when the highlighted text consists of completely
> random parts.
>
> Christiaan
>
> On 16 Aug 2007, at 7:58 PM, Maxwell, Adam R wrote:
>
> > I thought there was a way to do it, but I only looked for it on the
> > menus.
> > Anyway, the shift-click approach doesn't work for me, because of
> > limitations
> > in PDFSelection.  Try it with multiple highlights that only cover a
> > single
> > column of a two-column page like this:
> >
> > column1 text is here and   column2 text is here and
> > this is highlighted and    this isn't highlighted and
> > this is highlighted and    this isn't highlighted and
> > this isn't highlighted     this isn't highlighted
> >
> > where you want to merge the highlights in column 1.  I didn't try your
> > script, but you rightly pointed out my error in the bounds, and
> > this code
> > works as expected.  I expect the selectAnnotationWithEvent: could be
> > modified to also create based on quad points, which should solve that
> > problem as well.
> >
> > static NSArray *adjustedQuadpointsToBoundsAsStrings(NSRect
> > newBounds, NSRect
> > oldBounds, NSArray *quadPoints)
> > {
> >     float dx = NSMinX(oldBounds) - NSMinX(newBounds);
> >     float dy = NSMinY(oldBounds) - NSMinY(newBounds);
> >     unsigned i, iMax = [quadPoints count];
> >     NSMutableArray *newPoints = [NSMutableArray
> > arrayWithCapacity:iMax];
> >     for (i = 0; i < iMax; i++) {
> >         NSPoint p = [[quadPoints objectAtIndex:i] pointValue];
> >         p.x += dx;
> >         p.y += dy;
> >         [newPoints addObject:NSStringFromPoint(p)];
> >     }
> >     return newPoints;
> > }
> >
> > static NSArray *annotationsToMergeInSelection(NSArray *annotations,
> > const
> > NSRect selectionRect, int *markupType, NSRect *newBounds)
> > {
> >     NSCParameterAssert(NULL != newBounds);
> >     NSCParameterAssert(NULL != markupType);
> >     NSMutableArray *toMerge = [NSMutableArray array];
> >     SKPDFAnnotationMarkup *ann = nil;
> >     *markupType = -1;
> >     unsigned i, iMax = [annotations count];
> >     for (i = 0; i < iMax; i++) {
> >         ann = [annotations objectAtIndex:i];
> >         if (NSIntersectsRect([ann bounds], selectionRect) && [ann
> > isMarkupAnnotation]) {
> >             if (-1 == *markupType) {
> >                 *newBounds = [ann bounds];
> >                 *markupType = [ann markupType];
> >             }
> >             else if ([ann markupType] == *markupType) {
> >                 *newBounds = NSUnionRect(*newBounds, [ann bounds]);
> >             }
> >             [toMerge addObject:ann];
> >         }
> >     }
> >     return toMerge;
> > }
> >
> > - (void)mergeAnnotationsInSelection:(id)sender {
> >     NSRect bounds;
> >     int markupType;
> >
> >     NSArray *annotationsToMerge = annotationsToMergeInSelection([[self
> > currentPage] annotations], selectionRect, &markupType, &bounds);
> >     unsigned i, iMax = [annotationsToMerge count];
> >     if (0 == iMax)
> >         return NSBeep();
> >
> >     SKPDFAnnotationMarkup *ann = nil;
> >     NSMutableArray *quadPoints = [NSMutableArray array];
> >     NSMutableString *newContents = [NSMutableString string];
> >
> >     for (i = 0; i < iMax; i++) {
> >         ann = [annotationsToMerge objectAtIndex:i];
> >         if ([ann contents])
> >             [newContents appendString:[ann contents]];
> >         [quadPoints
> > addObjectsFromArray:adjustedQuadpointsToBoundsAsStrings(bounds, [ann
> > bounds], [ann quadrilateralPoints])];
> >         [self removeAnnotation:ann];
> >     }
> >
> >     ann = [[SKPDFAnnotationMarkup alloc] initWithBounds:bounds
> > markupType:markupType quadrilateralPointsAsStrings:quadPoints];
> >     [ann setContents:newContents];
> >     [self addAnnotation:ann toPage:[self currentPage]];
> >     [ann release];
> >     [self setNeedsDisplayInRect:selectionRect ofPage:[self
> > currentPage]];
> > }
> >
> >
> >
> > On 08/16/07 10:07, "Christiaan Hofman" <[EMAIL PROTECTED]> wrote:
> >
> >> Know that you can merge annotations using shift-click. So to see how
> >> it can be done, look at the code in selectAnnotationWithEvent:. It
> >> merges the selections of the annotations and creates a new annotation
> >> from the merged selection. Also note that quadrilateral points are
> >> relative to the annotation bounds, so if you use them in another
> >> annotation you need to shift them. But using the selection is easier.
> >> I also have an applescript (available on the wiki) that can merge all
> >> highlights, which also works by merging the selections.
> >>
> >> Christiaan
> >>
> >> On 16 Aug 2007, at 6:46 PM, Adam R. Maxwell wrote:
> >>
> >>> I've been highlighting a multi-column paper, and I agree with other
> >>> users that it's annoying to either have the highlight bounds extend
> >>> outside what I actually want to highlight, or have multiple short
> >>> highlights for each line (which shows up as multiple lines in the
> >>> outline view).
> >>>
> >>> For my own use, I thought I could merge markups together by
> >>> creating a new annotation in SKPDFView.m, but if I merge three
> >>> separate highlights (top, middle, bottom), I lose the middle line.
> >>> Am I missing something obvious?  The only thing I can think of is
> >>> some restriction on ordering of quad points.
> >>>
> >>> - (void)mergeAnnotationsInSelection:(id)sender {
> >>>     NSArray *annotations = [[self currentPage] annotations];
> >>>     NSMutableArray *quadPoints = [NSMutableArray array];
> >>>     NSRect bounds = NSZeroRect;
> >>>     unsigned i, iMax = [annotations count];
> >>>     int markupType = -1;
> >>>     SKPDFAnnotationMarkup *ann = nil;
> >>>
> >>>     // don't remove while enumerating the current annotations
> >>>     NSMutableArray *annotationsToRemove = [NSMutableArray array];
> >>>
> >>>     for (i = 0; i < iMax; i++) {
> >>>         ann = [annotations objectAtIndex:i];
> >>>         if (NSIntersectsRect([ann bounds], selectionRect) && [ann
> >>> isMarkupAnnotation]) {
> >>>             if (-1 == markupType) {
> >>>                 bounds = [ann bounds];
> >>>                 markupType = [ann markupType];
> >>>             }
> >>>             else if ([ann markupType] == markupType) {
> >>>                 bounds = NSUnionRect(bounds, [ann bounds]);
> >>>                 [quadPoints addObjectsFromArray:[ann
> >>> quadrilateralPoints]];
> >>>                 [annotationsToRemove addObject:ann];
> >>>             }
> >>>         }
> >>>     }
> >>>
> >>>     iMax = [annotationsToRemove count];
> >>>     for (i = 0; i < iMax; i++)
> >>>         [self removeAnnotation:[annotationsToRemove
> >>> objectAtIndex:i]];
> >>>
> >>>     NSMutableArray *quadStrings = [NSMutableArray arrayWithCapacity:
> >>> [quadPoints count]];
> >>>     iMax = [quadPoints count];
> >>>     for (i = 0; i < iMax; i++)
> >>>         [quadStrings addObject:NSStringFromPoint([[quadPoints
> >>> objectAtIndex:i] pointValue])];
> >>>     ann = [[SKPDFAnnotationMarkup alloc] initWithBounds:bounds
> >>> markupType:markupType quadrilateralPointsAsStrings:quadStrings];
> >>>     [self addAnnotation:ann toPage:[self currentPage]];
> >>>     [ann release];
> >>>     [self setNeedsDisplayInRect:selectionRect ofPage:[self
> >>> currentPage]];
> >>> }
> >>
> >>
> >>
> >> ---------------------------------------------------------------------
> >> ----
> >> This SF.net email is sponsored by: Splunk Inc.
> >> Still grepping through log files to find problems?  Stop.
> >> Now Search log events and configuration files using AJAX and a
> >> browser.
> >> Download your FREE copy of Splunk now >>  http://get.splunk.com/
> >> _______________________________________________
> >> skim-app-develop mailing list
> >> [email protected]
> >> https://lists.sourceforge.net/lists/listinfo/skim-app-develop
> >
> > ----------------------------------------------------------------------
> > ---
> > This SF.net email is sponsored by: Splunk Inc.
> > Still grepping through log files to find problems?  Stop.
> > Now Search log events and configuration files using AJAX and a
> > browser.
> > Download your FREE copy of Splunk now >>  http://get.splunk.com/
> > _______________________________________________
> > skim-app-develop mailing list
> > [email protected]
> > https://lists.sourceforge.net/lists/listinfo/skim-app-develop
>
>
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
skim-app-develop mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-develop

Reply via email to