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
|
#!/usr/bin/python
import py2geom
import toyframework
import random,gtk
import numpy
from py2geom_glue import *
class Box3d(toyframework.Toy):
def __init__(self):
toyframework.Toy.__init__(self)
self.tmat = numpy.zeros([3,4])
# plane origin
self.origin_handle = toyframework.PointHandle(180,65)
self.handles.append(self.origin_handle)
self.vanishing_points_handles = toyframework.PointSetHandle()
path_a_name="ptitle.svgd"
import sys
if len(sys.argv) > 1:
path_a_name = sys.argv[1]
self.paths_a = py2geom.read_svgd(path_a_name)
# Finite images of the three vanishing points and the origin
self.handles.append(self.vanishing_points_handles)
self.vanishing_points_handles.append(550,350)
self.vanishing_points_handles.append(150,300)
self.vanishing_points_handles.append(380,40)
self.vanishing_points_handles.append(340,450)
def draw(self, cr, pos, save):
orig = self.origin_handle.pos;
cr.set_source_rgba (0., 0.125, 0, 1)
# create the transformation matrix for the map P^3 --> P^2 that has the following effect:
# (1 : 0 : 0 : 0) --> vanishing point in x direction (= handle #0)
# (0 : 1 : 0 : 0) --> vanishing point in y direction (= handle #1)
# (0 : 0 : 1 : 0) --> vanishing point in z direction (= handle #2)
# (0 : 0 : 0 : 1) --> origin (= handle #3)
tmat = numpy.zeros([3,4])
for j in range(4):
tmat[0][j] = self.vanishing_points_handles.pts[j][0]
tmat[1][j] = self.vanishing_points_handles.pts[j][1]
tmat[2][j] = 1
self.notify = "Projection matrix:\n"
for i in range(3):
for j in range(4):
self.notify += str(tmat[i][j]) + " "
self.notify += '\n'
for p in self.paths_a:
B = py2geom.make_cuts_independant(p.toPwSb())
preimage = [None]*4
preimage[0] = (B[0] - orig[0]) / 100;
preimage[1] = -(B[1] - orig[1]) / 100;
Piecewise<SBasis> res[3];
for j in range(3):
res[j] = (preimage[0] * tmat[j][0] +
preimage[1] * tmat[j][1] +
+ tmat[j][3])
result = D2PiecewiseSBasis(divide(res[0],res[2], 2),
divide(res[1],res[2], 2))
toyframework.cairo_d2_pw(cr, result)
cr.set_source_rgba (0., 0.125, 0, 1)
cr.stroke()
toyframework.Toy.draw(self, cr, pos, save)
t = Box3d()
import sys
toyframework.init(sys.argv, t, 500, 500)
|