Программирование в Сапфир

Здравствуйте уважаемые коллеги. Пытаюсь начать программировать в Сапфир. Начал знакомиться с доступными материалами. К своему неудовольствию обнаружил что api библиотеки написаны на С++. Но нашел скрипты написанные на java, вот этот например "c:\Users\Public\Documents\SAPFIR\SAPFIR 2016\Service\Test\Building.htm" исследовал код, но не смог найти библиотеку, импортированную в этот скрипт. Может кто то поможет?

У зв'язку з великою кількістю неіснуючих підписок на оновлення форуму була проведена очистка. Якщо ви перестали отримувати повідомлення з оновленнями, прохання провести підписку знову.
Сторінки: Поперед. 1 2 3 4 Наст.
RSS
Программирование в Сапфир, Какие библиотеки за что отвечают
 
Здраствуйте, а подскажите пожалуйста как в пользовательском ноде на python подать на выход список обьектов.
 
Приветствую!

Зависит от того, создаётся ли этот объект самим нодом, или нод работает как фильтр и должен просто транзитом “передавать” объекты с входа на выход.
Если объект создаётся нодом, то необходимо вызывать функцию Object AddOutModel(Int32 IDio, Int32 TypeModel, Object pStorey)
Этот метод предназначен для добавления на заданный выход нода объекта САПФИР указанного типа (стены, колонны, балки и др.).
Аргументы:
Int32 IDio -> Идентификатор выхода
Int32 TypeModel -> Идентификатор типа модели
Object pStorey -> Объект этажа

Если просто транзитом — тогда используйте SetArrayIdObjectOut(Int32 IdOut, Object Param)
Аргументы:
Int32 OutID -> Идентификатор выхода нода

C уважением, Алексей Тищенко
 
Дополнение.

Если «объект» — это просто точка, линия или меш, то сначала у нода нужно получить контейнер для таких объектов, а затем добавлять в него элементы.
out_model = node.GetOutModel(0) # получаем указатель на локальный контейнер моделей нода выхода "0"
Arc = out_model.NewModel(TM3_ARC) # в выходном контейнере создаем примитив "Окружность" или если есть готовая линия out_model.AddModel(ln) # такую полилинию добавляем в выходной контейнер

C уважением, Алексей Тищенко
 
Добрый день спасибо большое за пояснения. Возник еще вопрос:
var Model = Storey.GetModelByIndex(indexModel) ; По индексу получить объект, приведенный к AutoModel
var Model = Storey.GetModelByIndex2(indexModel) ; По индексу получить объект, без приведенния к AutoModel
На примере обозначения осей отладка подсказала что получил в первом случае AutoModel во втором AutoDim. В каком случае верно использовать GetModelByIndex по задумке разработчика ?
 
Добрый день подскажите можно ли для AutoAxes добраться до параметров отвечающие за на названия осей и их размеров, представленных в этом меню ?

И как можно добавить AutoAxes на уровень проекта ? Получается только на уровень этажа через AddOutModel
 
Добрый день, при попытке разобрать блок отладка выдала такую ошибку: Ошибка на сервере. (Исключение из HRESULT: 0x80010105 (RPC_E_SERVERFAULT))

Хотя в модели нод отработал как нужно.

Не совсем, цикл прекртился и если несколько плоков на этаж подходяш то отработал только первый попавшийся
Змінено: Expert_Hell - 13.01.2026 10:51:59
 
Цитата
Expert_Hell написал:
Добрый день спасибо большое за пояснения. Возник еще вопрос:
var Model = Storey.GetModelByIndex(indexModel) ; По индексу получить объект, приведенный к AutoModel
var Model = Storey.GetModelByIndex2(indexModel) ; По индексу получить объект, без приведенния к AutoModel
На примере обозначения осей отладка подсказала что получил в первом случае AutoModel во втором AutoDim. В каком случае верно использовать GetModelByIndex по задумке разработчика ?

Storey.GetModelByIndex(indexModel) и Storey.GetModelByIndex2(indexModel) получают объекты автоматизации для одного и того же объекта модели САПФИРа, но предоставляют разный набор функций.

AutoModel - это общий базовый тип для всех типов объектов и содержит универсальные методы, подходящие почти для любых элементов. Поэтому GetModelByIndex целесообразно использовать в случаях, когда тип объекта заранее неизвестен - например, когда мы просто перебираем все объекты на этаже.

А GetModelByIndex2 позволяет получить автоматизированный объект конкретного типа и получить доступ к более специализированным свойствам этого объекта.

С уважением, Алексей Тищенко
 
Цитата
написал:
Добрый день подскажите можно ли для AutoAxes добраться до параметров отвечающие за на названия осей и их размеров, представленных в этом меню ?

И как можно добавить AutoAxes на уровень проекта ? Получается только на уровень этажа через AddOutModel
К сожалению, в AutoAxes нет необходимой функциональности. Доработаем.

С уважением, Алексей Тищенко
 
Цитата
написал:
Добрый день, при попытке разобрать блок отладка выдала такую ошибку: Ошибка на сервере. (Исключение из HRESULT: 0x80010105 (RPC_E_SERVERFAULT))

Хотя в модели нод отработал как нужно.

Не совсем, цикл прекртился и если несколько плоков на этаж подходяш то отработал только первый попавшийся
Было бы хорошо, если бы Вы прислали свой нод и тестовую модель.

С уважением, Алексей Тищенко
 
Добрый день, чере Parameter нет возможности добраться до свойтв помещения: формировать доп монтажные и загружения:
Код
import clr





def solve(node):

    pass



    doc = node.GetDocument()

    prj = doc.GetActiveProject()

    

    str = prj.GetFirstStorey(1)

    obj = str.GetModelByIndex2(0)

    test11 = obj.Parameter['M_LOADAREA_CONST']

    test12 = obj.Parameter['M_LOADCASE3'] # НЕ ДОБРАТЬСЯ

    test13 = obj.Parameter['M_DopMontag_3'] # НЕ ДОБРАТЬСЯ

    test21 = obj.Parameter['M_LOADAREA_EXP']

    test31 = obj.Parameter['M_LOADAREA_TMP']

    a = 1
 
Приветствую, Expert_Hell!

Доработаем Parameter

С уважением, Алексей Тищенко
 
Добрый день, подскажи имеется ли возможность из ISapfirDoc добраться до расчетной схемы ? var TM_FEAPROJECT = 6; // Конструкции до вот этой штуки ? Допустим сейчас можно через id.
Тогда возникается другой вопрос как перебрать объекты в сами нагрузки ? Ну и допустим пройтись по всем нагрузкам через тот же индекс ?
 
Добрый день, Expert_Hell!
По идее у документа по ID  можно получить указатель на объект, т.е. получить указатель на расчетную схему. А она наследник от этажа и методы этажа к ней подойдут для того, чтобы перебрать все что в ней есть.

С уважением, Алексей Тищенко
 
Цитата
написал:
наследник от этажа и методы этажа
Спасибо, буду пробовать
 
, Добрый день подскажи функции которыми можно было бы искать объекты рядом с исходны ? Допустим найти объект под плитой ближайший
 
Приветствую!

Под плитой обычно будет очень много объектов. У объекта есть функция GetBox

Дальше можно просто проверить, попадает ли бокс объекта в бокс плиты в координатах XY, без учета координаты Z

С уважением, Алексей Тищенко

 
Добрый день, если объекту лестнице добавить пользовательский параметр через obj.Parameter[' '] =  визуально физическая модель лестницы исчезает, остается аналитическа модель, так же объект останется в диспетчере но ключевая часть параметров лестницы исчезнет.

часть кода с добавлением пользовательского параметра
Код
            if obj_it_o is None:
                if obj_it is None:
                    obj.Parameter['IfcType'] = ""
                else:
                    obj.Parameter['IfcType'] = obj_it
            else:
                obj.Parameter['IfcType'] = obj_it_o
Змінено: Expert_Hell - 26.02.2026 01:25:10
 
obj.Parameter[' '] =  с помещениями странно отрабатывает, я не могу добавить пользовательские параметры, и для помещений не подходит ClearMnParam. Кроме того непонятно что писать в идентификатор режима роботы, поставил 0 вроде работает
Змінено: Expert_Hell - 26.02.2026 06:46:05
 
Добрый день через obj.Parameter нет возможности добраться до Формы АЖТ у Колонн

СТак же не удалось получить значение данного параметра через GetMnParam
Змінено: Expert_Hell - 27.02.2026 03:01:51
 
Кстати можно ли как то получить список возможных функций для данного объекта ? Иногда возникают ошибки о неприменимости определнных функци к определнным типам объектов
Сторінки: Поперед. 1 2 3 4 Наст.
Читають тему (гостей: 2)