/// <summary>
 /// Alternate constructor for dependency injection
 /// </summary>
 public GridIndexController(IViewAgent va, IConfigurationAgent ca, IPositioner p)
 {
     viewAgent   = va;
     configAgent = ca;
     positioner  = p;
     positioner.StatusChanged += OnPositionerStatusChanged;
 }
Esempio n. 2
0
        /// <summary>
        /// Calculate new position based on cursor in drag mode and move brick.
        /// </summary>
        void MoveToCursor(DragableBrick brick, Vector3 mousePosition)
        {
            if (lastMousePosition != mousePosition)
            {
                lastMousePosition = mousePosition;
                IPositioner positioner = GetPositioner(brick);
                lastProposedPosition = positioner.GetPosition(mousePosition, ToolsManager.instance.snapToGridButton.isSelected, 0.5f);

                if (!isJoined && lastProposedPosition.isJoined)
                {
                    AudioSource.PlayClipAtPoint(Preferences.instance.joinBrickSound, UnityEngine.Camera.main.transform.position);
                    dragableBrick.FlashBrick();
                }

                isJoined = lastProposedPosition.isJoined;

                var moveVector = lastProposedPosition.position - brick.transform.position;
                if (moveVector.magnitude > 1)
                {
                    lastProposedPosition.position = brick.transform.position + moveVector.normalized;
                }

                brick.transform.position = lastProposedPosition.position;
                brick.transform.rotation = lastProposedPosition.rotation;
            }
        }
Esempio n. 3
0
 public TiltCorrection(IPositioner _pos, Position _Pos1, Position _Pos2, Position _Pos3, double _Offset)
 {
     mPositioner = _pos;
     F           = _Pos1.Copy;
     G           = _Pos2.Copy;
     H           = _Pos3.Copy;
     offset      = _Offset;
     ReCalculatePlane();
 }
Esempio n. 4
0
        public override enExperimentStatus Configure(IExperiment parent, string resultsFilePath)
        {
            if (status != enExperimentStatus.Running)
            {
                this.parent = parent;

                ResultsFilePath = Path.Combine(resultsFilePath, Name); ;
                ResultsFileName = "ExpScanArray - " + Name + ".dat";

                IPositioner pos = Settings.Positioners[Settings.Positioner];
                if (Settings.Tilt)
                {
                    pos = Settings.Positioners[Settings.TiltPositioner];
                    Tilt = new TiltCorrection(pos, Settings.Pos1, Settings.Pos2, Settings.Pos3, Settings.Offset);
                    Tilt.PositionStore = PositionStore;
                }

                Scanner = new ScannerArray(Settings.ScannerMode, pos, Settings.Lengths, Settings.Increments, Settings.Speeds,
                    Settings.ReverseSpeeds, Settings.PreMovementHook, Settings.PostMovementHook, Tilt,
                    Settings.XDelay, Settings.YDelay, Settings.ZDelay,
                    log);
                Scanner.Initialize();

                //safety check: if the tilt correction is in use, a scan in Z direction is not a good idea.
                if ((Math.Abs(Settings.Increments.Z) > 0) && (Math.Abs(Settings.Lengths.Z) > 0) &&
                    (Math.Abs(Settings.Increments.Z) <= Math.Abs(Settings.Lengths.Z)) && (Settings.Tilt))
                {
                    //todo: describe error
                    return enExperimentStatus.Error;
                }

                // create ScanData container
                scanData = new ScanData();
                scanData.experimentName = Name;

                reverseScanX = Settings.Increments.X < 0;
                reverseScanY = Settings.Increments.Y < 0;
                scanData.setScanDimensions(Scanner.NumScanPoints[0], Scanner.NumScanPoints[1]);

                // Current Positioner pos
                Position startPos = new Position();
                if(pos.GetAbsolutePosition(ref startPos) != enuPositionerStatus.Ready) return enExperimentStatus.Error;

                // set scanData dimensions
                scanData.X0 = Math.Min(startPos.X, (Scanner.NumScanPoints[0] - 1) * Settings.Increments.X);
                scanData.Y0 = Math.Min(startPos.Y, (Scanner.NumScanPoints[1] - 1) * Settings.Increments.Y);
                scanData.X1 = Math.Max(startPos.X, (Scanner.NumScanPoints[0] - 1) * Settings.Increments.X);
                scanData.Y1 = Math.Max(startPos.Y, (Scanner.NumScanPoints[1] - 1) * Settings.Increments.Y);
                status = enExperimentStatus.Idle;
                return status;
            }
            return enExperimentStatus.Error;
        }
Esempio n. 5
0
        public CloudSpace(double width, double height)
        {
            Width               = width;
            Height              = height;
            _collisionMapWidth  = (int)Width;
            _collisionMapHeight = (int)Height;
            CloudCenter         = new Point(width / 2, height / 2);

            _positioner = new SpiralPositioner(new Size(Width, Height));
            _pen        = new Pen(Brushes.Purple, 1);
            _pen.Freeze();
        }
Esempio n. 6
0
        //absolute global position as returned by all positioners
        public Position CurrentAbsolutePosition()
        {
            Position pos         = new Position(0, 0, 0);
            Position ipos        = new Position(0, 0, 0);
            var      positioners = hwStore.Where(x => typeof(IPositioner).IsAssignableFrom(x.Value.GetType())).Select(x => x);

            foreach (var iterator in positioners)
            {
                IPositioner positioner = iterator.Value as IPositioner;
                positioner.GetAbsolutePosition(ref ipos);
                pos = pos.Sum(ipos);
            }
            return(pos);
        }
Esempio n. 7
0
        public ScannerArc(IPositioner _pos, Position _parameters,
                          Position _speeds, Position _revspeeds, Position _premove, Position _postmove, TiltCorrection _tilt, LogHelper log)
        {
            this.log    = log;
            mPositioner = _pos;
            mRadius     = _parameters.X;
            mRadIncr    = _parameters.Y;
            mAngIncr    = _parameters.Z;

            mSpeeds        = _speeds;
            mReverseSpeeds = _revspeeds;
            mPreMove       = _premove;
            mPostMove      = _postmove;
            mTilt          = _tilt;
        }
Esempio n. 8
0
 public enuFeedbackStatusFlags Initialize()
 {
     mPositioner = Settings.Positioners[Settings.Positioner];
     if (mPositioner != null)
     {
         if (mPositioner.GetPositionerStatus == enuPositionerStatus.Ready)
         {
             mSensor = Settings.TransducerChannels[Settings.Channel];
             if (mSensor != null)
             {
                 if (mSensor.Status == enuTChannelStatus.OK)
                 {
                     mSensor.Averaging = Settings.Averaging;
                     abortFlag         = false;
                     PID          = new PIDController(log);
                     PID.Settings = Settings.PIDController;
                     if (PID.Error == 0)
                     {
                         mStatus = enuFeedbackStatusFlags.Ready;
                     }
                     else
                     {
                         log.Add("Could not initialize PID controller, check PID controller settings!", "ERROR");
                     }
                 }
                 else
                 {
                     log.Add("Could not initialize sensor, check transudcer settings!", "ERROR");
                 }
             }
             else
             {
                 log.Add("Could not initialize sensor, check feedbackcontroller settings!", "ERROR");
             }
         }
         else
         {
             log.Add("Could not initialize positioner, check positioner settings!", "ERROR");
         }
     }
     else
     {
         log.Add("Could not initialize positioner, check feedback controller settings!", "ERROR");
     }
     return(mStatus);
 }
Esempio n. 9
0
        public void GridIndexTestInitialize()
        {
            // stub out a view agent and view DS
            viewAgent = MockRepository.GenerateStub <IViewAgent>();
            viewDS    = new CCViewDS();

            // when the controller calls viewAgent.get return this DS
            viewAgent.Stub(x => x.Get()).Return(viewDS);

            // stub out a config agent
            configAgent = MockRepository.GenerateStub <IConfigurationAgent>();

            // stub out a positioner
            positioner = MockRepository.GenerateStub <IPositioner>();

            // create the controller
            gridIndexingController = new GridIndexController(viewAgent, configAgent, positioner);
        }
Esempio n. 10
0
        public override enExperimentStatus Configure(IExperiment parent, string resultsFilePath)
        {
            if (status != enExperimentStatus.Running)
            {
                this.parent = parent;

                ResultsFilePath = Path.Combine(resultsFilePath, Name);;
                ResultsFileName = "ExpScanArc - " + Name + ".dat";

                IPositioner pos = Settings.Positioners[Settings.Positioner];
                if (Settings.Tilt)
                {
                    pos  = Settings.Positioners[Settings.TiltPositioner];
                    Tilt = new TiltCorrection(pos, Settings.Pos1, Settings.Pos2, Settings.Pos3, Settings.Offset);
                    Tilt.PositionStore = PositionStore;
                }

                Position Parameters = new Position(Settings.Radius, Settings.RadiusIncrement, Settings.AngularIncrement);
                //we just create a scanner object and it is dealing with the rest
                Scanner = new ScannerArc(pos, Parameters, Settings.Speeds,
                                         Settings.ReverseSpeeds, Settings.PreMovementHook, Settings.PostMovementHook, Tilt, log);
                Scanner.Initialize();

                // create ScanData container
                scanData = new ScanDataFreeform();
                scanData.experimentName = Name;

                // reset Position Counter
                currentPosIDX = 0;

                // Current Positioner pos
                Position currentPos = new Position();
                if (Scanner.Position(ref currentPos) != enuPositionerStatus.Ready)
                {
                    return(enExperimentStatus.Error);
                }
                currentXPos = currentPos.X;
                currentYPos = currentPos.Y;

                status = enExperimentStatus.Idle;
                return(status);
            }
            return(enExperimentStatus.Error);
        }
Esempio n. 11
0
        /// <summary>
        /// Start dragging.
        /// </summary>
        /// <param name="eventData">Event data.</param>
        void StartDrag(PointerEventData eventData)
        {
            //save start position and rotaton to be able to revert move action
            oldPosition = dragableBrick.transform.position;
            oldRotation = dragableBrick.transform.rotation;

            LMBRelesed = !Input.GetMouseButton((int)MouseButton.LeftMouse);
            isDragging = true;
            SelectionManager.instance.TurnOffSelectionEffect();

            IPositioner positioner = GetPositioner(dragableBrick);
            var         dragPoint  = eventData == null ? dragableBrick.transform.position : eventData.pointerPressRaycast.worldPosition;

            positioner.StartMoving(dragableBrick, dragPoint);

            if (OnStartMove != null)
            {
                OnStartMove(dragableBrick);
            }
        }
Esempio n. 12
0
 private void Awake()
 {
     positioner  = GameObject.FindGameObjectWithTag("Positioner");
     iPositioner = positioner.GetComponent <IPositioner>();
 }
 /// <summary>
 /// Base Constructor
 /// </summary>
 public GridIndexController(Navigator navigator) : base(navigator)
 {
     viewAgent   = new CCViewAgent();
     configAgent = new CCConfigurationAgent();
     positioner  = new CCPositioner();
 }
Esempio n. 14
0
 private void Awake()
 {
     flipCard      = GetComponent <FlipCardAnimation>();
     positioner    = GameObject.FindGameObjectWithTag("Positioner").GetComponent <IPositioner>();
     actionsHolder = GameObject.FindGameObjectWithTag("ActionsHolder");
 }
 public CircularCloudLayouter(Point center)
 {
     this.center = center;
     positioner  = new ArchimedeanPositioner(1, 1);
 }
Esempio n. 16
0
 public CloudSpace(double width, double height, IRandomizer randomizer = null) : this(width, height)
 {
     _randomizer = randomizer ?? new CryptoRandomizer();
     _positioner = new SpiralPositioner(new Size(Width, Height));
 }