Beispiel #1
0
        //移动夹点
        public override void MoveGripPointsAt(Entity entity, GripDataCollection grips, Vector3d offset, MoveGripPointsFlags bitFlags)
        {
            LArrow la = new LArrow(entity);

            foreach (GripData gd in grips)
            {
                if (gd is LArrowGripData)
                {
                    LArrowGripData lagd = (LArrowGripData)gd;
                    lagd.Move(la, offset);
                }
            }
            //排除自定义的夹点移动,让剩下的夹点按默认规则移动
            for (int i = grips.Count - 1; i >= 0; i--)
            {
                if (grips[i] is LArrowGripData)
                {
                    grips.Remove(grips[i]);
                }
            }
            if (grips.Count > 0)
            {
                base.MoveGripPointsAt(entity, grips, offset, bitFlags);
            }
        }
        //获取夹点,简单实体应重载该函数以获取更灵活的控制
        public override void GetGripPoints(Entity entity, GripDataCollection grips, double curViewUnitSize, int gripSize, Vector3d curViewDir, GetGripPointsFlags bitFlags)
        {
            LArrow3 la = new LArrow3(entity);

            base.GetGripPoints(entity, grips, curViewUnitSize, gripSize, curViewDir, bitFlags);
            grips.Remove(grips[2]);
            grips.Add(new LArrowGripData3(la.Position));
        }
Beispiel #3
0
        /// <inheritdoc />
        public override void GetGripPoints(
            Entity entity, GripDataCollection grips, double curViewUnitSize, int gripSize, Vector3d curViewDir, GetGripPointsFlags bitFlags)
        {
            Debug.Print("BreakLineGripPointOverrule");
            try
            {
                // Проверка дополнительных условий
                if (IsApplicable(entity))
                {
                    // Чтобы "отключить" точку вставки блока, нужно получить сначала блок
                    // Т.к. мы точно знаем для какого примитива переопределение, то получаем блок:
                    var blkRef = (BlockReference)entity;

                    // Удаляем стандартную ручку позиции блока (точки вставки)
                    GripData toRemove = null;
                    foreach (var gd in grips)
                    {
                        if (gd.GripPoint == blkRef.Position)
                        {
                            toRemove = gd;
                            break;
                        }
                    }

                    if (toRemove != null)
                    {
                        grips.Remove(toRemove);
                    }

                    // Получаем экземпляр класса, который описывает как должен выглядеть примитив
                    // т.е. правила построения графики внутри блока
                    // Информация собирается по XData и свойствам самого блока
                    var breakLine = EntityReaderService.Instance.GetFromEntity <BreakLine>(entity);

                    // Паранойя программиста =)
                    if (breakLine != null)
                    {
                        // Получаем первую ручку (совпадает с точкой вставки блока)
                        var gp = new BreakLineGrip(breakLine, BreakLineGripName.StartGrip)
                        {
                            GripPoint = breakLine.InsertionPoint
                        };
                        grips.Add(gp);

                        // получаем среднюю ручку
                        gp = new BreakLineGrip(breakLine, BreakLineGripName.MiddleGrip)
                        {
                            GripPoint = breakLine.MiddlePoint
                        };
                        grips.Add(gp);

                        // получаем конечную ручку
                        gp = new BreakLineGrip(breakLine, BreakLineGripName.EndGrip)
                        {
                            GripPoint = breakLine.EndPoint
                        };
                        grips.Add(gp);
                    }
                }
            }
            catch (Exception exception)
            {
                if (exception.ErrorStatus != ErrorStatus.NotAllowedForThisProxy)
                {
                    ExceptionBox.Show(exception);
                }
            }
        }