Присвоение сгибу нового радиуса и коэффициента

Автор bionorica2015, 18.05.25, 12:42:34

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

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

bionorica2015

Здравствуйте
Есть такой код:
...
Dim part As KompasAPI7.iSheetMetalContainer
Set part = doc.TopPart

Dim sheetbends As KompasAPI7.SheetMetalBends
Set sheetbends = part.SheetMetalBends
                 
           
Dim sheetbendscount As Long
sheetbendscount = sheetbends.count

For i = 0 To sheetbendscount - 1     
     With sheetbends.SheetMetalBend(i)
        .BendCoefficient = 0.4
        .radius = 1.5
        .Update
     End With
Next i
...
Почему сгибу не присваиваются новый радиус и коэффициент?
Самое интересное это то, что если у радиуса и у коэффициента стоят переменные, то не присваиваются, а если просто цифры то этот код работает.
Версия Компаса v16
+ Благодарностей: 1

Михаил88


bionorica2015

Цитата: Михаил88 от 18.05.25, 15:20:37Можно тогда через переменные изменять.
Переменные в коде или переменные в редакторе переменных(Fx)?

Михаил88

Те что в компасе их можно тоже менять через api. Я говорю про дерево переменных.


Михаил88

sheet_metal_bends = sheet_metal_container.SheetMetalBends
sheet_metal_bend = sheet_metal_bends.SheetMetalBend(4)

sheet_metal_bend.Radius = 1.5
sheet_metal_bend.BendCoefficient = 0.5

sheet_metal_bend.Update()

проверил в компас 18.1 работает нормально

Михаил88

Цитата: Михаил88 от 18.05.25, 16:30:43Те что в компасе их можно тоже менять через api. Я говорю про дерево переменных.
Обходной вариант.

feature7 = sheet_metal_bend.Owner
variables = feature7.Variables(False, False)
for variable in variables:
    parameter_note = variable.ParameterNote
    if parameter_note == "Коэффициент":
        variable.Value = 0.4
part7.Update()
part7.RebuildModel(True)
kompas_document_3d.RebuildDocument()

Если нужно сохранить ссылку на переменную, тогда получаем имя переменной, которое стоит в выражении для переменной, отвечающей за коэф. или радиус, и потом уже меняем значение в самой переменной. Если ссылка на переменную не нужна, тогда можно изменить так, как я написал выше.
+ Благодарностей: 1

bionorica2015

Цитата: Михаил88 от 18.05.25, 17:12:28Обходной вариант.

feature7 = sheet_metal_bend.Owner
variables = feature7.Variables(False, False)
for variable in variables:
    parameter_note = variable.ParameterNote
    if parameter_note == "Коэффициент":
        variable.Value = 0.4
part7.Update()
part7.RebuildModel(True)
kompas_document_3d.RebuildDocument()

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

Этот вариант хорош но мне нужно именно через

sheet_metal_bends = sheet_metal_container.SheetMetalBends
sheet_metal_bend = sheet_metal_bends.SheetMetalBend(4)

sheet_metal_bend.Radius = 1.5
sheet_metal_bend.BendCoefficient = 0.5

sheet_metal_bend.Update()
Но этот код и мой не меняют коэфф и радиусы:
...
Dim part As KompasAPI7.iSheetMetalContainer
Set part = doc.TopPart

Dim sheetbends As KompasAPI7.SheetMetalBends
Set sheetbends = part.SheetMetalBends
                 
           
Dim sheetbendscount As Long
sheetbendscount = sheetbends.count

For i = 0 To sheetbendscount - 1     
     With sheetbends.SheetMetalBend(i)
        .BendCoefficient = 0.4
        .radius = 1.5
        .Update
     End With
Next i
...

Вообщем странно почему не получается менять R и K через iSheetMetalContainer

bionorica2015

Убрал .Update() теперь присваиваются новые радиусы и коэфф. но вот как (см. скрин)
Скрин: https://cloud.mail.ru/public/gtiE/kB6ommzYo

То есть и старые и новые радиусы и коэфф. остаются - точнее приравниваются друг другу)))

Михаил88

А Вы уверены, что вы правильно  iSheetMetalContainer получаете?

bionorica2015


bionorica2015

Цитата: Михаил88 от 18.05.25, 17:53:30А Вы уверены, что вы правильно  iSheetMetalContainer получаете?

Вот поменял как надо, но всё равно радиус и коэфф не меняются.
         Dim doc As KompasAPI7.KompasDocument
         Set doc = docs.Open(ThisFolder & "\" & ThisFile, True, False)
         ThisFile = Dir


         Dim doc3d As KompasAPI7.KompasDocument3D
         Set doc3d = doc
         
         Dim part3d As Part7
         Set part3d = doc3d.TopPart

         Dim sheetMetalContainer As KompasAPI7.iSheetMetalContainer
         Set sheetMetalContainer = part3d

         Dim sheetbends As KompasAPI7.SheetMetalBends
         Set sheetbends = sheetMetalContainer.SheetMetalBends

Михаил88

Делайте обходным путем, как я написал да и все. Я же писал, что в к18.1 работает. Значит возможно в к16 ошибка в API.

p3452

Все-таки кодеры на Python и Basic могут себе позволить СЛИШКОМ много вольностей...

Например, на C# код из поста №1 - гарантированные ошибки...
Но если подправить немного:
- явное приведение типа на каждом шаге,
- не radius, а Radius,
- не Update, а Update()
то код, вполне, заработает и на C#...

bionorica2015

Цитата: p3452 от 18.05.25, 19:15:49Все-таки кодеры на Python и Basic могут себе позволить СЛИШКОМ много вольностей...

Например, на C# код из поста №1 - гарантированные ошибки...
Но если подправить немного:
- явное приведение типа на каждом шаге,
- не radius, а Radius,
- не Update, а Update()
то код, вполне, заработает и на C#...
VBA сам подправляет на нижний регистр и убирает скобки...


ЦитироватьВек живи - век учись, всё равно дураком помрёшь.
+ Благодарностей: 1

bionorica2015

Цитата: Михаил88 от 18.05.25, 18:52:33Делайте обходным путем, как я написал да и все. Я же писал, что в к18.1 работает. Значит возможно в к16 ошибка в API.
Все равно найду причину, сдаться- это не моё. Не может быть так что не получится изменить радиусы и коэффициенты сгибов в К16
+ Благодарностей: 1

p3452

bionorica2015 - Да Вы, "братец" - ХАМ!"
Ну, с этим "клеймом" и "живите"...

lavgirb

Цитата: bionorica2015 от 18.05.25, 19:20:42VBA сам подправляет на нижний регистр...
Есть такое дело. Некоторые свойства и методы меняют регистр.
Тому есть причины, предположительные.
Но VBA - регистронезависмый язык. И регистр свойств и методов не изменяет их работу.

bionorica2015

#17
Цитата: Михаил88 от 18.05.25, 16:52:20sheet_metal_bends = sheet_metal_container.SheetMetalBends
sheet_metal_bend = sheet_metal_bends.SheetMetalBend(4)

sheet_metal_bend.Radius = 1.5
sheet_metal_bend.BendCoefficient = 0.5

sheet_metal_bend.Update()

проверил в компас 18.1 работает нормально
Попробовал в 21, 22, 23 версиях -не работает(
Точнее до Update вроде как присваивается, но после Update возвращается к исходным значениям. До Update происходит такое присвоение: например  должен присвоить 0.4. У меня в коэффициенте стоит SM_K и он равен 0.35. В ячейке коэффициента такая запись: 0.4=SM_K +0.05 )))
Может если в ячейке стоит переменная нужно как-то сбрасывать через какой-то метод?!

p3452


Михаил88

Цитата: bionorica2015 от 20.05.25, 18:49:21Попробовал в 21, 22, 23 версиях -не работает(
Точнее до Update вроде как присваивается, но после Update возвращается к исходным значениям. До Update происходит такое присвоение: например  должен присвоить 0.4. У меня в коэффициенте стоит SM_K и он равен 0.35. В ячейке коэффициента такая запись: 0.4=SM_K +0.05 )))
Может если в ячейке стоит переменная нужно как-то сбрасывать через какой-то метод?!


Работает и в 16.1 и в 18.1, но с оговоркой, как выяснилось. Если создать сгиб и сразу подтвердить создание не меняя длину то работает. Если поменять длину вручную через редактирование сгиба то перестает работать.