1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
|
#!/usr/bin/env python
from vtkmodules.vtkCommonCore import (
reference,
vtkPoints,
vtkUnsignedCharArray,
)
from vtkmodules.vtkCommonDataModel import (
vtkCellArray,
vtkCellData,
vtkPolyData,
)
from vtkmodules.vtkRenderingCore import (
vtkActor2D,
vtkPolyDataMapper2D,
vtkProperty2D,
vtkRenderer,
vtkRenderWindow,
vtkRenderWindowInteractor,
vtkTextActor,
vtkTextProperty,
)
from vtkmodules.vtkRenderingFreeType import (
vtkMathTextUtilities,
)
import vtkmodules.vtkRenderingMatplotlib
import vtkmodules.vtkRenderingOpenGL2
import vtkmodules.vtkRenderingUI
def setupTextActor(actor, anchor):
p = actor.GetTextProperty()
label = (str(p.GetVerticalJustificationAsString()[0]) +
str(p.GetJustificationAsString()[0]) + " " +
"$\\theta = " + str(round(p.GetOrientation())) + "$")
actor.SetInput(label)
# Add the anchor point:
pos = actor.GetPosition()
col = p.GetColor()
ptId = reference((anchor.GetPoints().InsertNextPoint(pos[0], pos[1], 0.),))
anchor.GetVerts().InsertNextCell(1, ptId)
anchor.GetCellData().GetScalars().InsertNextTuple4(
col[0] * 255, col[1] * 255, col[2] * 255, 255)
ren = vtkRenderer()
width = 600
height = 600
x = ( 100, 300, 500 )
y = ( 100, 300, 500 )
# Render the anchor points to check alignment:
anchors = vtkPolyData()
points = vtkPoints()
anchors.SetPoints(points)
verts = vtkCellArray()
anchors.SetVerts(verts)
colors = vtkUnsignedCharArray()
colors.SetNumberOfComponents(4)
anchors.GetCellData().SetScalars(colors)
for row in range(3):
for col in range(3):
actor = vtkTextActor()
if row == 0:
actor.GetTextProperty().SetJustificationToRight()
elif row == 1:
actor.GetTextProperty().SetJustificationToCentered()
elif row == 2:
actor.GetTextProperty().SetJustificationToLeft()
if col == 0:
actor.GetTextProperty().SetVerticalJustificationToBottom()
elif col == 1:
actor.GetTextProperty().SetVerticalJustificationToCentered()
elif col == 2:
actor.GetTextProperty().SetVerticalJustificationToTop()
actor.GetTextProperty().SetFontSize(22)
actor.GetTextProperty().SetOrientation(45.0 * (3 * row + col))
actor.GetTextProperty().SetColor(0.75, .2 + col * .26, .2 + row * .26)
actor.GetTextProperty().SetBackgroundColor(0., 1. - col * .26, 1. - row * .26)
actor.GetTextProperty().SetBackgroundOpacity(0.25)
actor.GetTextProperty().SetFrame((row + col) % 9 == 0)
actor.GetTextProperty().SetFrameColor(
(0., 1.)[col > 0], (0., 1.)[col == 1], (0., 1.)[col < 2])
actor.GetTextProperty().SetFrameWidth(1)
actor.SetPosition(x[col], y[row])
setupTextActor(actor, anchors)
ren.AddActor(actor)
anchorMapper = vtkPolyDataMapper2D()
anchorMapper.SetInputData(anchors)
anchorActor = vtkActor2D()
anchorActor.SetMapper(anchorMapper)
anchorActor.GetProperty().SetPointSize(5)
ren.AddActor(anchorActor)
renWin = vtkRenderWindow()
renWin.AddRenderer(ren)
iren = vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)
ren.SetBackground(0.0, 0.0, 0.0)
renWin.SetSize(width, height)
renWin.SetMultiSamples(0)
iren.Initialize()
if 'rtTester' not in locals() or rtTester.IsInteractiveModeSpecified():
iren.Start()
|