jrodsmitty Posted December 30, 2012 Posted December 30, 2012 So I haven't had any luck finding an answer to this via Google or the forums here yet, so hopefully someone can help. Is there a way to specify what (other than the selected item) the selection rectangle uses to set its size, if a TransformManager is applied to a Sprite with multiple children? Scenario: I have a Sprite with 2 children: a Bitmap, and a Shape. The Shape has a blendmode of ERASE, so the user can "erase" the image below it, but if the user 'paints' outside the visible area of the image, it increases the selection box size. I only want the selection box to be sized to the image, not the size of the image + erase layer. Does that make sense? Thanks in advance! -Jarrod
GreenSock Posted December 30, 2012 Posted December 30, 2012 Hmmm...I wonder if the TransformItem's manualBoundsOffset property would give you what you're looking for. http://greensock.com/as/docs/transform/com/greensock/transform/TransformItem.html#manualBoundsOffset 1
jrodsmitty Posted January 2, 2013 Author Posted January 2, 2013 Jack, Yes, that indeed did the trick! In my solution, I compare the Erase layer rect() to the Bitmap rect() and calculate/adjust the offsets accordingly. I then do this calculation on the item's TransformEvent.SELECT event, and reset the manualBoundsOffset at that point. private function adjustSelectionBox(e:TransformEvent):void { // get erase layer bounds var eraseRect:Rectangle = _eraseLayer.getRect(_transformItem); // if erase layer "exists" if (eraseRect.width != 0 && eraseRect.height != 0) { // get image to use for sizing the selection box var imageRect:Rectangle = _bitmap.getRect(_transformItem); // if the erase layer goes "outside" the bitmap bounds, update deltas if (eraseRect.x < imageRect.x) { _deltaX = Math.abs(imageRect.x + eraseRect.x); } if (eraseRect.y < imageRect.y) { _deltaY = Math.abs(imageRect.y + eraseRect.y); } if ((eraseRect.x + eraseRect.width) > (imageRect.x + imageRect.width)) { _deltaW = (eraseRect.x + eraseRect.width) - (imageRect.x + imageRect.width); } if ((eraseRect.y + eraseRect.height) > (imageRect.y + imageRect.height)) { _deltaH = (eraseRect.y + eraseRect.height) - (imageRect.y + imageRect.height); } } // set new selection box TransformItem(_transformMngr.getItem(_transformItem)).manualBoundsOffset = new Rectangle(0, 0, -(_deltaW + _deltaX), -(_deltaH + _deltaY)); _transformMngr.updateSelection(); } Thanks again! -Jarrod
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now