Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Autodesk Inventor VBA - има ли разбирачи
http://mcu-bg.com/mcu_site/viewtopic.php?f=14&t=16666
Страница 1 от 1

Автор:  stefan63 [ Вто Юли 23, 2019 6:20 pm ]
Заглавие:  Autodesk Inventor VBA - има ли разбирачи

Няма нищо общо с електрониката , с Бейсик или програмирането.
Два дена се боря с грешка "Тоя обект няма тоя метод" или пък извикванеето на метода крашва подфункция, та чак през една ... Обектите са ... с много потенциални родители и вероятно не избирам коректния родителски обект....Обаче йерархията е много тежка и аз трудно я смилам, пък англофорумът ми е също тъй трудно смилаем....Та ако има някой разбирач, моля, да се обади.
Боря се неща около ClientGraphics.

Автор:  Реконструктор [ Чет Юли 25, 2019 11:07 am ]
Заглавие:  Re: Autodesk Inventor VBA - има ли разбирачи

Е бъди по-конкретен, де.

Автор:  stefan63 [ Чет Юли 25, 2019 8:36 pm ]
Заглавие:  Re: Autodesk Inventor VBA - има ли разбирачи

Ok, утре ще пусна по-конкретен въпрос. :D с картинка.

Автор:  stefan63 [ Пет Юли 26, 2019 4:32 pm ]
Заглавие:  Re: Autodesk Inventor VBA - има ли разбирачи

Опитвам се да оцветя повърхност на сглобено изделие.
Първо намерих пример за оцветяване повърхност на детайл:
Код:
Public Sub PartPicSetFaceColor()
    Dim partDoc As PartDocument
    Set partDoc = ThisApplication.ActiveDocument
   
    ' Check to see if the client graphics already exist and delete them if they do.
    On Error Resume Next
    Dim graphics As ClientGraphics
    Set graphics = partDoc.ComponentDefinition.ClientGraphicsCollection.Item("ColorTest")
    If Err.Number = 0 Then
        graphics.Delete
        ThisApplication.ActiveView.Update
        Exit Sub
    End If
    On Error GoTo 0
   
    Dim selectedFace As Face
    Set selectedFace = ThisApplication.CommandManager.Pick(kPartFaceFilter, "Select a face")
           
    ' They don't exist so create them.
    Set graphics = partDoc.ComponentDefinition.ClientGraphicsCollection.Add("ColorTest")
    Dim node As GraphicsNode
    Set node = graphics.AddNode(1)
   
    ' Create surface graphics using the selected face.
    Dim surfGraphics As SurfaceGraphics
    Set surfGraphics = node.AddSurfaceGraphics(selectedFace)
   
    ' Set the priority so that it will display on top of the real face.
    surfGraphics.DepthPriority = 3
   
    ' Define the color using rgb values.
    surfGraphics.Color = ThisApplication.TransientObjects.CreateColor(255, 10, 10, 1)
   
    ' Refresh the view.
    ThisApplication.ActiveView.Update
End Sub


Резултат :
Part.pdf

После се опитах да променя кода до сглобка Assembly.
Код:
Public Sub M4PicSetFaceColor()
    ''Dim oDoc As PartDocument ''PartDocument was original , variant for part
    Dim oDoc As AssemblyDocument  '' variant for assembly
   
    Set oDoc = ThisApplication.ActiveDocument
   
   
   
       Dim selectedFace As Face
    Set selectedFace = ThisApplication.CommandManager.Pick(kPartFaceFilter, "Select a face")
   
   
    ' Check to see if the client graphics already exist and delete them if they do.
    On Error Resume Next
   
   
    Dim oDataSets As GraphicsDataSets
   
    Dim graphics As ClientGraphics
     
    Dim myidstring As String
    myidstring = "ColorTest13"
     
    '' Set oDataSets = oDoc.GraphicsDataSetsCollection.Item(myidstring)
    ''   If Err.Number = 0 Then
    ''    Call oDataSets.Delete
    ''    ThisApplication.ActiveView.Update
    ''    End If
   
   
    ''variant for part
     Set graphics = oDoc.ComponentDefinition.ClientGraphicsCollection.Item(myidstring)
   
    ''variant for assembly
    ''Set graphics = oDoc.AssemblyComponentDefinition.ClientGraphicsCollection.Item(myidstring)
     
     
    If Err.Number = 0 Then
       
        Call graphics.Delete
        ThisApplication.ActiveView.Update
    End If
    On Error GoTo 0
   

    ' They don't exist so create them.
   
    ''Set oDataSets = oDoc.GraphicsDataSetsCollection.Add(myidstring)
    ''variant for part
    Set graphics = oDoc.ComponentDefinition.ClientGraphicsCollection.Add(myidstring)
   
    ''variant for assembly
    ''Set graphics = oDoc.AssemblyComponentDefinition.ClientGraphicsCollection.Add(myidstring)
   
      Dim oTransientBRep As TransientBRep
        Set oTransientBRep = ThisApplication.TransientBRep
        '' Call oTransientBRep.CreateSurfaceBodyDefinition
   
    Dim node As GraphicsNode
    Set node = graphics.AddNode(1)
   
    Dim oSurfaceGraphics As SurfaceGraphics
   
    Dim oSurfaceBody As SurfaceBody
   
        Set oSurfaceBody = oTransientBRep.Copy(selectedFace)
        ''''  Set oSurfaceGraphics = node.AddSurfaceGraphics(oSurfaceBody) '''same result as below
       Set oSurfaceGraphics = node.AddSurfaceGraphics(oSurfaceBody.Faces.Item(1))
       
   
   
   
    ' Create surface graphics using the selected face.
   
    ''Set surfGraphics = node.AddSurfaceGraphics(selectedFace) ''REMFAILFAIL
      ''THIS FAILS IN VARIANT FOR ASSEMBLY!!
   
   
    ' Set the priority so that it will display on top of the real face.
    oSurfaceGraphics.DepthPriority = 3
    ' Define the color using rgb values.
    oSurfaceGraphics.Color = ThisApplication.TransientObjects.CreateColor(10, 255, 10, 1)
    ' Refresh the view.
    ThisApplication.ActiveView.Update
End Sub


Обаче не става. Спира с грешка на линията с коментар ''REMFAILFAIL.

Четох , променях и стигнах до следния код:

Код:
Dim myidstring As String
Const cmyid As String = "Colortest"


Public Sub M6PicSetFaceColor()
    ''Dim oDoc As PartDocument ''PartDocument was original , variant for part
    Dim oDoc As AssemblyDocument  '' variant for assembly
   
    Set oDoc = ThisApplication.ActiveDocument
   
   
   
       Dim selectedFace As Face
    Set selectedFace = ThisApplication.CommandManager.Pick(kPartFaceFilter, "Select a face")
   
   
    ' Check to see if the client graphics already exist and delete them if they do.
    On Error Resume Next
   
   
    Dim oDataSets As GraphicsDataSets
   
    Dim graphics As ClientGraphics
     
    ''Dim myidstring As String
    myidstring = cmyid '' "ColorTest13"
     
     

   
       Set graphics = oDoc.ComponentDefinition.ClientGraphicsCollection.Item(myidstring)
     
     
    If Err.Number = 0 Then
   
     ''   Call graphics.Delete
        ThisApplication.ActiveView.Update
        Else:
        Set graphics = oDoc.ComponentDefinition.ClientGraphicsCollection.Add(myidstring)
    End If
    ''On Error GoTo 0
   

    ' They don't exist so create them.
   
 
    ''variant for part
    Set graphics = oDoc.ComponentDefinition.ClientGraphicsCollection.Add(myidstring)
   
    ''variant for assembly
    ''Set graphics = oDoc.AssemblyComponentDefinition.ClientGraphicsCollection.Add(myidstring)
    '' run-time error Object doesnt support this property or method
   
      Dim oTransientBRep As TransientBRep
        Set oTransientBRep = ThisApplication.TransientBRep
        '' Call oTransientBRep.CreateSurfaceBodyDefinition
   
    Dim node As GraphicsNode
    Set node = graphics.AddNode(1)
   
    Dim oSurfaceGraphics As SurfaceGraphics
   
    Dim oSurfaceBody As SurfaceBody
   
        Set oSurfaceBody = oTransientBRep.Copy(selectedFace)
        ''''  Set oSurfaceGraphics = node.AddSurfaceGraphics(oSurfaceBody) '''same result as below
       Set oSurfaceGraphics = node.AddSurfaceGraphics(oSurfaceBody.Faces.Item(1))
       
   
   
   
    ' Create surface graphics using the selected face.
   
    ''Set surfGraphics = node.AddSurfaceGraphics(selectedFace)
      ''THIS FAILS IN VARIANT FOR ASSEMBLY!!
   
   
    ' Set the priority so that it will display on top of the real face.
    oSurfaceGraphics.DepthPriority = 3
    ' Define the color using rgb values.
    oSurfaceGraphics.Color = ThisApplication.TransientObjects.CreateColor(10, 255, 10, 1)
    ' Refresh the view.
    ThisApplication.ActiveView.Update
End Sub


Public Sub M6Delete_added()
      myidstring = cmyid
       Dim oDoc As AssemblyDocument  '' variant for assembly
   
    Set oDoc = ThisApplication.ActiveDocument
     
    On Error Resume Next
   
   Set graphics = oDoc.ComponentDefinition.ClientGraphicsCollection.Item(myidstring)
     
     
    If Err.Number = 0 Then
   
        Call graphics.Delete
       ThisApplication.ActiveView.Update
    End If
End Sub




Прикачени файлове:
Коментар на файл: Успешно оцветена повърхност на Part с първия код.
Part.pdf [46.53 KiB]
337 пъти

Автор:  stefan63 [ Пет Юли 26, 2019 4:36 pm ]
Заглавие:  Re: Autodesk Inventor VBA - има ли разбирачи

С последния код на Assembly
се получава странно разположение на копията на повърхностите.

Прикачени файлове:
Коментар на файл: Резултат от третия код.
Assembly12color.pdf [69.43 KiB]
379 пъти

Автор:  Реконструктор [ Пет Авг 09, 2019 2:04 pm ]
Заглавие:  Re: Autodesk Inventor VBA - има ли разбирачи

някаква информация защо гърми няма ли?

Автор:  stefan63 [ Пет Авг 09, 2019 9:28 pm ]
Заглавие:  Re: Autodesk Inventor VBA - има ли разбирачи

Гърми ми главата.
Всъщност ...йерархията е необятна,,,,,а документацията е океан от късчета информация. Океанът е заровен в планини от работещи и неработещи линкове.
Това е мое мнение и не ангажира/оплюва/хвали никого.

В някое късче се споменава, че оцветявам "оригиналната" повърхност - по оригиналния парт/чарк.
Трябваше да измъкна отнякъде матрицата на трансформация - от библиотечния към текущия и да извикам същата трансформация за новата повърхност. Това беше отдавна ...преди 10-15 дни и вече го забравих. Напредвам с по около половин аутодесковска концепция на всеки 3 дни (между другата ми работа, в кафе паузите). Долу-горе със същата скорост ги забравям.

По едно време зададох някакъв въпрос по темата в официалния форум...даже и не ме напсуваха...

Всъщност крайната цел е следната. Имаме тръбни рамки/конструкции(платформи за кантари), проектирани на Инвентор.
Проблемът е - може ли да се изгенерира от тези файлове пътя за ЦНЦ-заваряване.
Борбата продължава.

Автор:  ToHu [ Съб Авг 10, 2019 8:09 am ]
Заглавие:  Re: Autodesk Inventor VBA - има ли разбирачи

Доколкото много хвалят cam модула на ауто деск трябва да може, ама като говориш за път на заварка предполагам визираш манипулатор, що не пробваш със някой специализиран софт.
П. С. ти в модела имаш ли weld bead?

Автор:  stefan63 [ Нед Авг 11, 2019 8:18 pm ]
Заглавие:  Re: Autodesk Inventor VBA - има ли разбирачи

Weld bead добавям шев по шев, не зная друг начин. От една страна е бевно, от друга е добре - имам по-добър контрол.

Автор:  stefan63 [ Нед Авг 11, 2019 8:21 pm ]
Заглавие:  Re: Autodesk Inventor VBA - има ли разбирачи

Всъщност началната цел е почти постигната - предполагам - до 10ина дни да изкарам някакъв суров файл с координати за заваряване - имам план , както се казва. :D

Автор:  ToHu [ Пон Авг 12, 2019 8:53 am ]
Заглавие:  Re: Autodesk Inventor VBA - има ли разбирачи

А ако имаш weld bead не можеш ли само тях да ги вземешеш и по тях да направиш пътя? Може би нещо аз не схващам, ама не вижда какво общо има с оцветяването, или ти го даде като пример?

Автор:  stefan63 [ Пон Авг 12, 2019 10:26 am ]
Заглавие:  Re: Autodesk Inventor VBA - има ли разбирачи

Оцветяването го правя , за да видя ,дали нацелвам правилните обекти и техните компоненти. Хващам един weldbead , работя по него и оцветявам - за да виждам какво пресмятам. Накрая оцветявката ще покаже, докъде съм се ориентирал, какво има да се довършва - на ръка или с код.

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/