コード例 #1
0
        public void OnComputeBeziersInnerPointEvent(ComputeBeziersInnerPointEvent ComputeBeziersInnerPointEvent)
        {
            var tokenSource = new CancellationTokenSource();
            var token       = tokenSource.Token;

            lock (this.computeBeziersInnerPointTasks)
            {
                if (this.computeBeziersInnerPointTasks.ContainsKey(ComputeBeziersInnerPointEvent.ID))
                {
                    this.computeBeziersInnerPointTasks[ComputeBeziersInnerPointEvent.ID].Cancel();
                }

                this.computeBeziersInnerPointTasks[ComputeBeziersInnerPointEvent.ID] = tokenSource;
            }

            Task.Factory.StartNew(() => this.ComputeEvent(ComputeBeziersInnerPointEvent), token);
        }
コード例 #2
0
        private void ComputeEvent(ComputeBeziersInnerPointEvent ComputeBeziersInnerPointEvent)
        {
            var ComputeBeziersInnerPointEventResponse = new ComputeBeziersInnerPointResponse();

            ComputeBeziersInnerPointEventResponse.ID         = ComputeBeziersInnerPointEvent.ID;
            ComputeBeziersInnerPointEventResponse.Transforms = new List <Matrix4x4>();

            int pointNumber = Convert.ToInt32(ComputeBeziersInnerPointEvent.BeziersControlPoints.GetPointsRawDistance() * (ComputeBeziersInnerPointEvent.PointNumberPerUnitDistance));

            for (var i = 0; i <= pointNumber; i++)
            {
                Vector3 worldPosition = ComputeBeziersInnerPointEvent.BeziersControlPoints.ResolvePoint((float)i / (float)pointNumber);
                ComputeBeziersInnerPointEventResponse.Transforms.Add(Matrix4x4.TRS(worldPosition, Quaternion.identity, ComputeBeziersInnerPointEvent.MeshScale));
            }

            lock (this.computeBeziersInnerPointTasks)
            {
                this.computeBeziersInnerPointTasks.Remove(ComputeBeziersInnerPointEvent.ID);
            }

            this.SendComputeBeziersInnerPointResponse.Invoke(ComputeBeziersInnerPointEventResponse);
        }