Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Eclipse Projects » GEF » SnapToHelper class and dragging groups of EditParts
SnapToHelper class and dragging groups of EditParts [message #175114] Sat, 02 April 2005 16:59 Go to next message
Eclipse UserFriend
Originally posted by: jgreen.upb.de

Hi,
I have a specific problem with the SnapToHelper class.

I have implemented a custom SnapTo-class which works fine when dragging
EditParts: I've overwritten the method snapRectangle(...) to calculate
the correction when certain points snap.

This works fine, when dragging single EditParts.

Now, when I drag a GROUP of EditParts I can read them as well from the
given GroupRequest, but:
1. The baseRect that I get (see method signature below) depends on the
EditPart in the selection that I actually click on for dragging.
(Example: Imagine having selected two aligned rectangles and dragging
the two, let's say, that the one rectangle is at (10,10) and the other
placed at (110,10). Depending on the rect I *click on* and drag, the
baseRect I get is at (10,10) or (110,10))
2. -> So I do not have any information about to which gragged EditPart
the baseRect corresponds. The GroupRequest doesn't supply this or any
other info.
3. -> So I cannot determine the correct "virtual" positions of my
snap-Points in the group of EditParts that I need for snapping while I'm
dragging them.

See the signature, of the method here:
----------
snapRectangle(Request request, int snapOrientation,
PrecisionRectangle baseRect, PrecisionRectangle result)
----------

I hope that I could explain my problem clearly.
Might one lack sufficient information in the SnapToHelper-concept to do
this? Or am I missing something?

Thanks for any help.

Joel
Re: SnapToHelper class and dragging groups of EditParts [message #175207 is a reply to message #175114] Mon, 04 April 2005 03:19 Go to previous messageGo to next message
Pratik Shah is currently offline Pratik ShahFriend
Messages: 1077
Registered: July 2009
Senior Member
"Joel Greenyer" <jgreen@upb.de> wrote in message
news:d2mj97$lkr$1@news.eclipse.org...
> Hi,
> I have a specific problem with the SnapToHelper class.
>
> I have implemented a custom SnapTo-class which works fine when dragging
> EditParts: I've overwritten the method snapRectangle(...) to calculate
> the correction when certain points snap.
>
> This works fine, when dragging single EditParts.
>
> Now, when I drag a GROUP of EditParts I can read them as well from the
> given GroupRequest, but:
> 1. The baseRect that I get (see method signature below) depends on the
> EditPart in the selection that I actually click on for dragging.
> (Example: Imagine having selected two aligned rectangles and dragging
> the two, let's say, that the one rectangle is at (10,10) and the other
> placed at (110,10). Depending on the rect I *click on* and drag, the
> baseRect I get is at (10,10) or (110,10))

You also get the rectangle that is the union of all selected rectangles.

> 2. -> So I do not have any information about to which gragged EditPart
> the baseRect corresponds. The GroupRequest doesn't supply this or any
> other info.
> 3. -> So I cannot determine the correct "virtual" positions of my
> snap-Points in the group of EditParts that I need for snapping while I'm
> dragging them.

"Virtual" positions? The rectangle you get already should have absolute
coordinates if that's what you mean.

>
> See the signature, of the method here:
> ----------
> snapRectangle(Request request, int snapOrientation,
> PrecisionRectangle baseRect, PrecisionRectangle result)
> ----------
>
> I hope that I could explain my problem clearly.
> Might one lack sufficient information in the SnapToHelper-concept to do
> this? Or am I missing something?
>
> Thanks for any help.
>
> Joel
Re: SnapToHelper class and dragging groups of EditParts [message #175286 is a reply to message #175207] Mon, 04 April 2005 10:06 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: jgreen.upb.de

Pratik Shah wrote:
> "Joel Greenyer" <jgreen@upb.de> wrote in message
> news:d2mj97$lkr$1@news.eclipse.org...
>
>>Hi,
>>I have a specific problem with the SnapToHelper class.
>>
>>I have implemented a custom SnapTo-class which works fine when dragging
>>EditParts: I've overwritten the method snapRectangle(...) to calculate
>>the correction when certain points snap.
>>
>>This works fine, when dragging single EditParts.
>>
>>Now, when I drag a GROUP of EditParts I can read them as well from the
>>given GroupRequest, but:
>>1. The baseRect that I get (see method signature below) depends on the
>>EditPart in the selection that I actually click on for dragging.
>>(Example: Imagine having selected two aligned rectangles and dragging
>>the two, let's say, that the one rectangle is at (10,10) and the other
>>placed at (110,10). Depending on the rect I *click on* and drag, the
>>baseRect I get is at (10,10) or (110,10))
>
>
> You also get the rectangle that is the union of all selected rectangles.
Where? Which one? I just have the one baseRect PrecisionRectangle passed
to the method...
>
>
>>2. -> So I do not have any information about to which gragged EditPart
>>the baseRect corresponds. The GroupRequest doesn't supply this or any
>>other info.
>>3. -> So I cannot determine the correct "virtual" positions of my
>>snap-Points in the group of EditParts that I need for snapping while I'm
>>dragging them.
>
>
> "Virtual" positions? The rectangle you get already should have absolute
> coordinates if that's what you mean.
With "Virtual" positions I mean the positions of the snap points of the
EditParts when they are dragged. (Unlike in the SnapToGeometry, where
you have snapping rows and cols, I have certain snap points specifically
defined on the EditParts)
>
>
>>See the signature, of the method here:
>>----------
>>snapRectangle(Request request, int snapOrientation,
>> PrecisionRectangle baseRect, PrecisionRectangle result)
>>----------
>>
>>I hope that I could explain my problem clearly.
>>Might one lack sufficient information in the SnapToHelper-concept to do
>>this? Or am I missing something?
>>
>>Thanks for any help.
>>
>>Joel
>
>
>
Re: SnapToHelper class and dragging groups of EditParts [message #175327 is a reply to message #175114] Mon, 04 April 2005 14:30 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: none.us.ibm.com

> 3. -> So I cannot determine the correct "virtual" positions of my
> snap-Points in the group of EditParts that I need for snapping while I'm
> dragging them.

What are you trying to snap to? Are the snap locations a function of what
was clicked on?

There is a method which get's called containing two rectangles. You could
perhaps compare the rectangle to the bounds of the editparts in the group
request to identify which one was clicked on. Or, you could customize the
drag tracker to make the clicked-on part become the primary (lastd one I
think) selection prior to the drag beginning.
Re: SnapToHelper class and dragging groups of EditParts [message #175411 is a reply to message #175327] Mon, 04 April 2005 18:12 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: jgreen.zitmail.uni-paderborn.de

This is a multi-part message in MIME format.
--------------020800030508060803060906
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Hi Randy,

Randy Hudson wrote:
>>3. -> So I cannot determine the correct "virtual" positions of my
>>snap-Points in the group of EditParts that I need for snapping while I'm
>>dragging them.
>
>
> What are you trying to snap to? Are the snap locations a function of what
> was clicked on?
>

I retrieve the snap points relatively to their EditPart's location.
To illustrate my problem I've attached this screenshot. You can see,
that the snapping works for the EditPart I've clicked on (I couldn't
screenshot the mouse, I clicked on this splitter-EditPart). (The red
rects and arrows are my snap-feedback.) But, I cannot correctly
determine the potential snap-points of the other EditParts in the group,
because I cannot correctly tell, which EditPart belongs to the
baseRect-parameter passed to the snapRectangle(..)-method (-> which one
was clicked on).

> There is a method which get's called containing two rectangles. You could
> perhaps compare the rectangle to the bounds of the editparts in the group
> request to identify which one was clicked on.

As you can see, there are many EditParts with a fixed, equal size.

> Or, you could customize the
> drag tracker to make the clicked-on part become the primary (lastd one I
> think) selection prior to the drag beginni ng.

Maybe I could overwrite the DragTracker like this...ok. Good idea. I'll see.

But couldn't this whole SnapToHelper-mechanism generally be modified in
a way that one gets passed this information. I did not get into the
internals too much, though.
Idea: Another useful thing would be an abstract SnapToPoint base class.

Thank you very much for your help.

Joel

>
>


--------------020800030508060803060906
Content-Type: image/gif;
name="group-snapping.gif"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="group-snapping.gif"

R0lGODlhHAHuALMAAB8fH8hkZF9fX76+vkBAQFJSUqGhob+/v15eXq2trbKy sgAAAODg4P//
/wAAAAAAACH5BAAAAAAALAAAAAAcAe4AAAT/sMlJq7046827/2AojmRpnmiq fkvrrqH7wqy8
0Hiu7+c9+TwMsDEMVoZFo3LJ7FFs0Kh0SkVWr9jps8ntejnIb9g7/prP3HJ6 S2aj33AdVGyj
y+L4/CqpX/f/gCB8gUaDhIeBhog5iouOcI2PKpGSlX6WcpiaaJSbIp2eoXui MKCkpySmqBmq
q65gryatsbRHtSOzt7W5tLy6r77Av8MdwUoCyMnKy8zNyAHQ0dLT08TWxkEC Ctvc3d7f4NvU
4+PWxNg82uHr7OIB4XzQ5sPoOurt+N/Q8Bfy87r1ctzLR1DBPnDxAvwDGGhg wXwHFQyYODHh
wlsBYTh8iC8ixYr9/xRe7AVoI0d2Hj9aHBkrowqTJ9elpLiSpSuXKWDGBDcT pAV/NlfhPKFz
p7532z4OqBn01NASRY1667k0ZFOheqJK5UaV6dVQT0do3eqOm1KvXzeFFTGW bFeraUWtBdHW
LdJvaONamuuhrl1+P0XqVRvH79aI3vIOfsSXg+HD5CIDXbwXzmOpkiVT1tRY w2VwzkI7i7eZ
M5rP3wSkGCS4NOPTZLepRsHadaXOF1B7m007Q2vbh3Bb0N2NtxPfwBcJp0Cc m/HjyJMTWi6h
uexSG35L10O9gXUFz6FH396H+vfw4seTx2M+NnganbSvP7P8PI7489lzsX// g/zSc3xSh/+A
dxzjHnolBMjBf5SpwYIbgkC4A3+j/OCfdFZkMaAEGipIhIGxIZighBowOJiD HqBYDIk4UFgh
hyCYGJeKsFj4CYsaHcgIjupt5mENBcawoT063jekBzKm1d0Rc7m44whJfrXk E00WuQMvUTY1
5Q9rOfkkCVnatCWHYXn5JZiujUlEmVbyEEyYI6nZwoRtuokCnAvJ+ZSZZ5aA 5zx6EhkiE+j8
eQ0kOPGZSQqGnoOoQHUGUU+jvwRKg6KLqkApRo9eGqmkNGxK0jGitSDaqaEd iOqqzWQWGZoz
grhOC+7Vams4rpLjZ6zZ4EPrrcDeilg3iiGpZK++LhDssu4Ny03/scZexWY+ vzJr7U7ObgNt
B6JiJeg6Ki3w0bXkEvRWYHdK+y24NIlLUbnwonTXWXCd0C1YRxKVT0U2TBRv OwkUIHACBAtc
AMEBD1ywwgkfvPDB0BhswMQIIMDAxQwAoDED0GgMAMYeg7zxxSGTDEAAIn9s ssoZa+wtjC8R
BJIP7v7LDsI456zzzjwTDA3CEwfNMsYco0z00UgnjbHRSiv98oc5FTQzh/7a HE7PWGed888E
Bz3x0Esz3fTYR4tN9sVPY+PX1ERUbfU3Dmst985cJ+C1AWBfDM3ZfC/dN9qo 0EgXR2zX/Dbc
cye+dQBAe5130X/3bXbTAAiVbwiP8SuD/9uHcxO34onXfffje0d+9uRKV35T 1CeFO27n3YAu
u+iOJ1266WSjjrTqT5Pwmevvws6N7KDTLrTtuuNett5jC2OCddUKHzvxoTO+ M+nJK090NM2v
DpV70Uu/zefUY113zthrPzY1TTsvVq3hi09++Tyfj3P66iM/TeruY25r/NKb H/10lqtx5E9p
7Esa7wL3vv8pS3zTG6D5Cri/AyKQewrsX1/IwgxTseqDIHQGAUZIwhKa8IQo TKEKSWfB3N3u
aBp0DActMCc9tFB7j+PYDdfnNO9tcCvoqWEecrhDyiGwiPqjIDRCGEI7/VAq CBIiHoiIxN01
LXsWVKI0rOXEDv8QR0RSjAMVq0g0KmIxfy8EmUmyVasuytAoIlpTH8jYtzGe UXtpJNka7xIs
N24ANXGUow3peDY70jGPF9sjF6/0gc8EUpB5IGQhT0dGRDJAKVzhI7D86JmY PBKSU5Tk2MbI
PCRaEpNlYRYnM3CZT4YRDqSkYyx1WEREAgCVBtHkrVaJgYEoBZfXAYOaKjDL Ks7yjpGzJS7Z
6B5e5qYbv3ydc4oxTAqIcpR/Q6bkUHdLaTIzNnK4XAV8uZR+DWA3G/gRoQZ0 zd15bGSUvOEp
valLW2UKap00S1V+wLn3aEBwoLJRO482tGJq04VKW2Y923imDg3JoUFaE0Qn GgUqLaD/Ze/M
qEY3ytGOFjSb8tSdQhfZHy5N1KIQRSlFV5ohjHr0pTDVaBmT2UJl0pOk8OHR BMiJhH4GEqBu
9EExb/hRmh7QpsHLJU5LIU7mQLOcmztncdLZVEmxc6ApK5lR1WdLRaqSkU+U SDR9Ss05YpWg
eDyq7ry6LGcO56ljRacwzXpWkHEVjWvlyUKbCVYverKsehhqEQW7PDxq8Ztk ces4/zrXwNbV
rmg07GGXmtOwFsSV1ZwAYYl6VCQCgImgbYZinXoSzNL1sZstLFFjyMqdPPKV b3gsZDu7Q9b2
Eo5UPW1dU4u0g5LNts+EIxgzKwHeHtC426utD98IRSEQtwHI/1VfdP1mwQU6 pZGDouFzp6s8
7pYyf9YlhSmsEx7YokG2JDPlcYF7Ww4uw4Ohje+pVEjf+tqXhN79rvrY214H QjCCEpRdfvWr
PP72F3wP/K8CBBhgrQ2YwKYz8IHJAkDhMbjBWHswhOso4QlLpcKwuzCGeaZh WuIuvHJ5nlSA
18/OjVhroyOkb0nW4dbuhMVSld6LsxZjGRc4cFX9442h6oKJMMxgCEPyw5J8 5CbHTckN2zHW
vpZRH0eYgTbyXUx8QrUBiFjKPPvyiL8200PiLm1EMQyX2zYAMIOOYW5uXFHN /DcUEybLKpba
Prsc58TBuc9kni2d+WZn0+A5z/vaM/+b+zw3MY8Zb2WWJDILjQl1fi/RUDAy ozetOCq/85ra
rPHg8IFjR3Oa0z1uJzJFPWp2lPrUWDN1gFOt6g1jjNWtThaAYZ2zP5+6xFe0 ZMZwnWt2RI/X
YZb1i4Hd2wrujtjFhkeCFYDsnSl72QM1YAaXuy5pd+Pa1Y4zs8vmbKRB23/G nja4ww3mcTdb
2OfGXKkWoIwD3Pfe+EahvfPNb/q6W3897B0drIneMv5bgQXnZrz3MISCGxy9 B3+3FuWLqtEq
QYoOF/Ru0XtYxG7F4oUYQsQznjqO5/UolMXOG6Q4cpJbUbaWZGsf+0ofkbu8 5RrHasz1mvIX
1ZzgGYfnxmH/zs2RfvWeZsA4yYV+Vpzrreg3PXqfBj6Bmxfc6ZDbndHbSvOk 29zlEDd5QqPO
daRTvbhgDzvRx55Uj0slnBEF0gyEVKCWyzRju61yXefZ9r2Cs6G40Ckr2IDa mTL9mnPWOdT7
3vPeHDpFghcC4Yee3sOLMvHZXrzb3G6Ue65UpR2yaExHT/qCfqz0qPdopBWv wK3PvKQwi0Hk
LzAGu6++6bdXtUjJ/nr4BNm5cU/RgOyud9QWn/VJk/km54F1tKZd90pT/i7n cfPmi3130rcn
9ZdufaJPVurEsPrzdf/9sluj++N3OcXj+w/0pz/j+QmB+90P9viDoPrvly2l 7V8B//znf7f8
5wHi939NF4AdQH8EWFcGyAEImIBYtYAbMH8O+IAQmAH+N4GXV4EWyH0YiHga iAED2IGEtH8L
2IAiSEgfeAEmeIJklIIWwDJaFYPwJIMwOIM2eHo3mDI6uDI7iFE9SIM/mIM8 OIQ+yIMuSEw1
mIRBqIRECIRA2IRCWIRS+IRTGIVUeIUuc4SaxYJcWGdaWHVL14VkRIIGeIFi qFxfaIZn2EJf
iHZhuIZoqIUrCIfg1YbQRYd4OGxtGIJ5iEN2qIZ9eGZ7yIGBuF9tKIGFqD12 OIeJyGGH2Ihd
SIYByIeQSGh/SIiV+DfrF1r/AIiZODbfwRHtR4mf2DSh+P8Qo1iKGPhZb5OK quiArGg1nfiG
rzhKwHQtsxh0jChbt9h4teCJtUg0vQh+w4CIwch2LUaMv7CLx5gxw2h+xMCM x9hNSUUuuehw
0th0z9h74YeJzXg027h85gCMzRiO02cOxviNwihN1sh86vh+sWgzrviOaReP /3KNV0ePZXSK
BYGPEJeNWMWPBOGP+geQAyWQ+TCP+aiPibSJTKSQDImNixiRYCeJ/EeK32iR 9keOx3iJukiR
E0mL+hiSFBl0JFmSV+eR2EiRGhl/HBmMKnl1BtlOJ7mQDFmTKIlaJImFTFiF PcmTSxiUUPiT
VliURFmDdpiUSrmUTNmUTvmUUBkYlVI5lVRZlVZ5lViZlVq5lVzZlV6ZHxEA ADs=
--------------020800030508060803060906--
Re: SnapToHelper class and dragging groups of EditParts [message #175425 is a reply to message #175411] Mon, 04 April 2005 18:57 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: none.us.ibm.com

It looks like you want to override which source rectangles get used. The
snap helper is designed to handle any number of rectangles in decreasing
priority. So, you just need to provide those two highlighted rectangles in
your picture.

Do this by customizing the DragEditPartsTracker. Open a bugzilla if you
find that it is more difficult than it should be.
Re: SnapToHelper class and dragging groups of EditParts (Problem solved) [message #175991 is a reply to message #175114] Thu, 07 April 2005 10:09 Go to previous message
Eclipse UserFriend
Originally posted by: jgreen.upb.de

Hi,
I just want to add that I solved my problem by not only overwriting
----------
snapRectangle(Request request, int snapOrientation,
PrecisionRectangle baseRect, PrecisionRectangle result)
----------

but also

----------
public int snapRectangle(Request request, int snapOrientation,
PrecisionRectangle[] baseRects, PrecisionRectangle result) {
----------
which supplies me also with a "union" baseRect. This rectangle is a
union of the figure's bounds of the group of EdtiParts beeing dragged.

The first method is abstract in SnapToHelper, so I didn't bother with
overwriting other methods at first.

Thanks for the help and hints anyway!

Joel


Joel Greenyer wrote:
> Hi,
> I have a specific problem with the SnapToHelper class.
>
> I have implemented a custom SnapTo-class which works fine when dragging
> EditParts: I've overwritten the method snapRectangle(...) to calculate
> the correction when certain points snap.
>
> This works fine, when dragging single EditParts.
>
> Now, when I drag a GROUP of EditParts I can read them as well from the
> given GroupRequest, but:
> 1. The baseRect that I get (see method signature below) depends on the
> EditPart in the selection that I actually click on for dragging.
> (Example: Imagine having selected two aligned rectangles and dragging
> the two, let's say, that the one rectangle is at (10,10) and the other
> placed at (110,10). Depending on the rect I *click on* and drag, the
> baseRect I get is at (10,10) or (110,10))
> 2. -> So I do not have any information about to which gragged EditPart
> the baseRect corresponds. The GroupRequest doesn't supply this or any
> other info.
> 3. -> So I cannot determine the correct "virtual" positions of my
> snap-Points in the group of EditParts that I need for snapping while I'm
> dragging them.
>
> See the signature, of the method here:
> ----------
> snapRectangle(Request request, int snapOrientation,
> PrecisionRectangle baseRect, PrecisionRectangle result)
> ----------
>
> I hope that I could explain my problem clearly.
> Might one lack sufficient information in the SnapToHelper-concept to do
> this? Or am I missing something?
>
> Thanks for any help.
>
> Joel
Previous Topic:Moving bendpoints -- help!
Next Topic:What's the exact meaning of Primary Selection and Normal Selection?
Goto Forum:
  


Current Time: Tue Apr 16 08:37:31 GMT 2024

Powered by FUDForum. Page generated in 0.05932 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top