Вопрос по интерфейсу IPointsArrsFromFiles (массив точек из файла)

Автор rusty_cat, 07.02.24, 15:07:33

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

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

rusty_cat

Здравствуйте! Подскажите, пожалуйста, если кто знает, как получить доступ к точкам из массива, в данном случае загруженного из файла?
Дерево модели:

Пытаюсь делать так:
    part7 = kompas_document_3d.TopPart
    f7 = kompas_api7_module.IFeature7(part7) # дерево модели
    EntCol = f7.SubFeatures(0, False, False) # элементы дерева модели
    Last = None
    for e in EntCol: # не знал, как обратиться к последнему, поэтому обошел в цикле
        Last = e
    if (Last.Type in {11183, 11185, 11187}): # проверка, является или нет массивом точек
        kompas_object.ksMessage ('Last is '+str(Last.Type) ) # выводит 11187 - то есть IPointsArrsFromFiles
        ...
    else:
        kompas_object.ksMessage ('Points arr expected')
Дальше начинаются танцы с бубнами. Сконвертировать Last в IKompasCollection или в IModelObjects или в IPointsArrsFromFiles не получается, пишет, что в kompas_api7_module нет таких свойств.
Кроме того, даже если гипотетически я получу доступ к IPointsArrsFromFiles и внутри него к PointsArrFromFile, то там есть только такие вот это -
FileName - Тип точек в файле
PointsType - Тип точек в файле
Symbol - Стиль отображения
То есть, по SDK непонятно, как добраться до точек в принципе.
Заранее благодарю

Михаил88

Screenshot_2.png
surface_container = kompas_api7_module.ISurfaceContainer(part7)
print(surface_container)
mesh_points_surfaces = surface_container.MeshPointsSurfaces
print(mesh_points_surfaces)
mesh_points_surface = mesh_points_surfaces.MeshPointsSurface(0)
print(mesh_points_surface)
rez, x, y, z, w = mesh_points_surface.GetPoint(1, 1)
print(rez, x, y, z, w)

Screenshot_1.bmp
+ Благодарностей: 1

rusty_cat

Цитата: Михаил88 от 07.02.24, 20:51:10surface_container = kompas_api7_module.ISurfaceContainer(part7)
print(surface_container)
mesh_points_surfaces = surface_container.MeshPointsSurfaces
print(mesh_points_surfaces)
mesh_points_surface = mesh_points_surfaces.MeshPointsSurface(0)
print(mesh_points_surface)
rez, x, y, z, w = mesh_points_surface.GetPoint(1, 1)
print(rez, x, y, z, w)
Спасибо за ответ! Но я имел в виду несколько другое. Видимо, картинка моя сбила с толку. Исправляюсь

Мне нужно обработать точки из массива в конце дерева модели, потому что теоретически таких массивов в дереве может быть несколько.
Пример модели - здесь (прикрепить к сообщению так и не смог).
.
Кое в чем удалось сдвинуться. Следим, что называется, за руками.
    part7 = kompas_document_3d.TopPart
    f7 = kompas_api7_module.IFeature7(part7)
    EntCol = f7.SubFeatures(0, False, False)
    Last = None
    for e in EntCol:
        Last = e
    kompas_object.ksMessage ('Last is '+str(Last.Type)+' : '+decodeType(Last.Type) + ' # ' + Last.FileName )
В SDK код 11187 присвоен интерфейсу ksObjectPointsArrsFromFiles (KompasAPIObjectTypeEnum):
...
ksObjectPointsArrFromFile            11186            Группа точек из файла
ksObjectPointsArrsFromFiles          11187            Коллекция групп точек из файлов
В действительности же это - ksObjectPointsArrFromFile, о чем свидетельствует вывод имени файла

Правда, вопрос, где искать точки, остается.


Михаил88

Цитата: rusty_cat от 08.02.24, 00:14:45Но я имел в виду несколько другое. Видимо, картинка моя сбила с толку. Исправляюсь

Да так и есть картинка сбила.

Nipal

Через IPoints3D доступ до всех точек.

+ Благодарностей: 2

rusty_cat

Цитата: Nipal от 08.02.24, 10:47:33Через IPoints3D доступ до всех точек.

Спасибо! Но, похоже, тоже не совсем то.
Может быть, я что-то не понял, но преобразовать IPointsArrFromFile в IPoints3D не получилось:
PP = kompas_api7_module.IPoints3D(Last)Возвращает
Message    File Name    Line    Position   
Traceback               
    <module>    C:\Users\albop\Desktop\albophx-doc\!Все статьи\2024\Компас\24-1.m3m    579       
    __getattr__    C:\ProgramData\ASCON\KOMPAS-3D\21\Python 3\App\lib\site-packages\win32com\client\__init__.py    466       
    _ApplyTypes_    C:\ProgramData\ASCON\KOMPAS-3D\21\Python 3\App\lib\site-packages\win32com\client\__init__.py    459       
com_error: (-2147352573, 'Член группы не найден.', None, None)               
А коллекция Points3D, взятая через интерфейс модели IPart7, мешает в кучу все точки - отдельные, из массивов и др.
.
Решил задачу через дерево модели:
    if (Last.Type in {11183, 11185, 11187}):
        EntCol = Last.Owner.SubFeatures (0, False, False) # подэлементы текущего элемента в дереве
        Count = 0
        for e in EntCol: # здесь каждый e - IPoint3D
            Count += 1
        kompas_object.ksMessage ('Number of children - '+str(Count))
Результат

Однако, 8125 точек извлекает, мягко говоря, не мгновенно.  И это я еще расчеты не делаю ::)

Nipal

+ Благодарностей: 1