Visualização

O módulo geomez-visualization estende cada tipo do core com dois métodos de renderização, suportados pelo Python matplotlib via bridge matplotlib4k.


Configuração

Adicione o módulo às suas dependências (veja Instalação) e certifique-se de que o Python com matplotlib está disponível no seu PATH:

pip install matplotlib

API de dois métodos

Cada tipo geométrico recebe duas funções de extensão:

Método Descrição
.plot(...) Plot rápido independente — abre uma janela matplotlib imediatamente
.addPlotCommands(figure?, axes?, ...) Adiciona comandos de desenho a um par figura/eixos existente (ou novo); retorna Pair<Figure, Axes>

Plots rápidos

Cada tipo abre uma janela matplotlib com valores padrão adequados:

// 2D
point2DList.plot()
polygon.plot()
bezierCurve.plot()
cubicSpline.plot()
parametricCurve.plot()
vector2D.plot()
direction2D.plot()
coordinateSystem2D.plot()

// 3D
points3DList.plot()
vector3D.plot()
direction3D.plot()
coordinateSystem3D.plot()
parametricSurface.plot()

Compondo múltiplos elementos

Use addPlotCommands() para sobrepor elementos em uma única figura. Todas as chamadas retornam Pair<Figure, Axes> para que você possa encadeá-las:

import io.github.danielTucano.matplotlib.pyplot.show
import io.github.danielTucano.python.pythonExecution
import plane.BezierCurve
import plane.CoordinateSystem2D
import plane.Polygon2D
import plane.elements.Point2D

pythonExecution {
    val poligono = Polygon2D(listOf(
        Point2D(0.0, 0.0),
        Point2D(2.0, 0.0),
        Point2D(1.0, 2.0)
    ))

    val bezier = BezierCurve(listOf(
        Point2D(0.0, 0.0),
        Point2D(0.5, 1.5),
        Point2D(1.5, 1.5),
        Point2D(2.0, 0.0)
    ))

    // Primeira chamada cria a figura e os eixos
    val (fig, ax) = poligono.addPlotCommands()

    // Chamadas seguintes os reutilizam
    bezier.addPlotCommands(fig, ax)
    CoordinateSystem2D.MAIN_2D_COORDINATE_SYSTEM.addPlotCommands(fig, ax)

    show()
}

Composição 3D

Plots 3D funcionam exatamente da mesma forma. Os eixos retornados são uma instância de Axes3D:

import io.github.danielTucano.matplotlib.pyplot.show
import io.github.danielTucano.python.pythonExecution
import space.CoordinateSystem3D
import space.elements.Direction3D
import space.elements.Point3D
import space.elements.Vector3D

pythonExecution {
    val v = Vector3D(1.0, 0.0, 1.0, position = Point3D(1.0, 1.0, 1.0))
    val (fig, ax) = v.addPlotCommands()

    Direction3D.MAIN_Z_DIRECTION.addPlotCommands(fig, ax)
    CoordinateSystem3D.MAIN_3D_COORDINATE_SYSTEM.addPlotCommands(fig, ax)

    show()
}

Opções de plot do BezierCurve

As funções de plot do BezierCurve aceitam um parâmetro tList para controlar a densidade de amostragem:

import utils.linspace

// Maior resolução
bezierCurve.plot(tList = linspace(0.0, 1.0, 500))

// Ou ao compor
bezierCurve.addPlotCommands(fig, ax, tList = linspace(0.0, 1.0, 500))

O plot sempre renderiza o polígono de controle (tracejado) ao lado da curva.


Extensões disponíveis

Arquivo Tipos cobertos
plane/bezierCurveExtensions.kt BezierCurve
plane/cubicSplineExtensions.kt CubicSpline
plane/parametricCurve2DExtensions.kt ParametricCurve2D
plane/piecewiseCubicBezierCurveExtensions.kt CubicBezierSpline2D
plane/polygon2DExtensions.kt Polygon2D
plane/point2DListExtensions.kt List<Point2D>
plane/vector2DExtensions.kt Vector2D
plane/direction2DExtensions.kt Direction2D
plane/coordinateSystem2DExtensions.kt CoordinateSystem2D
space/parametricCurve3DExtensions.kt ParametricCurve3D
space/parametricSurface3DExtensions.kt ParametricSurface3D
space/points3DListExtensions.kt List<Point3D>
space/vector3DExtensions.kt Vector3D
space/vector3DListExtensions.kt List<Vector3D>
space/direction3DExtensions.kt Direction3D
space/coordinateSystem3DExtensions.kt CoordinateSystem3D