//移动夹点 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)); }
/// <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); } } }