found two more places where break; misses... And it seems that only "xz" mode works well.
On Fri, Jul 23, 2010 at 5:48 PM, Fabrice3D <[email protected]> wrote: > thx Michael, > fixed and in trunk > > because someone was writting it probably at 3 am ;)(Fabrice?) > > probably true :) > > Fabrice > > > > On Jul 23, 2010, at 3:51 PM, Michael Iv wrote: > > There is a bug in Drag3D class, Actually it is just syntax miss, If you set > the plane to "zy" it would throw you " Unvalid plane description error ...", > because someone was writting it probably at 3 am ;)(Fabrice?) und did not > put after the last caase break ; terminator .So please , if someone can > update it on the trunk. > Nice weekend to everybody... > > > On Wed, Jun 2, 2010 at 11:24 AM, Fabrice3D <[email protected]> wrote: > >> interresting... >> so I guess, fix would be to project from camera pos instead of mouse using >> same ray dir... >> thx for pointing that out, will try implement a fix to it asap. >> >> in meanwhile keep away from cam :)) >> >> Fabrice >> >> >> On Jun 2, 2010, at 12:37 AM, abowman wrote: >> >> > Thanks for the test class. >> > >> > I was able to reproduce my problem in your code by placing the camera >> > closer to the sphere and making the sphere smaller. Is there a bug in >> > the Drag3D class or am I just not using the camera correctly? >> > >> > http://abowman.nozonenet.com/away3d/Drag3DTest.as >> > http://abowman.nozonenet.com/away3d/Drag3DTest.swf >> > >> > Thanks for your help. >> > >> > BTW, I purchased the new Away3D book and I'm finding it very helpful. >> > I was able to get my code working using that, but would really like to >> > be able to use this Drag3D class rather than using a plane primitive. >> > >> > >> > On Jun 1, 5:25 am, Fabrice3D <[email protected]> wrote: >> >> I haven't debugged your code, (that would be your job :)) ) >> >> but made quick test class using latest 3.5 to test class itself, all >> seams fine to me. >> >> >> >> I would check if the mouse coordinates are correct in your case. >> >> >> >> Fabrice >> >> >> >> package{ >> >> import flash.display.*; >> >> import flash.events.*; >> >> import away3d.containers.Scene3D; >> >> import away3d.containers.View3D; >> >> import away3d.core.base.Object3D; >> >> import away3d.core.render.*; >> >> import away3d.cameras.HoverCamera3D; >> >> import away3d.events.MouseEvent3D; >> >> import away3d.primitives.Sphere; >> >> >> >> import away3d.tools.Drag3D; >> >> >> >> public class Drag3DTest extends Sprite >> >> { >> >> public var scene:Scene3D; >> >> private var view:View3D; >> >> private var drag3d:Drag3D; >> >> >> >> private var cameraDistance:Number = 3000; >> >> private var Hcamera:HoverCamera3D; >> >> >> >> private var move:Boolean = false; >> >> private var lastPanAngle:Number; >> >> private var lastTiltAngle:Number; >> >> private var lastMouseX:Number; >> >> private var lastMouseY:Number; >> >> >> >> public function Drag3DTest() >> >> { >> >> addEventListener(Event.ADDED_TO_STAGE, init); >> >> } >> >> >> >> private function init(e:Event):void >> >> { >> >> initSWFEnvironement(); >> >> populate(); >> >> } >> >> >> >> private function initSWFEnvironement():void >> >> { >> >> stage.align = StageAlign.TOP_LEFT; >> >> stage.scaleMode = StageScaleMode.NO_SCALE; >> >> stage.stageFocusRect = false; >> >> >> >> Hcamera = new HoverCamera3D(); >> >> view = new View3D({camera:Hcamera}); >> >> scene = view.scene; >> >> view.x = stage.stageWidth * .5; >> >> view.y = stage.stageHeight * .5; >> >> Hcamera.distance = cameraDistance; >> >> Hcamera.tiltAngle = Hcamera.panAngle = 45; >> >> >> >> addChild(view); >> >> //scene.addChild(new Trident(1000, true)); >> >> >> >> start(); >> >> } >> >> >> >> public function start():void >> >> { >> >> if(!hasEventListener(Event.ENTER_FRAME)){ >> >> addEventListener(Event.ENTER_FRAME, >> refreshScreen); >> >> >> stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseIsDown); >> >> stage.addEventListener(MouseEvent.MOUSE_UP, >> onMouseIsUp); >> >> stage.addEventListener(Event.RESIZE, >> onResize); >> >> } >> >> } >> >> >> >> private function populate():void >> >> { >> >> var _debugPrimitive:Sphere = new >> Sphere({radius:50, material:null}); >> >> scene.addChild(_debugPrimitive); >> >> >> >> drag3d = new Drag3D(view); >> >> drag3d.plane = "xz"; >> >> drag3d.debug = true; >> >> drag3d.object3d = _debugPrimitive; >> >> >> >> Hcamera.hover(true); >> >> >> >> } >> >> >> >> private function refreshScreen(event:Event = null):void >> >> { >> >> >> >> if (move) { >> >> Hcamera.panAngle = 0.7*(stage.mouseX - >> lastMouseX) + lastPanAngle; >> >> Hcamera.tiltAngle = 0.7*(stage.mouseY - >> lastMouseY) + lastTiltAngle; >> >> } >> >> >> >> Hcamera.hover(); >> >> >> >> drag3d.updateDrag(); >> >> >> >> view.render(); >> >> >> >> } >> >> >> >> private function onResize(event:Event):void >> >> { >> >> view.x = stage.stageWidth *.5; >> >> view.y = stage.stageHeight *.5; >> >> } >> >> >> >> private function onMouseIsDown(event:MouseEvent):void >> >> { >> >> lastPanAngle = Hcamera.panAngle; >> >> lastTiltAngle = Hcamera.tiltAngle; >> >> lastMouseX = stage.mouseX; >> >> lastMouseY = stage.mouseY; >> >> move = true; >> >> >> stage.addEventListener(Event.MOUSE_LEAVE, onStageMouseLeave); >> >> } >> >> >> >> private function onMouseIsUp(event:MouseEvent):void >> >> { >> >> move = false; >> >> stage.removeEventListener(Event.MOUSE_LEAVE, >> onStageMouseLeave); >> >> } >> >> >> >> private function onStageMouseLeave(event:Event):void >> >> { >> >> move = false; >> >> stage.removeEventListener(Event.MOUSE_LEAVE, >> onStageMouseLeave); >> >> } >> >> >> >> } >> >> >> >> } >> >> >> >> On Jun 1, 2010, at 1:08 AM, abowman wrote: >> >> >> >>> I tried calling the onResize function at the beginning of my init >> >>> function and that didn't solve the problem. >> >> >> >>> On May 31, 4:54 pm, Fabrice3D <[email protected]> wrote: >> >>>> looked very quickly at your code, >> >>>> since class caches few values to spare calcs, try call resize(); >> before you do setup the class. >> >> >> >>>> let me know how it goes, I will in case it doesn't fix your issue, >> try your class tomorrow. >> >> >> >>>> also one detail, camera is standard of type Camera3D >> >>>> so view.camera.x, y, z is enough, no need to declare one. >> >> >> >>>> Fabrice >> >> >> >>>> On May 31, 2010, at 6:09 PM, abowman wrote: >> >> >> >>>>> Thanks for the class Fabrice. >> >> >> >>>>> For some reason, when I move the mouse the sphere I'm dragging >> doesn't >> >>>>> stay under the mouse. >> >> >> >>>>> http://abowman.nozonenet.com/away3d/dragTest.swf >> >>>>> http://abowman.nozonenet.com/away3d/DragTest.as >> >> >> >>>>> What do I need to do to fix this? >> >> >> >>>>> Thanks >> >> >> >>>>> On May 21, 4:49 am, Fabrice3D <[email protected]> wrote: >> >>>>>> Hi all, >> >>>>>> I get many requests about this and I keep sending code... >> >> >> >>>>>> So I've added a new class dedicated to this particular >> functionality. >> >>>>>> Drag3D. in tools.utils package >> >> >> >>>>>> you can use it to drag an object or just to get the intersection >> back. >> >> >> >>>>>> here an example of implementation >> >> >> >>>>>> import away3d.tools.utils.Drag3D >> >>>>>> [... usual away code...] >> >>>>>> private var drag3d:Drag3D; >> >> >> >>>>>> private function setUp():void >> >>>>>> { >> >>>>>> //the object you want to drag >> >>>>>> var _debugPrimitive:Sphere = new >> Sphere({radius:50, material:null}); >> >>>>>> this.scene.addChild(_debugPrimitive); >> >> >> >>>>>> //declare instance >> >>>>>> drag3d = new Drag3D(this.view); >> >>>>>> //which plane do you want to drag on >> >>>>>> // note here that plane != Plane >> primitive!! >> >>>>>> drag3d.plane = "xz"; >> >>>>>> // in case you want to check what you are >> doing >> >>>>>> //drag3d.debug = true; >> >>>>>> // to assign an object to be dragged >> >>>>>> drag3d.object3d = _debugPrimitive; >> >>>>>> } >> >> >> >>>>>> private function myEnterFrame(event:Event = >> null):void >> >>>>>> { >> >>>>>> //will update the object automatically on >> mouse moves >> >>>>>> drag3d.updateDrag(); // its is of course >> handy to couple this with mouseEvents, like "if mouseisdown --> drag" >> >> >> >>>>>> // in case you want only the >> positionintersectback >> >>>>>> varintersect:Number3D = >> drag3d.getIntersect(); >> >> >> >>>>>> this.view.render(); >> >>>>>> } >> >> >> >>>>>> next to 0,0,0 default, there are also options for custom positions >> of plane, in case of AABB tests and even support for rotated planes >> >>>>>> if you want object aligned calcs... >> >> >> >>>>>> here a little tech demohttp:// >> www.closier.nl/playground/drag/drag3d.swf >> >> >> >>>>>> cheers, >> >> >> >>>>>> Fabrice >> >> >> >> >> >> > > > -- > Michael Ivanov ,Programmer > Neurotech Solutions Ltd. > Flex|Air |3D|Unity| > www.neurotechresearch.com > http://blog.alladvanced.net > http://www.meetup.com/GO3D-Games-Opensource-3D/ > Tel:054-4962254 > [email protected] > [email protected] > > > -- Michael Ivanov ,Programmer Neurotech Solutions Ltd. Flex|Air |3D|Unity| www.neurotechresearch.com http://blog.alladvanced.net http://www.meetup.com/GO3D-Games-Opensource-3D/ Tel:054-4962254 [email protected] [email protected]
