Не удается построить круговой массив компонентов

Автор anton_cher93, 02.02.18, 16:52:07

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

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

anton_cher93

Не получается программно создать круговой массив компонентов в сборке! Все свойства вроде задал верно, но после Update() массив не создается. Может пропустил что? Ниже приведен код.


IApplication KompasAp = (IApplication)ikompas.ksGetApplication7();
            IDocuments Docs = (IDocuments)KompasAp.Documents;

            KompasDocument3D Sborka = null;
            IPart7 detail;
            IParts7 parts = null;

            //Открываем сборку
            Sborka = (KompasDocument3D)Docs.Open("D:\\Сборка.a3d", true, false);

            detail = Sborka.TopPart.Parts.get_Part(0);

            IModelContainer modelCont = (IModelContainer)Sborka.TopPart;

            //Добавляем массив по концентрической сетке
            ICircularPattern Massiv = (ICircularPattern)modelCont.FeaturePatterns.Add(ksObj3dTypeEnum.o3d_circPartArray);
           
            //указываем ось
            Massiv.Axis = Sborka.TopPart.get_DefaultObject(ksObj3dTypeEnum.o3d_axisOZ);

            // Указываем объект массива - деталь
            Massiv.InitialObjects = detail;

            Massiv.Count1 = 3;

            Massiv.Count2 = 1;

            //Угловой шаг
            Massiv.Step2 = 60.0;

            Massiv.Update();


            Sborka.RebuildDocument();

Суда  Massiv.InitialObjects нужно передавать интерфейс IDispatch или массив интерфейсов IDispatch.

anton_cher93

как из объекта IPart7 получить интерфейс IDispatch?


anton_cher93

Для массива по концентрической сетке нужно задавать свойство BasePoint? И если нужно, то что туда посылать? Пробовал послать начало координат для IPart7 detait, но свойство остается пустым.

Получить точку, IModelObject:=IPart7.DefaultObject(o3d_pointCS);, только наверно от сборки, просто я не знаю, как у Вас детали расположены.

anton_cher93

В общем, привожу компонент к интерфейсу IDispach, но построить массив все равно не удается

detail = Sborka.TopPart.Parts.get_Part(0);

            IModelContainer modelCont = (IModelContainer)Sborka.TopPart;

           
            // ЗАДАЕМ ТИПА МАССИВА
            //Добавляем массив по концентрической сетке
            ICircularPattern Massiv = (ICircularPattern)modelCont.FeaturePatterns.Add(ksObj3dTypeEnum.o3d_AuxCircularCopy);

            //Приводим компонент к интерфейсу IDispatch
            stdole.IDispatch obIDispatch = (stdole.IDispatch)detail;

            Massiv.BuildingType = ksCircularPatternBuildingTypeEnum.ksCPSaveAll;

            Massiv.InitialObjects = obIDispatch;

Свойство Massiv.InitialObjects после присвоения все рано остается пустым.


anton_cher93