Почему не работает свойство InstanceDeletedIndexes у IFeaturePattern?

Автор MasterMVC, 24.05.20, 13:48:02

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

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

MasterMVC

Пытаюсь исключить ненужные экземпляры из массива через API. В идеале задача оставить только первый экземпляр массива.
Почему не работает свойство InstanceDeletedIndexes у IFeaturePattern на присваивание(set)? На получение(get) показывает правильно.
Передаю массив int индексов в свойство IFeaturePattern.InstanceDeletedIndexes=int[]; но экземпляры остаются видимыми. Индексы существующие. featurePattern не равно null.
Код на C#:
  IFeaturePattern featurePattern;
  int[] arrrint=new int[]{2,1};
  featurePattern.InstanceDeletedIndexes=arrrint;
  featurePattern.Update();

Это очередной косяк компаса? Или есть решение скрыть экземпляры?

Slaviation

Проверил у себя в КОМПАС-3D v18.1 на Python линейный массив.
Экземпляры скрываются.

import pythoncom
from win32com.client import Dispatch, gencache, VARIANT

#  Получи константы
kompas6_constants = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
kompas6_constants_3d = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0).constants

#  Получи API интерфейсов версии 5
kompas6_api5_module = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
kompas_object = kompas6_api5_module.KompasObject(Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(kompas6_api5_module.KompasObject.CLSID, pythoncom.IID_IDispatch))

#  Получи API интерфейсов версии 7
kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
kompas_api_object = kompas_api7_module.IKompasAPIObject(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IKompasAPIObject.CLSID, pythoncom.IID_IDispatch))
application = kompas_api_object.Application

#  Получи интерфейс активного документа
kompas_document = application.ActiveDocument

#  Создай объект модели "Массив операций по сетке"
kompas_document_3d = kompas_api7_module.IKompasDocument3D(kompas_document)
part7 = kompas_document_3d.TopPart
model_container = kompas_api7_module.IModelContainer(part7)
feature_patterns = model_container.FeaturePatterns
linear_pattern = kompas_api7_module.ILinearPattern(feature_patterns.Add(kompas6_constants_3d.o3d_meshCopy))

arr = []
arr.append(model_container.Objects(kompas6_constants_3d.o3d_bossExtrusion)[0])
linear_pattern.InitialObjects = arr

linear_pattern.Axis1 = model_container.Objects(kompas6_constants_3d.o3d_sketch)[0]

linear_pattern.Angle2 = 90.0
linear_pattern.Name = "Массив по сетке:1"
linear_pattern.Direction1 = True
linear_pattern.Direction2 = True
linear_pattern.Step1 = 40.0
linear_pattern.Step2 = 40.0
linear_pattern.BoundaryInstancesStepFactor1 = False
linear_pattern.BoundaryInstancesStepFactor2 = False
linear_pattern.Count1 = 5
linear_pattern.Count2 = 4
linear_pattern.BuildingType = kompas6_constants_3d.ksLPSaveAll
linear_pattern.GeometryPattern = False
linear_pattern.InstanceDeletedIndexes = (2, 3, 4, 2)
linear_pattern.Update()
+ Благодарностей: 1

MasterMVC

Цитата: Slaviation от 25.05.20, 08:37:14Проверил у себя в КОМПАС-3D v18.1 на Python линейный массив.
Экземпляры скрываются.

Возможно я не так выразился. Но надо скрывать экземпляры у существующего массива. То есть конструктор создал массив через графический интерфейс. Не работает проверьте!
С уважением.

Vi2

Попробуй следующую фенечку: скрой вручную пару экземпляров, получи от паттерна этот массив, замени на нужные тебе экземпляры и передай обратно. Если не сработает, тогда проблема. Если сработает, то 1) неправильно передаётся тип массива, 2) паттерн не допускает скрытие.