Проблема с расширением Eyeshot Solid и Display в ViewportLayout

У меня есть собственный класс (MyBox), который расширяет devDept.Eyeshot.Entities.Solid, и я хочу добавить его в ViewportLayout следующим образом:

        MyBox box = new MyBox(10, 20, 30); // length, width, height

        EyeViewportLayout.Entities.Add(box);
        EyeViewportLayout.ZoomFit();
        EyeViewportLayout.Invalidate();

Я заметил, что для визуализации моего класса мне нужно вызвать Solid.CreateBox(длина, ширина, высота), который возвращает новый Solid. Как я могу выполнить ту же работу CreateBox внутри моего пользовательского класса MyBox, чтобы, когда я добавляю его в ViewportLayout.Entities, он отображался?


person elia_c    schedule 03.10.2018    source источник


Ответы (1)


Если ваше твердое тело на самом деле представляет собой только коробку или что-то еще в этом списке, есть простой способ:

  • Коробка
  • Конус
  • Цилиндр
  • Сфера
  • Весна
  • Тор

Я предполагаю, что это действительно коробка. Затем создайте свой класс, полученный из твердого

public class MyBox : Solid 
{      
    public double Length {get; private set;} = 0d;
    public double Width {get; private set;} = 0d;
    public double Height {get; private set;} = 0d;

    public MyBox() { }

    public MyBox Create(double length, double width, double height)
    {
        var myBox = Solid.CreateBox<MyBox>(length, width, height);

        myBox.Length = length;   
        myBox.Width = width;
        myBox.Height = height;

        return myBox;
    }
}

Если вы используете любую другую форму твердого тела, вам нужно будет вручную создать каждую грань.

person Franck    schedule 03.10.2018
comment
Исправьте @franck, но теперь, если у вас есть внешний код, который пытается изменить длину, а затем вы хотите обновить визуализацию, вам нужно регенерировать новое тело, это не то, что я хочу делать. - person elia_c; 03.10.2018
comment
@elia_c Вы никак не можете обновить объемный размер. Это невозможно без трансформации. То, что вы хотите, невозможно, и единственный способ сделать это - использовать BlockReference и создать твердое тело 1x1x1 и поиграть со свойством масштаба, и это обновит значение поля, но твердое тело представляет собой набор многих логических операций, которые для получения результат, вам нужно вычислять их каждый раз - person Franck; 03.10.2018