disp3D 0.2.1 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +1 -1
- data/README.md +56 -0
- data/VERSION +1 -1
- data/disp3D.gemspec +24 -20
- data/example/stl_viewer/document_ctrl.rb +2 -2
- data/example/stl_viewer/qt_widget_controller.rb +3 -7
- data/example/tutorial/03_CameraScene.rb +5 -5
- data/example/tutorial/04_Qt.rb +4 -4
- data/example/tutorial/05_Pick.rb +13 -13
- data/example/tutorial/06_FileParser.rb +3 -3
- data/example/tutorial/07_SceneGraph.rb +16 -4
- data/example/tutorial/08_SceneGraph2.rb +16 -15
- data/example/tutorial/09_Texture.rb +28 -0
- data/example/tutorial/10_Animation.rb +27 -0
- data/example/tutorial/10_AnimationQt.rb +53 -0
- data/example/tutorial/11_MultiView.rb +41 -0
- data/example/tutorial/12_Light.rb +65 -0
- data/example/tutorial/13_RectPick.rb +38 -0
- data/example/tutorial/14_LineRubberband.rb +43 -0
- data/example/{test → tutorial}/data/test.png +0 -0
- data/example/{test → tutorial}/data/test2.jpg +0 -0
- data/lib/camera.rb +8 -0
- data/lib/compass.rb +21 -14
- data/lib/disp3D.rb +3 -0
- data/lib/gl_view.rb +70 -40
- data/lib/glut_window.rb +24 -18
- data/lib/light.rb +35 -21
- data/lib/manipulator.rb +0 -7
- data/lib/node/node.rb +100 -105
- data/lib/node/node_arrows.rb +1 -1
- data/lib/node/node_collection.rb +63 -17
- data/lib/node/node_cone.rb +49 -0
- data/lib/node/node_coord.rb +26 -11
- data/lib/node/node_leaf.rb +17 -11
- data/lib/node/node_lines.rb +1 -1
- data/lib/node/node_points.rb +2 -1
- data/lib/node/node_polylines.rb +1 -1
- data/lib/node/node_rectangle.rb +9 -4
- data/lib/node/node_sphere.rb +28 -0
- data/lib/node/node_tea_pod.rb +4 -4
- data/lib/node/node_text.rb +2 -2
- data/lib/node/node_tris.rb +1 -1
- data/lib/node/node_workplane.rb +33 -1
- data/lib/picker.rb +157 -3
- data/lib/qt_widget_gl.rb +24 -11
- data/lib/scene_graph.rb +3 -3
- data/test/node/test_node.rb +230 -0
- data/test/node/test_node_collection.rb +99 -79
- data/test/test_picker.rb +6 -6
- metadata +28 -24
- data/README.rdoc +0 -63
- data/example/test/capture_test.rb +0 -16
- data/example/test/dsl_test.rb +0 -46
- data/example/test/texture_test.rb +0 -39
- data/test/data/binary_test.stl +0 -0
- data/test/data/bunny-flatfoot.stl +0 -0
data/test/test_picker.rb
CHANGED
@@ -11,7 +11,7 @@ class PickerTestCase < MiniTest::Unit::TestCase
|
|
11
11
|
gl_view.world_scene_graph.add(rect_node)
|
12
12
|
gl_view.fit
|
13
13
|
|
14
|
-
picked_result = gl_view.picker.
|
14
|
+
picked_result = gl_view.picker.point_pick(200,149)
|
15
15
|
assert_equal(1, picked_result.size)
|
16
16
|
picked_world_pos = picked_result[0].world_position
|
17
17
|
|
@@ -26,7 +26,7 @@ class PickerTestCase < MiniTest::Unit::TestCase
|
|
26
26
|
translate = Vector3.new(0.1, -0.3, 0.0)
|
27
27
|
gl_view.camera.pre_translate = translate
|
28
28
|
|
29
|
-
picked_result = gl_view.picker.
|
29
|
+
picked_result = gl_view.picker.point_pick(200,149)
|
30
30
|
assert_equal(1, picked_result.size)
|
31
31
|
picked_world_pos = picked_result[0].world_position
|
32
32
|
assert_in_delta(-0.1, picked_world_pos.x, precision)
|
@@ -39,7 +39,7 @@ class PickerTestCase < MiniTest::Unit::TestCase
|
|
39
39
|
translate = Vector3.new(10, -3, 0.0)
|
40
40
|
gl_view.camera.pre_translate = translate
|
41
41
|
|
42
|
-
picked_result = gl_view.picker.
|
42
|
+
picked_result = gl_view.picker.point_pick(200,149)
|
43
43
|
assert_equal(0, picked_result.size)
|
44
44
|
end
|
45
45
|
|
@@ -50,7 +50,7 @@ class PickerTestCase < MiniTest::Unit::TestCase
|
|
50
50
|
gl_view.world_scene_graph.add(box_node)
|
51
51
|
gl_view.fit
|
52
52
|
|
53
|
-
picked_result = gl_view.picker.
|
53
|
+
picked_result = gl_view.picker.point_pick(200,149)
|
54
54
|
assert_equal(1, picked_result.size)
|
55
55
|
picked_world_pos = picked_result[0].world_position
|
56
56
|
|
@@ -64,7 +64,7 @@ class PickerTestCase < MiniTest::Unit::TestCase
|
|
64
64
|
# rotate model
|
65
65
|
angle_45 = 45.0*Math::PI/180.0
|
66
66
|
gl_view.camera.rotate = Quat.from_axis(Vector3.new(1,0,0), angle_45)
|
67
|
-
picked_result = gl_view.picker.
|
67
|
+
picked_result = gl_view.picker.point_pick(200,149)
|
68
68
|
|
69
69
|
assert_equal(1, picked_result.size)
|
70
70
|
picked_world_pos = picked_result[0].world_position
|
@@ -86,7 +86,7 @@ class PickerTestCase < MiniTest::Unit::TestCase
|
|
86
86
|
gl_view.fit
|
87
87
|
|
88
88
|
precision = 0.001
|
89
|
-
picked_results = gl_view.picker.
|
89
|
+
picked_results = gl_view.picker.point_pick(200,149)
|
90
90
|
assert_equal(2, picked_results.size)
|
91
91
|
picked_results.each do |picked|
|
92
92
|
assert_equal(1, picked.node_path_info.size)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: disp3D
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-12-
|
12
|
+
date: 2011-12-12 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
16
|
-
requirement: &
|
16
|
+
requirement: &22795224 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 1.0.0
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *22795224
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: jeweler
|
27
|
-
requirement: &
|
27
|
+
requirement: &22794864 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,21 +32,21 @@ dependencies:
|
|
32
32
|
version: 1.6.4
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *22794864
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: gmath3D
|
38
|
-
requirement: &
|
38
|
+
requirement: &22794396 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version: 0.
|
43
|
+
version: 1.0.0
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *22794396
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: ruby-opengl
|
49
|
-
requirement: &
|
49
|
+
requirement: &22793940 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - =
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 0.60.1
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *22793940
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: rmagick
|
60
|
-
requirement: &
|
60
|
+
requirement: &22793388 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,19 +65,19 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *22793388
|
69
69
|
description: disp3D provide 3D GUI framework
|
70
70
|
email: toshi0328@gmail.com
|
71
71
|
executables: []
|
72
72
|
extensions: []
|
73
73
|
extra_rdoc_files:
|
74
74
|
- LICENSE.txt
|
75
|
-
- README.
|
75
|
+
- README.md
|
76
76
|
files:
|
77
77
|
- .document
|
78
78
|
- Gemfile
|
79
79
|
- LICENSE.txt
|
80
|
-
- README.
|
80
|
+
- README.md
|
81
81
|
- Rakefile
|
82
82
|
- VERSION
|
83
83
|
- disp3D.gemspec
|
@@ -86,11 +86,6 @@ files:
|
|
86
86
|
- example/stl_viewer/main.rb
|
87
87
|
- example/stl_viewer/qt_widget_controller.rb
|
88
88
|
- example/stl_viewer/stl_viewer.rb
|
89
|
-
- example/test/capture_test.rb
|
90
|
-
- example/test/data/test.png
|
91
|
-
- example/test/data/test2.jpg
|
92
|
-
- example/test/dsl_test.rb
|
93
|
-
- example/test/texture_test.rb
|
94
89
|
- example/tutorial/01_helloworld.rb
|
95
90
|
- example/tutorial/02_elements.rb
|
96
91
|
- example/tutorial/03_CameraScene.rb
|
@@ -99,7 +94,16 @@ files:
|
|
99
94
|
- example/tutorial/06_FileParser.rb
|
100
95
|
- example/tutorial/07_SceneGraph.rb
|
101
96
|
- example/tutorial/08_SceneGraph2.rb
|
97
|
+
- example/tutorial/09_Texture.rb
|
98
|
+
- example/tutorial/10_Animation.rb
|
99
|
+
- example/tutorial/10_AnimationQt.rb
|
100
|
+
- example/tutorial/11_MultiView.rb
|
101
|
+
- example/tutorial/12_Light.rb
|
102
|
+
- example/tutorial/13_RectPick.rb
|
103
|
+
- example/tutorial/14_LineRubberband.rb
|
102
104
|
- example/tutorial/data/bunny.stl
|
105
|
+
- example/tutorial/data/test.png
|
106
|
+
- example/tutorial/data/test2.jpg
|
103
107
|
- lib/camera.rb
|
104
108
|
- lib/compass.rb
|
105
109
|
- lib/disp3D.rb
|
@@ -112,12 +116,14 @@ files:
|
|
112
116
|
- lib/node/node.rb
|
113
117
|
- lib/node/node_arrows.rb
|
114
118
|
- lib/node/node_collection.rb
|
119
|
+
- lib/node/node_cone.rb
|
115
120
|
- lib/node/node_coord.rb
|
116
121
|
- lib/node/node_leaf.rb
|
117
122
|
- lib/node/node_lines.rb
|
118
123
|
- lib/node/node_points.rb
|
119
124
|
- lib/node/node_polylines.rb
|
120
125
|
- lib/node/node_rectangle.rb
|
126
|
+
- lib/node/node_sphere.rb
|
121
127
|
- lib/node/node_tea_pod.rb
|
122
128
|
- lib/node/node_text.rb
|
123
129
|
- lib/node/node_tris.rb
|
@@ -128,8 +134,6 @@ files:
|
|
128
134
|
- lib/qt_widget_gl.rb
|
129
135
|
- lib/scene_graph.rb
|
130
136
|
- lib/stl.rb
|
131
|
-
- test/data/binary_test.stl
|
132
|
-
- test/data/bunny-flatfoot.stl
|
133
137
|
- test/data/cube-ascii.stl
|
134
138
|
- test/data/cube-binary.stl
|
135
139
|
- test/helper.rb
|
@@ -167,7 +171,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
167
171
|
version: '0'
|
168
172
|
segments:
|
169
173
|
- 0
|
170
|
-
hash:
|
174
|
+
hash: 97386611
|
171
175
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
172
176
|
none: false
|
173
177
|
requirements:
|
@@ -176,7 +180,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
176
180
|
version: '0'
|
177
181
|
requirements: []
|
178
182
|
rubyforge_project:
|
179
|
-
rubygems_version: 1.
|
183
|
+
rubygems_version: 1.8.12
|
180
184
|
signing_key:
|
181
185
|
specification_version: 3
|
182
186
|
summary: disp3D provide 3D GUI framework.
|
data/README.rdoc
DELETED
@@ -1,63 +0,0 @@
|
|
1
|
-
= disp3D
|
2
|
-
本ライブラリは、Qtと組み合わせて、3次元の表示が簡単に可能なフレームワークを提供する目的で開発されています。ターゲットは、簡単なアプリ、プロトタイピング、学術利用などを想定しています。
|
3
|
-
|
4
|
-
以下のような特徴を持つようなライブラリを目指します。
|
5
|
-
- シンプルで使いやすく!
|
6
|
-
- Rubyでの開発が可能
|
7
|
-
- windows,mac,linuxなどプラットフォームを問わない
|
8
|
-
|
9
|
-
また、ゲーム、CGや大規模モデルなどは当面の目標からは外れます。
|
10
|
-
|
11
|
-
== インストール
|
12
|
-
ライブラリは以下の3つのgemに依存しています。
|
13
|
-
- gmath3D
|
14
|
-
- ruby-opengl
|
15
|
-
- rmagick
|
16
|
-
- qtbindings(オプション)
|
17
|
-
|
18
|
-
== 使い方
|
19
|
-
=== 例
|
20
|
-
1.点や線を3次元ビュー上に追加し、表示する
|
21
|
-
開発中
|
22
|
-
|
23
|
-
2.Qtアプリケーションとして開発をする
|
24
|
-
開発中
|
25
|
-
|
26
|
-
3.STLファイルを読み込み、表示する
|
27
|
-
開発中
|
28
|
-
|
29
|
-
4.表示要素をマウス操作で取得する
|
30
|
-
開発中
|
31
|
-
|
32
|
-
=== データ構造
|
33
|
-
中心となるクラスは、GLViewおよびSceneGraphです。
|
34
|
-
執筆中
|
35
|
-
|
36
|
-
== 今後の課題
|
37
|
-
=== 開発項目
|
38
|
-
- デモアプリ(STLビューワー)
|
39
|
-
- QTでのアプリケーション設計
|
40
|
-
- tri_nodeの法線方向指定
|
41
|
-
- インディケート処理の追加
|
42
|
-
- trackball manipulatorを洗練させる
|
43
|
-
- 回転中心を変えるとか・・・
|
44
|
-
- DSLの設計
|
45
|
-
- 自動テスト構築
|
46
|
-
- Windowsでの利用(なぜか、インストールでエラー・・・)
|
47
|
-
- ライティングの工夫、表示の洗練
|
48
|
-
- ドキュメント整理(html?)
|
49
|
-
- テクスチャの貼り付け
|
50
|
-
- データの可視化としての応用
|
51
|
-
- アニメーション
|
52
|
-
- モバイル応用
|
53
|
-
|
54
|
-
=== 他ライブラリとの組み合わせ
|
55
|
-
- 3次元画像処理,pclの利用
|
56
|
-
- 医用応用として、DICOMパーサー(Ruby-DICOM)の利用
|
57
|
-
- 2次元画像処理、RMagicに任せる・・・(Ruby-DICOMとのつなぎなど)
|
58
|
-
|
59
|
-
== Copyright
|
60
|
-
|
61
|
-
Copyright (c) 2011 Toshiyasu Shimizu. See LICENSE.txt for
|
62
|
-
further details.
|
63
|
-
|
@@ -1,16 +0,0 @@
|
|
1
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '../../', 'lib'))
|
2
|
-
require 'disp3D'
|
3
|
-
|
4
|
-
main_view = Disp3D::GLUTWindow.new(400,300)
|
5
|
-
node_tea_pod = Disp3D::NodeTeaPod.new(5)
|
6
|
-
node_tea_pod.material_color = [1,1,0,1]
|
7
|
-
main_view.world_scene_graph.add(node_tea_pod)
|
8
|
-
main_view.camera.is_orth = true
|
9
|
-
main_view.fit
|
10
|
-
angle = 30.0/180.0*Math::PI
|
11
|
-
main_view.camera.rotate = Quat.from_axis(Vector3.new(1,0.5,0.0).normalize, angle)
|
12
|
-
|
13
|
-
image = main_view.capture
|
14
|
-
image.write File.dirname(__FILE__) + '/data/captured.png'
|
15
|
-
|
16
|
-
main_view.start
|
data/example/test/dsl_test.rb
DELETED
@@ -1,46 +0,0 @@
|
|
1
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '../../', 'lib'))
|
2
|
-
|
3
|
-
require 'disp3D'
|
4
|
-
|
5
|
-
main_view = Disp3D::GLUTWindow.new(600,400)
|
6
|
-
|
7
|
-
Disp3D::NodeCollection.create :root_node do
|
8
|
-
add_new :type => :Points,
|
9
|
-
:geom => Vector3.new(0,0,0),
|
10
|
-
:colors => [1,1,0,1],
|
11
|
-
:size => 5
|
12
|
-
|
13
|
-
add_new :type => :Lines,
|
14
|
-
:name => :line1,
|
15
|
-
:geom => FiniteLine.new(Vector3.new(-1, 1, 0),Vector3.new(1, 1, 0)),
|
16
|
-
:width => 3
|
17
|
-
|
18
|
-
add_new :sub_node do
|
19
|
-
transform :pre_translate => Vector3.new(0,0,-1)
|
20
|
-
add_new :type => :Points,
|
21
|
-
:geom => Vector3.new(0,0,0),
|
22
|
-
:colors => [1,0,0,1],
|
23
|
-
:size => 3
|
24
|
-
|
25
|
-
add :line1
|
26
|
-
end
|
27
|
-
|
28
|
-
# "add_new" is as same as "create" and "add" process
|
29
|
-
create :type => :Polylines,
|
30
|
-
:name => :polyline1,
|
31
|
-
:geom => Polyline.new([Vector3.new(-1,0,0), Vector3.new(1,0,0), Vector3.new(1,3,0)]),
|
32
|
-
:colors => [0,1,0,1],
|
33
|
-
:width => 4
|
34
|
-
|
35
|
-
add :polyline1
|
36
|
-
end
|
37
|
-
|
38
|
-
main_view.world_scene_graph.add(:root_node)
|
39
|
-
|
40
|
-
main_view.world_scene_graph.open do
|
41
|
-
add_new :type => :TeaPod,
|
42
|
-
:material_color => [0,0,1,1],
|
43
|
-
:post_translate => Vector3.new(0,0,-4),
|
44
|
-
:size => 3
|
45
|
-
end
|
46
|
-
main_view.start
|
@@ -1,39 +0,0 @@
|
|
1
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '../../', 'lib'))
|
2
|
-
require 'disp3D'
|
3
|
-
|
4
|
-
main_view = Disp3D::GLUTWindow.new(600,400)
|
5
|
-
|
6
|
-
#=========================
|
7
|
-
# load image
|
8
|
-
file_path1 = File.dirname(__FILE__) + '/data/test.png'
|
9
|
-
image1 = Magick::Image.read(file_path1).first
|
10
|
-
|
11
|
-
#=========================
|
12
|
-
# rect
|
13
|
-
original_point = Vector3.new(0,0,0)
|
14
|
-
length = 100
|
15
|
-
rect_geom1 = Rectangle.new(original_point, Vector3.new(length,0,0), Vector3.new(0,length,0))
|
16
|
-
rect_node1 = Disp3D::NodeRectangle.new(rect_geom1, nil, image1)
|
17
|
-
main_view.world_scene_graph.add(rect_node1)
|
18
|
-
|
19
|
-
#=========================
|
20
|
-
# load image
|
21
|
-
file_path2 = File.dirname(__FILE__) + '/data/test2.jpg'
|
22
|
-
image2 = Magick::Image.read(file_path2).first
|
23
|
-
|
24
|
-
#=========================
|
25
|
-
# rect
|
26
|
-
original_point = Vector3.new(200,0,0)
|
27
|
-
rect_geom2 = Rectangle.new(original_point, Vector3.new(length,0,0), Vector3.new(0,length,0))
|
28
|
-
rect_node2 = Disp3D::NodeRectangle.new(rect_geom2, nil, image2)
|
29
|
-
main_view.world_scene_graph.add(rect_node2)
|
30
|
-
|
31
|
-
#=========================
|
32
|
-
# rectplane
|
33
|
-
original_point = Vector3.new(-200,0,0)
|
34
|
-
rect_geom3 = Rectangle.new(original_point, Vector3.new(length,0,0), Vector3.new(0,length,0))
|
35
|
-
rect_node3 = Disp3D::NodeRectangle.new(rect_geom3)
|
36
|
-
main_view.world_scene_graph.add(rect_node3)
|
37
|
-
|
38
|
-
main_view.fit
|
39
|
-
main_view.start
|
data/test/data/binary_test.stl
DELETED
Binary file
|
Binary file
|