示例#1
0
        private void OnGetLinePositionSetInSpecificLevel(ILevel level, int levelSequence, IPositionSet positionSet)
        {
            lock (layers)
            {
                if (linePartSetLayer == null)
                {
                    linePartSetLayer           = new Layer_M2MPartSetInSpecificLevel(level, positionSet);
                    linePartSetLayer.MainColor = Settings.Default.LinePositionSetInSpecificLevelColor;
                    linePartSetLayer.Alpha     = 50;
                    //linePartSetLayer.LineColor = Color.Red;
                    linePartSetLayer.Active = true;
                    layers.Add(linePartSetLayer);

                    positionSetSet = new PositionSetSet();

                    BottonLevelPositionSetLayer = new Layer_PositionSet_Point(positionSetSet);
                    BottonLevelPositionSetLayer.Point.IsDrawPointBorder = true;
                    BottonLevelPositionSetLayer.Point.PointRadius       = 2;
                    BottonLevelPositionSetLayer.Point.PointColor        = Settings.Default.BottonLevelPositionSetColor;
                    layers.Add(BottonLevelPositionSetLayer);
                }
                else
                {
                    linePartSetLayer.SpringLayerRepresentationChangedEvent(linePartSetLayer);
                }

                positionSetSet.Clear();
                positionSet.InitToTraverseSet();
                while (positionSet.NextPosition())
                {
                    IPart tempPart = level.GetPartRefByPartIndex((int)positionSet.GetPosition().GetX(), (int)positionSet.GetPosition().GetY());
                    if (tempPart != null)
                    {
                        positionSetSet.AddPositionSet(m2mStructure.GetBottonLevelPositionSetByAncestorPart((
                                                                                                               tempPart), levelSequence));
                    }
                }

                BottonLevelPositionSetLayer.SpringLayerRepresentationChangedEvent(BottonLevelPositionSetLayer);
            }

            flowControlerForm.BeginInvoke(Update);
            flowControlerForm.SuspendAndRecordWorkerThread();
        }
        public AlgorithmDemo_M2M_CD(M2M_CD M2M_CD, Layers layers, FlowControlerForm flowControlerForm, dUpdate update)
        {
            this.M2M_CD            = M2M_CD;
            this.layers            = layers;
            this.flowControlerForm = flowControlerForm;
            this.Update            = update;


            M2M_CD.GetCollision += delegate(IPositionSet positionSet)
            {
                System.Diagnostics.Debug.WriteLine("Collision!");

                if (objLayer != null)
                {
                    layers.Remove(objLayer);
                }
                {
                    objLayer = new Layer_PositionSet_Polygon(new PositionSet_Cloned(positionSet));
                    objLayer.PolygonLine.LineColor = Color.Red;
                    objLayer.PolygonLine.LineWidth = 1;
                    layers.Add(objLayer);
                }

                flowControlerForm.BeginInvoke(Update);
                flowControlerForm.SuspendAndRecordWorkerThread();
            };

            M2M_CD.GetNoCollision += delegate(IPositionSet positionSet)
            {
                System.Diagnostics.Debug.WriteLine("NoCollision!");
                if (objLayer != null)
                {
                    layers.Remove(objLayer);
                }
                {
                    objLayer = new Layer_PositionSet_Polygon(new PositionSet_Cloned(positionSet));
                    objLayer.PolygonLine.LineColor = Color.Green;
                    objLayer.PolygonLine.LineWidth = 1;
                    layers.Add(objLayer);
                }
                flowControlerForm.BeginInvoke(Update);
                flowControlerForm.SuspendAndRecordWorkerThread();
            };

            M2M_CD.GetIntersectPart += delegate(ILevel level, IPositionSet positionSet)
            {
                if (linePartSetLayer == null)
                {
                    linePartSetLayer           = new Layer_M2MPartSetInSpecificLevel(level, positionSet);
                    linePartSetLayer.MainColor = Settings.Default.LinePositionSetInSpecificLevelColor;
                    linePartSetLayer.Alpha     = 50;
                    //linePartSetLayer.LineColor = Color.Red;
                    linePartSetLayer.Active = true;
                    layers.Add(linePartSetLayer);
                }
                else
                {
                    linePartSetLayer.SpringLayerRepresentationChangedEvent(linePartSetLayer);
                }
            };

            M2M_CD.GetM2MStructure += delegate(IM2MStructure m2mStructure)
            {
                this.m2mStructure = m2mStructure;
            };

            IsGetM2MStructure = true;
            IsGetPositionSetToGetConvexHull = true;

            flowControlerForm.SelectConfiguratoinObject(this);
            flowControlerForm.SuspendAndRecordWorkerThread();
        }