Управление видимостью объектов

Если текущий вид это 3D-пространство модели, план, сборка или чертёж, для него можно получить COM-оболочку Renga.IModelView, предоставляющую доступ к чтению и редактированию параметров видимости объектов, заданию визуального стиля.

Кроме того, у IModelView имеется метод GetInterfaceByName, позволяющий безопасно получить сервис для создания снимков.

Методы COM-оболочки Renga.IModelView можно разделить на 2 группы:

  • управление видимостью объектов;
  • управление визуальным стилем вида и отдельных объектов;

Видимость объектов

  • GetHiddenObjects - возвращает массив int-идентификаторов скрытых объектов на данном виде;
  • GetVisibleObjects - возвращает массив int-идентификаторов видимых объектов на данном виде;
  • IsObjectVisible - возвращает признак, видим ли объект по заданному int-идентификатору на данном виде;
  • SetObjectsVisibility - задает признак видимости (или невидимости) для заданной группы int-идентификаторов объектов на данном виде;
  • ShowObjects - задает видимость объектов для заданной группы int-идентификаторов объектов на данном виде (только для 3D-вида); Ниже предлагается авторский метод расширения, задающий видимость объектов для 4 случаев:
public enum ObjectsVisibilityVariant
{
    ShowAll, //показать все объекты
    HideAll, // скрыть все
    ShowOnlySelected, // скрыть все, кроме выбранных
    HideOnlySelected // показать все, кроме выбранных
}

public static void SetObjectsVisibility2(this Renga.IModelView rengaModelView,
        ObjectsVisibilityVariant mode, int[]? ids)
{
    Renga.IApplication rengaApp;

    Renga.IModel model = rengaApp.Project.Model;
    Renga.IModelObjectCollection rengaObjectsCollection
        = model.GetObjects();

    List<int> idsAll = new List<int>();
    for (int rengaObjectIndex = 0; rengaObjectIndex <
        rengaObjectsCollection.Count; rengaObjectIndex++)
    {
        Renga.IModelObject rengaObject =
            rengaObjectsCollection.GetByIndex(rengaObjectIndex);
        idsAll.Add(rengaObject.Id);
    }

    if (mode == ObjectsVisibilityVariant.ShowAll)
        rengaModelView.SetObjectsVisibility(idsAll.ToArray(), true);
    else if (mode == ObjectsVisibilityVariant.HideAll)
        rengaModelView.SetObjectsVisibility(idsAll.ToArray(), false);
    else if (ids == null || !ids.Any()) return;


    if (mode == ObjectsVisibilityVariant.ShowOnlySelected)
    {
        var idsToHide = idsAll.Except(ids);

        rengaModelView.SetObjectsVisibility(ids, true);
        if (idsToHide.Any()) rengaModelView.
                SetObjectsVisibility(idsToHide.ToArray(), false);
    }
    else if (mode == ObjectsVisibilityVariant.HideOnlySelected)
    {
        var idsToShow = idsAll.Except(ids);

        rengaModelView.SetObjectsVisibility(ids, false);
        if (idsToShow.Any()) rengaModelView.
                SetObjectsVisibility(idsToShow.ToArray(), true);
    }
}

Визуальный стиль

  • GetObjectVisualStyle - возвращает визуальный стиль объекта по его int-идентификатору;
  • SetObjectsVisualStyle - задает объектам визуальный стиль по их int-идентификаторам; Свойство VisualStyle - возвращает или задает визуальный стиль для всего вида.

Как правило,