Перейти к публикации

Новичок в API


Рекомендованные сообщения

Добрый день.

Подскажите пожалуйста, как посмотреть логи подключения библиотеки к Компасу?

По совету интернетов, собрал "Step2" из SDK. Но при подключении к Компасу - ругань.

Скрытый текст

K62pEDY7QO.png

Через панельку ActiveX тоже не работает. Хотя там в списке библиотека есть

Удалил библиотеку из конфигурации.

Попробовал просто добавить через ActiveX - ошибка и список пуст.

Изменено пользователем streamdown
Ссылка на сообщение
Поделиться на других сайтах


UnPinned posts
46 минут назад, streamdown сказал:

А вы попробуйте туда подсунуть part7

Фрагмент перебора массива с элементами сборки

Dim docKomp7 As KompasAPI7.Documents= gAppAccess7.Documents 'интерфейс документов

Dim nP As KompasAPI7.Part7

For z = 0 To UBound(mPartSBexALL) 'UBound(mPartSBex)
            nP = mPartSBexALL(z) ' mPartSBex(z)
            nK = sbMod.InstanceCount(nP)
            ReDim Preserve masPartALL(masPartALL.GetUpperBound(0) + 1)
            masPartALL(masPartALL.GetUpperBound(0)) = nP
            nFeat = nP
            propKeep = nP 'для чтения свойств
            Dim mKomp As Object = propMn.GetProperties(docKomp7.Item(nP.FileName))
            Dim sTyp As String = readPropKMP(mKomp, 20, "Раздел спецификации")
            If sTyp Is Nothing Then
                If nP.Standard Then sTyp = "Стандартные изделия" Else sTyp = "Детали" 'не всегда раздел присвоен явно в компасе
            End If
            Dim sNumber As String = readPropKMP(mKomp, 4)

.....

 

Ссылка на сообщение
Поделиться на других сайтах
44 минуты назад, kvin сказал:

readPropKMP(mKomp, 20, "Раздел спецификации")

Это я так понял с указанием имени. А если я их не знаю? Т.е. хочу все перебрать

45 минут назад, kvin сказал:

readPropKMP

вот это можете ещё показать? Пожалуйста.

Ссылка на сообщение
Поделиться на других сайтах
15 часов назад, streamdown сказал:

Это я так понял с указанием имени. А если я их не знаю? Т.е. хочу все перебрать

Это функция получения конкретного свойства из массива. Вывод всех свойств аналогичен...

 

Function readPropKMP(ByVal mArProp As Object, ByVal ID As Double, Optional ByVal sN As String = "") As Object
        'читаем свойство из массива свойств mArProp
        'ID=4 - обозначение; 5 - Наименование ; 9 - материал; 10 - плотность кг/м.куб
        '15 - позиция; 20 - раздел спецификации
        '21 - разработал; 22 - проверил; 23 - утвердил; 24 - т.контроль; 25 - н.контроль
        'Типоразмер(173984476184)
        Dim nProp As KompasAPI7._Property 'свойство
        Dim z As Integer
        Dim sVal As Object = Nothing
        Dim sF As Boolean
        For z = 0 To UBound(mArProp)
            nProp = mArProp(z)
            If nProp.Id = ID Or nProp.Name = sN Then
                If propKeep.GetPropertyValue(nProp, sVal, True, sF) Then
                    readPropKMP = sVal '+ sF.ToString.ToUpper
                Else
                    readPropKMP = Nothing
                End If
                Exit Function
            End If
        Next
        readPropKMP = Nothing
    End Function

Ссылка на сообщение
Поделиться на других сайтах

@kvin добрый день. Подскажите пожалуйста


 

IPropertyMng propertyManager = (IPropertyMng) app;

IPart7 part;// Компонент, полученный при переборе сборки

var propertyKeeper = (IPropertyKeeper) part;

//перебираем все свойства, полученные от  propertyManager.GetProperties

...

var prp = (_Property) prop;

propertyKeeper.SetPropertyValue(prp, founded.Name, true);

 

При таком способе задания, свойства попадают на уровень компонентов сборки, но если открыть отдельно деталь, то там этих свойств нет. Так и задумано?

Изменено пользователем streamdown
Ссылка на сообщение
Поделиться на других сайтах
10 часов назад, streamdown сказал:

При таком способе задания, свойства попадают на уровень компонентов сборки, но если открыть отдельно деталь, то там этих свойств нет. Так и задумано?

Да вот такое странное поведение Компаса

 

Компас - хранит (зачем-то) 2 значения основных свойств - одно принадлежит сборке другое детали

отсюда сделаем несколько пояснений:

1. Для синхронизации свойств из ДСЕ в сборку (только в этом направлении) - есть кнопка - По источнику

По источнику.png

 

2. Возможная причина появления - использование одной ДСЕ  в разных сборках с разными свойствами

насколько помню такое поведение обсуждалось в ветке SW

как по мне, такое поведение - требуется крайне редко и может приводить к рассогласованию значению свойств

т.е. ИМХО больше вреда чем пользы

 

Совет

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

Ссылка на сообщение
Поделиться на других сайтах

ИМХО это сделано по причине возможности использования внешних переменных Компаса. 

Ссылка на сообщение
Поделиться на других сайтах
30.04.2022 в 10:11, streamdown сказал:

Так и задумано?

Да, файл может быть один а компонентов сборки несколько (разные наименования и обозначения). Пока не присвоишь всем одинаковое Обозначение - это различные компоненты для Спецификации...

Я назначаю свойства так:

Скрытый текст

 

Public Sub KMP_AtrWriteFile(ByRef spath As String, Optional ByVal bWrite2File As Boolean = False)
        'запись атрибутов в файл компаса: bWrite2File = true - писать свойства и файла модели; false - писать свойства только компонента
        'одинаковых компонентов может быть много, а файл один
        With Glavnaa
            For z As Integer = 0 To masPartALL.GetUpperBound(0)
                If masPartALL(z).FileName = spath Then
                    propKeep = masPartALL(z)
                    'это запись свойств Компонента
                    Dim mArProp As Object = propMn.GetProperties(docKomp7.Item(masPartALL(z).FileName)) '(documentK7) 'массив свойств
                    'наименование .Текст1.Text
                    NewProperti(mArProp, 5, PastPointAtr(.Текст1.Text))
                    'обозначение PastPointAtr(.Текст2.Text)
                    NewProperti(mArProp, 4, PastPointAtr(.Текст2.Text))
                    'мат.обозначение
                    NewProperti(mArProp, 9, PastPointAtr(.Текст4.Text))
                    'плотность
                    NewProperti(mArProp, 10, 7800)
                    ' теперь тоже самое для файла модели
                    If bWrite2File Then
                        Dim docModel As KompasAPI7.IKompasDocument3D
                        docModel = docKomp7.Open(spath, False) 'открываем нужный документ
                        Dim part7 As KompasAPI7.IPart7 = docModel.TopPart
                        propKeep = part7
                        If Not docModel Is Nothing Then
                            mArProp = propMn.GetProperties(docModel) 'массив свойств
                            'наименование .Текст1.Text
                            NewProperti(mArProp, 5, PastPointAtr(.Текст1.Text))
                            'обозначение PastPointAtr(.Текст2.Text)
                            NewProperti(mArProp, 4, PastPointAtr(.Текст2.Text))
                            'мат.обозначение
                            NewProperti(mArProp, 9, PastPointAtr(.Текст4.Text))
                            'плотность
                            NewProperti(mArProp, 10, 7800)
                            'закрываем файл
                            docModel.Close(Kompas6Constants.DocumentCloseOptions.kdSaveChanges)
                        End If
                    End If
                End If
            Next
        End With
    End Sub

 

 Public Sub NewProperti(ByVal mArProp As Object, ByVal ID As Integer, ByVal sNew As Object, Optional ByVal sName As String = "")
        'смена свойства
        'ID=4 - обозначение; 5 - Наименование ; 9 - материал; 10 - плотность кг/м.куб
        '15 - позиция; 20 - раздел спецификации
        '21 - разработал; 22 - проверил; 23 - утвердил; 24 - т.контроль; 25 - н.контроль
        Dim nProp As KompasAPI7._Property 'свойство
        Dim sProp = Nothing 'значение свойства
        Dim z As Integer
        For z = 0 To UBound(mArProp)
            nProp = mArProp(z)
            If nProp.Id = ID Or nProp.Name = sName Then
                If nProp.ReadOnly Then
                    nProp.ReadOnly = False
                    nProp.Update()
                End If
                Dim erB As Boolean
                erB = propKeep.SetPropertyValue(nProp, sNew, True)
                If erB = False Then
                    Debug.Print(nProp.Name & " - ОШИБКА ЗАПИСИ")
                End If
                nProp.Update()
                Exit Sub
            End If
        Next
    End Sub

 

 

Ссылка на сообщение
Поделиться на других сайтах

Добрый день.

А как можно добраться до переключения вида связи свойства у компонента сборки?

Скрытый текст

KOMPAS_R501wdhKlK.png

И сразу вопрос: свойства в Компасе есть и простые и сложные?

К примеру, "Раздел спецификации" - это просто текст или чтоб его обновить у компонента нужно сначала правильно это свойство создать кодом и потом присвоить компоненту?

04.05.2022 в 08:45, kvin сказал:

Я назначаю свойства так:

Понял. Погуглил ещё. Свойства для входящих обычно вносят редактируя этот компонент.

Ссылка на сообщение
Поделиться на других сайтах
  • 2 недели спустя...
04.05.2022 в 08:45, kvin сказал:

20 - раздел спецификации

Подскажите пожалуйста, а как вы устанавливаете значение для этого свойства? Просто текст туда вроде не подходит.

Ссылка на сообщение
Поделиться на других сайтах
45 минут назад, streamdown сказал:

как вы устанавливаете значение для этого свойства?

Читать читаю, а изменять не было пока необходимости... Если удастся изменить, расскажите как ))

Ссылка на сообщение
Поделиться на других сайтах
  • 3 месяца спустя...

Как настроить отображение точек после номера пункта в технических требованиях через API? 

Ссылка на сообщение
Поделиться на других сайтах
  • 8 месяцев спустя...
29.08.2022 в 13:20, kvin сказал:

Как настроить отображение точек после номера пункта в технических требованиях через API? 

Если ТТ вставляются программно, можно программно проставлять и номера пунктов и точки к ним.

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




×
×
  • Создать...