Считывание данных с kompas v16

Автор zeratul, 28.10.15, 12:58:13

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

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

zeratul

Добрый день! Подскажите пожалуйста, как можно программно считать количество сопряжений? количество операций?

IMateConstraintCollection.GetCount - получить количество элементов в массиве сопряжений.
IFeature7.SubFeatures - коллекция элементов дерева заданного типа в виде массива SAFEARRAY.
+ Благодарностей: 1

zeratul

Спасибо получилось!
Еще подскажите пожалуйста как в чертеже программно считать следующее

-Количество выносок (размер, позиционное обозначение, линии выноски, обозначение шероховатости, обозначение сварного шва, клеймение, маркировка)
-Количество разрезов, видов, разверток
-Количество строк таблицы

ITable.RowsCount - Количество строк.
Views.Count - количество видов.
View.ViewType - тип вида.
В свойствах ISymbols2DContainer найдёте количество:
AngleDimensions - Угловые размеры
ArcDimensions- Размеры дуг окружностей
AssociationTables - Ассоциативные таблицы отчетов
AxisLines - Коллекция осевых линий
Bases - Обозначения базы
BreakLineDimensions - Линейные размеры с обрывом
BreakRadialDimensions - Радиальные размеры с изломом
BrokenLines - Коллекция линий обрыва с изломами
CentreMarkers - Коллекция обозначений центра
CutLines - Линии разреза/сечения
DiametralDimensions - Диаметральные размеры
DrawingTables - Таблицы
HeightDimensions - Размеры высоты
Leaders - Линия-выноска
LineDimensions - Линейные размеры
RadialDimensions - Радиальные размеры
RemoteElements - Коллекция выносных элементов
Roughs - Обозначения шероховатости
Tolerances - Допуск формы
ViewPointers - Стрелки взгляда
WaveLines - Коллекция волнистых линий

zeratul

Добрый день! Подскажите пожалуйста, как можно программно считать количество операций?
Я использую Document3d

Можно использовать IModelContainer для API7 и ksPart.EntityCollection для API5, и считать сколько каких операций в коллекции.
+ Благодарностей: 1

zeratul

Добрый день!
Пробую считать количество строк в таблице через API 7 Интерфейс Document2D.

Делаю это всё в 1С.

      

ActiveDocument = kompas_v7.Documents.open(ПутьЧертежа,FALSE,True);
      If ActiveDocument.Active Then
         //Чертеж cdw
         Views = ActiveDocument.ViewsAndLayersManager.Views;
         КоличествоВидов = Views.Count;
         
         Для j=0 по Views.Count-1 Цикл
            
            View = Views.ViewByNumber;

         КонецЦикла;
         
         //iView = ActiveDocument.ViewsAndLayersManager.Views[0];
      EndIf;
[/pre]
      
Views.ViewByNumber - вот здесь не возвращается ничего....в чем может быть причина?

Так номер вида укажите, который хотите получить.
View:=Views.ViewByNumber[J];

zeratul

так тоже не получается...


zeratul

тоже пусто...такое ощущение что в чертеже ничего нет...сейчас попробую его в компасе посмотреть

Он может быть фрагментом, если у Вас стоит фильтр пути, читать только расширение CDW, то должен быть по любому системный вид.

zeratul

чертеж есть, в компасе открылся....
вот скрин из 1С объектом Views
http://prntscr.com/cst43j

Я по ссылкам не хожу, прикрепите картинку тут.

zeratul

скрин во вложении

Views.ViewByNumber - должна возвращать по номеру вида, а
Views.View - по номеру в коллекции начиная с нуля.
По картинке у Вас четыре вида, методы должны работать, правда в 1С я не работал, не знаю, как там переменные определяются, но я бы Views определил, как pViews и т.д., чтобы точно знать, что ссылаюсь именно на ту переменную.
PS. Конечно может быть и глюк 1С.

zeratul

Добрый день! Подскажите пожалуйста не получается считать количество операций в детале.
Использую следующий код


Active = kompas_v5.Document3d.open(Объект.Path,True);
If Active Then

iTopPart = kompas_v5.ksGetApplication7.ActiveDocument.TopPart;
iModel = iTopPart.ModelContainer;


EndIf;


#programmer

Так можно получить все элементы модели и, в зависимости от типа, отобрать нужные. (C#)

KompasObject ikompas =(KompasObject) Marshal.GetActiveObject("Kompas.Application.5");
            ksDocument3D idoc3d = ikompas.ActiveDocument3D();
            if (idoc3d != null)
            {             
                ksPart prt = idoc3d.GetPart((int)Kompas6Constants3D.Part_Type.pTop_Part);
                if (prt != null)
                {
                    ksEntityCollection col = prt.EntityCollection(0);                   
                    int colcount = col.GetCount();
                    for (int i = 0; i < colcount; i++)
                    {
                        ksEntity ent = col.GetByIndex(i);
                        string name = ent.name;                       
                        if (!string.IsNullOrWhiteSpace(name))
                            richTextBox1.AppendText(string.Format("Name = {0} ; Type = {1}\n", name, (Kompas6Constants3D.ksObj3dTypeEnum)ent.type));
                    }
                }
                else MessageBox.Show("part is null!");
            }

zeratul

iTopPart.ModelContainer

ничего не возвращает...

а вот когда считываю сборку

         If doc3D.IsDetail()<> 1 Then
            Для j = 0 По PColl.GetCount() - 1 Цикл
               iPart = doc3D.GetPart(j);
               If iPart.excluded Then
                  Continue;
               EndIf;
               КоличествоОпераций = iPart.EntityCollection(0).getcount();

         КонецЕсли;

то тут всё нормально считывается из деталей