File: TestICPTransform.tcl

package info (click to toggle)
vtk6 6.3.0%2Bdfsg2-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 118,880 kB
  • sloc: cpp: 1,442,792; ansic: 113,395; python: 72,383; tcl: 46,998; xml: 8,119; yacc: 4,525; java: 4,239; perl: 3,108; lex: 1,694; sh: 1,093; asm: 154; makefile: 103; objc: 17
file content (117 lines) | stat: -rw-r--r-- 3,693 bytes parent folder | download | duplicates (12)
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
113
114
115
116
117
package require vtk
package require vtkinteraction

vtkRenderWindow renWin

vtkRenderWindowInteractor iren
    iren SetRenderWindow renWin

# Create objects

array set sscale {
    s2 {0.7 0.7 0.7}
    s3 {0.5 0.5 0.5}
}
array set scenter {
    s2 {-0.25  0.25  0.0}
    s3 { 0.4  -0.3  0.0}
}
array set scolors {
    s2 {0.2 0.6 0.1}
    s3 {0.1 0.2 0.6}
}

for {set sidx 1} {$sidx <= 3} {incr sidx} {
    vtkSuperquadricSource s${sidx}
        s${sidx} ToroidalOff
        s${sidx} SetThetaResolution 20
        s${sidx} SetPhiResolution 20
        s${sidx} SetPhiRoundness [expr 0.7 + ($sidx-2)*0.4]
        s${sidx} SetThetaRoundness [expr 0.85 + ($sidx-1)*0.4]
        if [info exists sscale(s${sidx})] {
            eval s${sidx} SetScale $sscale(s${sidx})
        }
        if [info exists scenter(s${sidx})] {
            eval s${sidx} SetCenter $scenter(s${sidx})
        }
        s${sidx} Update
}

# Create renderers

for {set ridx 1} {$ridx <= 3} {incr ridx} {

    vtkRenderer ren${ridx}
        ren${ridx} SetViewport [expr ($ridx-1)/3.0] 0.0 [expr ($ridx)/3.0] 1.0
        ren${ridx} SetBackground 0.7 0.8 1.0
    set cam [ren${ridx} GetActiveCamera]
        $cam SetPosition 1.7 1.4 1.7
    renWin AddRenderer ren${ridx}

    # renderer 1 has all 3 objects, render i has object 1 and i (i=2, 3)
    # add actors (corresponding to the objects) to each renderer
    # and ICP transforms from objects i or to 1.
    # object 1 has feature edges too.

    for {set sidx 1} {$sidx <= 3} {incr sidx} {

        if {$ridx == 1 || $sidx == 1 || $ridx == $sidx} {
            vtkPolyDataMapper ren${ridx}s${sidx}m
                ren${ridx}s${sidx}m SetInputConnection [s${sidx} GetOutputPort]

            vtkActor ren${ridx}s${sidx}a
                ren${ridx}s${sidx}a SetMapper ren${ridx}s${sidx}m

            set prop [ren${ridx}s${sidx}a GetProperty]
            if [info exists scolors(s${sidx})] {
                eval $prop SetColor $scolors(s${sidx})
            }

            if {$sidx == 1} {
                $prop SetOpacity 0.2

                vtkFeatureEdges ren${ridx}s${sidx}fe
                    ren${ridx}s${sidx}fe SetInputConnection [s${sidx} GetOutputPort]
                    ren${ridx}s${sidx}fe BoundaryEdgesOn
                    ren${ridx}s${sidx}fe ColoringOff
                    ren${ridx}s${sidx}fe ManifoldEdgesOff

                vtkPolyDataMapper ren${ridx}s${sidx}fem
                    ren${ridx}s${sidx}fem SetInputConnection \
                                          [ren${ridx}s${sidx}fe GetOutputPort]
                    ren${ridx}s${sidx}fem \
                                    SetResolveCoincidentTopologyToPolygonOffset

                vtkActor ren${ridx}s${sidx}fea
                    ren${ridx}s${sidx}fea SetMapper ren${ridx}s${sidx}fem

                ren${ridx} AddActor ren${ridx}s${sidx}fea
            }

            ren${ridx} AddActor ren${ridx}s${sidx}a
        }

        if {$ridx > 1 && $ridx == $sidx} {
            vtkIterativeClosestPointTransform ren${ridx}icp${sidx}
                ren${ridx}icp${sidx} SetSource [s${sidx} GetOutput]
                ren${ridx}icp${sidx} SetTarget [s1 GetOutput]
                ren${ridx}icp${sidx} SetCheckMeanDistance 1
                ren${ridx}icp${sidx} SetMaximumMeanDistance 0.001
                ren${ridx}icp${sidx} SetMaximumNumberOfIterations 30
                ren${ridx}icp${sidx} SetMaximumNumberOfLandmarks 50
            ren${ridx}s${sidx}a SetUserTransform ren${ridx}icp${sidx}
        }
    }
}

ren3icp3 StartByMatchingCentroidsOn

renWin SetSize 400 100
renWin Render

catch {
    iren AddObserver UserEvent {wm deiconify .vtkInteract}
}

wm withdraw .