• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

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

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Как создать полноценный атрибут?

Автор lavgirb, 18.11.23, 19:20:37

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

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

lavgirb

КОМПАС-3D V22
Добавляю атрибут-свойство следующим кодом.
If GetGeomProperty Is Nothing Then
   Set GetGeomProperty = moPropMgr.AddProperty(Empty, Empty)
   With GetGeomProperty
      .UnitId = UnitIdByUnit(sGeomUnit)
      .DataType = ksPropertyDataTypeDouble
      .Name = sPropName
      .ReadOnly = False
      .SetValueRange -1.79769E+302, 1.79769E+302
      .Update
   End With
End If

Как добавить в атрибут поля, обведенные на скриншоте?
Спасибо.

поля.JPG

KrissKross

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

Т.к. в Компасе - работа со свойствами завязана на определение уникального номера свойства
это значит, что каждый раз создавая новое свойство - будет создан новый уникальный номер
соответственно в рамках Компаса - для него этого будет новое свойство - ни как не связанное - даже если совпадают имена свойств
т.е. при построении Отчетов - средствами Компаса - вы не сможете составить выборку по вашему свойству

Для себя выработал следующие правила - Для работы со свойствами
- по максимуму использовать встроенные свойства
- если подходящего свойства нет - создать свойство - вручную в специальном файле - библиотеки свойств с расширением .lpt
и таскать его с программой
- затем при необходимости использования - брать свойство из файла и вставлять в документ
            // Получить свойство в самом документе - Куда входит
            _Property Property_WhereIncludes = propertyManager.GetProperty(document3d, NumberProperty_WhereIncludes);

            if (Property_WhereIncludes is null)
            {
                _Property FileNameOriginalProperty = propertyManager.GetProperty(pathLibrary, NumberProperty_WhereIncludes);

                Property_WhereIncludes = propertyManager.AddProperty(document3d, FileNameOriginalProperty);

                Property_WhereIncludes.Update();

            }

для вашего случая - может подойти свойство - из файла PDM_data.lpt
Свойство Объем.png
+ Благодарностей: 1

lavgirb

KrissKross, я только начал работать со свойствами.
Большое спасибо за рекомендации.

lavgirb

Все оказалось не очень сложно, но и не без труда. Заработало )
Const PDM_DATA_LPT As String = "PDM_data.lpt"
'
ffnLPT = moKO5.ksGetFullPathFromSystemPath(PDM_DATA_LPT, 0) ' sptSYSTEM_FILES
If FileExists(ffnLPT) Then
  vProps = moPropMgr.GetProperties(ffnLPT)
End If
If IsEmpty(vProps) Then Exit Function
'
sNewPropName="Длина"
For Each vProp In vProps
  Set oProp = vProp
  sCurrPropName = oProp.Name
  If StrComp(sCurrPropName, sNewPropName, vbTextCompare) = 0 Then
      Set GetGeomProp = moPropMgr.AddProperty(Empty, vProp) ' Empty !!!
      Exit Function
  End If
Next



А вот вставить название раздела в свойство Раздел спецификации не удается.
Получаем
SetPropertyValue = TrueНо последующее считывание значения дает
vValue = EmptyСвойство не хочет принимать значение. Как такое может быть?

Private Function SetPropertyValue(ByRef oPart7 As KompasAPI7.Part7, _
                                  ByVal dPropId As Double, _
                                  ByVal sPropVal As String) As Boolean
Dim vValue        As Variant
Dim oPropKeeper  As KompasAPI7.IPropertyKeeper
Dim oProp        As KompasAPI7.IProperty
'
SetPropertyValue = False
If Len(sPropVal) = 0 Then Exit Function
If oPart7 Is Nothing Then Exit Function
'
dPropId = 20 ' Раздел спецификации
Set oProp = moPropMgr.GetProperty(Empty, dPropId)
If oProp Is Nothing Then Exit Function
'
sPropVal = "Материалы"
Set oPropKeeper = oPart7
SetPropertyValue = oPropKeeper.SetPropertyValue(oProp, sPropVal, False)
If SetPropertyValue Then
  oProp.Update
  'oPart7.Update
  'oPart7.RebuildModel True
  'oPropKeeper.GetPropertyValue oProp, vValue, False, True
End If
'
End Function