Получение площадей плоскостей листовой детали

Автор elisevgeniy, 25.10.21, 22:10:44

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

elisevgeniy

Задача: ориентировать проекционный вид на чертеже листовой детали по наибольшей площади. Для этого нужно найти все грани (плоскости) детали и посмотреть площадь.

Тыкался по Справочнику SDK - решения не нашёл, может кто хотя бы куда рыть скажет?

p3452


Toptotal

А можно не только площадей. Хочется еще и габаритов детали и размеров по осям, обьем, площадь. Такой своеобразный "анализатор" файла с данными в нем в полях прописать.

elisevgeniy

26.10.21, 23:07:09 #3 Последнее редактирование: 27.10.21, 00:18:01 от elisevgeniy
Цитата: p3452 от 26.10.21, 11:17:48Пара возможных вариантов:
Пара вариантов.png

Попробовал по 2ому сообщению получить EntityCollection и FeatureCollection. Не получилось ни то, ни то. IPart7 detail - вполне рабочая деталь.

IPart7 detail = ...;
ksDocument3D ksDocument3D = kompas.Document3D();
bool oppened = ksDocument3D.Open(detail.FileName, true);

ksEntityCollection entityCollection = (ksEntityCollection)ksDocument3D.EntityCollection(0);
int entityCollectionCount = entityCollection.GetCount();

ksFeatureCollection ksFeatureCollection = (ksFeatureCollection)ksDocument3D.FeatureCollection(0, 0, 0, 0, 0, 0);

// ИТОГО
// oppened = true
// entityCollectionCount = 0
// ksFeatureCollection  = null

В чём проблема - ума не приложу


UPD:
Добрался до площадей граней (но не только плоских, а до всех) таким образом:
IPart7 detail = ...;
ksPart ksPart = (ksPart) kompas5.TransferInterface(detail, 1, 0); // Перевод из API7 в API5
ksBody body = ksPart.GetMainBody();
ksFaceCollection ksFaceCollection = (ksFaceCollection)body.FaceCollection();
int ksFaceCollectionCount = ksFaceCollection.GetCount();

for (int i = 0; i < ksFaceCollection.GetCount(); i++)
{
    ksFaceDefinition face = (ksFaceDefinition)ksFaceCollection.GetByIndex(i);
     Console.WriteLine(face.GetArea(0));
}

p3452

Если добавить проверку (IsPlanar - Определить, плоская ли грань) и в том же цикле фиксировать "Владельца" (GetOwnerEntity - Получить указатель на объект, породивший ребро) можно полностью решить задачу.
+ Благодарностей: 1

elisevgeniy

Цитата: p3452 от 27.10.21, 17:06:07Если добавить проверку (IsPlanar - Определить, плоская ли грань) и в том же цикле фиксировать "Владельца" (GetOwnerEntity - Получить указатель на объект, породивший ребро) можно полностью решить задачу.

А как у ksEntity получить плоскость в которой лежит грань? Вроде есть ksOrientedEdgeCollection - "Интерфейс массива ориентированных ребер.", оно ли это?

Kilia

28.10.21, 00:40:26 #6 Последнее редактирование: 28.10.21, 01:51:46 от Kilia
p3452, а что это за программа, которая так четко все показывает?

p3452

После нахождения плоскИХ гранЕЙ с максимальной площадью, нужно выбрать любую из них и:
- ориентировать модель "Нормально к..." - этой грани;
- установить Главный вид модели - "По заданной ориентации".
Таким образом "задача" будет решена, т.к. при создании чертежа Основным проекционным видом будет вид на нашу грань.

Цитата: Kilia от 28.10.21, 00:40:26p3452, а что это за программа, которая так четко все показывает?
Это моя программка...

Kilia

Цитата: p3452 от 28.10.21, 13:25:11Это моя программка...
А где можно ее потрогать/приобрести?

graphdark

Цитата: p3452 от 28.10.21, 13:25:11Это моя программка...
Присоединяюсь. Можно посмотреть, что за красивая программа? Или хоть алгоритмом поделитесь, как делали.

p3452

Цитата: graphdark от 02.01.22, 23:05:24Или хоть алгоритмом поделитесь, как делали.
"Алгоритм" чего, конкретно? Программа многогранна...

graphdark

Цитата: p3452 от 03.01.22, 12:03:56Программа многогранна...
Полож на ютуп функционал. Так понимаю-это справка, только более удобная?

p3452

Цитата: graphdark от 03.01.22, 14:13:34Так понимаю-это справка, только более удобная?
Как частный случай (пост №1), можно назвать и "справка".
Хотя, с таким же успехом, это может быть - структура Изделия, дерево Операций, Файловый менеджер, программный Процессор, или какой-нибудь Дайджест...