Macros

Uma metodologia também utilizada para gerar asas de parâmetros variáveis quer controlados pelo utilizador quer gerados aleatoriamente pelo código VBA desenvolvido, código esse cujas partes principais serão comentadas nesta página.

Sub main()

' Inicialização do Solidworks e do documento

          Set swApp = Application.SldWorks

          Set Part = swApp.ActiveDoc

' Atribuição de um valor à variável chord

           chord = 20.5 

' Início da primeira curva com aplicação da escala (chord)

' Não foi possível multiplicar diretamente as coordenadas da curva pela chord ( boolstatus = Part.InsertCurveFilePoint(0.001*chord ,0*chord, 0*chord) ) pelo que se optou por atribuir o valor da multiplicação a variáveis que foram utilizadas como as coordenadas dos pontos a inserir

           Part.InsertCurveFileBegin

           x = 0.001 * chord: y = 0 * chord: z = 0 * chord

           boolstatus = Part.InsertCurveFilePoint(x, y, z)

           x = 0.00095042 * chord: y = 0.00001245 * chord: z = 0 * chord

            boolstatus = Part.InsertCurveFilePoint(x, y, z)

    ' Continuação dos pontos da primeira curva

            boolstatus = Part.InsertCurveFileEnd() ' Finalização da primeira curva

    ' Início da segunda curva com aplicação da escala (chord)

            Part.InsertCurveFileBegin

            x = 0 * chord: y = 0 * chord: z = 0 * chord

            boolstatus = Part.InsertCurveFilePoint(x, y, z)

            x = 0.00000795 * chord: y = -0.00001017 * chord: z = 0 * chord

            boolstatus = Part.InsertCurveFilePoint(x, y, z)

    ' Continuação dos pontos da segunda curva

            boolstatus = Part.InsertCurveFileEnd() ' Finalização da segunda curva

    ' Visualização nomeada e zoom para ajustar

           Part.ShowNamedView2 "*Trimetric", 8

           Part.ViewZoomtofit2

     ' Criação do sketch no Front Plane

           boolstatus = Part.Extension.SelectByID2("Front Plane", "PLANE", 0, 0, 0, False, 0, Nothing, 0)

           Part.SketchManager.InsertSketch True

     ' Converter cada curva numa entidade de esboço

           boolstatus = Part.Extension.SelectByID2("Curve1", "REFERENCECURVES", 0, 0, 0, False, 0, Nothing, 0)

           boolstatus = Part.Extension.SelectByID2("Curve2", "REFERENCECURVES", 0, 0, 0, True, 0, Nothing, 0)

          Part.SketchManager.SketchUseEdge3 False, False ' Convert curves to sketch entities

      ' Finalizar o sketch

          Part.SketchManager.InsertSketch False

      ' Recuperar o último esboço criado dinamicamente

          Set swSketch = Part.FeatureByPositionReverse(0) ' Get the most recent feature, which should be the sketch

          swSketch.Select2 False, 0

      ' Atribuição de um valor à variável envergadura

          envergadura = 0.1

       ' Execução da extrusão no sketch selecionado considerando que a profundidade dessa extrusão assume o valor da variável envergadura

          Set swFeature = Part.FeatureManager.FeatureExtrusion2(True, False, False, 0, 0, envergadura, 0, False, False, False, False, 0, 0, False, False, False, False, True, True, True, 0, 0, False)

       Part.SelectionManager.EnableContourSelection = False

End Sub

A asa obtida através deste código foi:

De seguida tentámos fazer uma asa que tivesse uma chord da ponta diferente da chord da raiz

' Atribuição de um valor à variável chord2 (chord do airfoil da ponta) 

chord2 = 10.5

' As curvas da ponta assumem z=envergadura

' Início da terceira curva com aplicação da escala (chord2)

     Part.InsertCurveFileBegin

     x = 0.001 * chord2: y = 0 * chord2: z = envergadura

     boolstatus = Part.InsertCurveFilePoint(x, y, z)

     x = 0.00095042 * chord2: y = 0.00001245 * chord2: z = envergadura

     boolstatus = Part.InsertCurveFilePoint(x, y, z)

' Continuação dos pontos da terceira curva

     boolstatus = Part.InsertCurveFileEnd() ' Finalização da terceira curva


' Início da quarta curva com aplicação da escala (chord2) 

     Part.InsertCurveFileBegin

     x = 0 * chord2: y = 0 * chord2: z = envergadura

     boolstatus = Part.InsertCurveFilePoint(x, y, z)

     x = 0.00000795 * chord2: y = -0.00001017 * chord2: z = envergadura

     boolstatus = Part.InsertCurveFilePoint(x, y, z)

' Continuação dos pontos da quarta curva

     boolstatus = Part.InsertCurveFileEnd() ' Finalização da quarta curva


     Set swFeatMgr = swModel.FeatureManager

' Criação de um plano com um offset de valor igual à envergadura a partir do Front Plane de forma a este novo plano ficar coincidente com a terceira e a quarta curva

     boolstatus = swModel.Extension.SelectByID2("Front Plane", "PLANE", 0, 0, 0, False, 0, Nothing, 0)

     Set swPlane = swFeatMgr.InsertRefPlane(8, envergadura, 0, 0, 0, 0) ' Create offset plane 1

' Selecionar o plano novo

     boolstatus = Part.Extension.SelectByID2(swPlane.Name, "PLANE", 0, 0, 0, False, 0, Nothing, 0)

' Criar um sketch no novo plano

     Part.SketchManager.InsertSketch True

' Converter cada curva numa entidade de esboço

     boolstatus = Part.Extension.SelectByID2("Curve3", "REFERENCECURVES", 0, 0, 0, False, 0, Nothing, 0)

     boolstatus = Part.Extension.SelectByID2("Curve4", "REFERENCECURVES", 0, 0, 0, True, 0, Nothing, 0)

     Part.SketchManager.SketchUseEdge3 False, False 

' Finalização do sketch

     Part.SketchManager.InsertSketch False

' Selecione esboços por ordem para fazer o loft

     boolstatus = swModel.Extension.SelectByID2("Sketch1", "SKETCH", 0, 0, 0, False, 1, Nothing, 0)

     boolstatus = swModel.Extension.SelectByID2("Sketch2", "SKETCH", 0, 0, 0, True, 1, Nothing, 0)

' Criação o Lofted Boss

     Set swFeature = swDoc.FeatureManager.InsertProtrusionBlend2(False, True, True, 0, 0, 0, 0, 0, True, True, False, 0, 0, 0, True, True, True, 0)

Infelizmente após diversos esforços não foi possível obter a asa desejada, possivelmente devido ao erro na criação do plano, que quer através do offset quer através de um plano paralelo ao Front Plane fica coincidente com este. 

Caso se resolvesse o erro, seria então feito um mirror do loft segundo o plano frontal. 

' Selecionar o loft para fazer mirror

boolstatus = Part.Extension.SelectByID2(swFeature.Name, "BODYFEATURE", 0, 0, 0, False, 0, Nothing, 0)

' Selecionar o plano de reflexão (Front Plane)

boolstatus = Part.Extension.SelectByID2("Front Plane", "PLANE", 0, 0, 0, True, 0, Nothing, 0)

' Execução do mirror

Set swMirrorFeature = swFeatMgr.InsertMirrorFeature()

O objetivo final (que não foi alcançado devido aos problemas encontrados) era fazer com que o código gerasse uma matriz de asas cujas dimensões eram aleatoriamente geradas.

'Função para obter variação aleatória entre 25% e 125% do valor base

     Function RandomizeRadius(baseValue As Double) As Double

     RandomizeRadius = baseValue * (0.25 + Rnd) 

     End Function

Sub main()

' Inicialização do Solidworks e do documento

     Set swApp = Application.SldWorks

     Set Part = swApp.ActiveDoc

' Definir os parâmetros do modelo

     Dim grid As Integer: grid = 3 ' tamanho da matriz quadrada


   
chord = 20.5 

    chord2 = 10.5 

    envergadura = 0.1 

 ' Definir o tamanho da matriz e distância entre elementos

     Dim gridRows As Integer: gridRows = grid 

     Dim gridCols As Integer: gridCols = grid 

     Dim gridSpacing As Double: gridSpacing = 1 ' Distância dos entre os elementos da matriz (em metros)

' Gerador de números aleatórios

     Randomize

' Loops aninhados para criar vários lofts numa grelha

      Dim i As Integer, j As Integer 

           For i = 0 To gridRows - 1 For j = 0 To gridCols - 1

' Calcular o deslocamento da grelha para a posição atual

                   Dim xOffset As Double: xOffset = i * gridSpacing 

                   Dim yOffset As Double: yOffset = j * gridSpacing

' Continuação do código

     Next j

     Next i

End Sub

Como considerações finais podemos concluir que este método é bastante complexo e pouco intuitivo, pelo que para projetos simples e curtos como este, não compensa utilizar esta metodologia ao invés da tradicional modelação, já que não facilita nem acelera o processo.

    Bruna Santos                        Luísa Pessoa                       Frederico Garcia
brunadossantos@ua.pt                l.pessoa@ua.pt                 fredericogarcia@ua.pt
Desenvolvido por Webnode Cookies
Crie o seu site grátis! Este site foi criado com a Webnode. Crie o seu gratuitamente agora! Comece agora