torqml 0.1.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.
- checksums.yaml +7 -0
- data/.gitignore +32 -0
- data/.yardopts +3 -0
- data/Gemfile +5 -0
- data/LICENSE +21 -0
- data/README.md +148 -0
- data/Rakefile +6 -0
- data/assets/images/capture.png +0 -0
- data/assets/images/configure.png +0 -0
- data/assets/images/edit.png +0 -0
- data/assets/images/play.png +0 -0
- data/assets/images/reload.png +0 -0
- data/assets/images/stop.png +0 -0
- data/assets/shapes/TQBox.obj +44 -0
- data/assets/shapes/TQCone.obj +169 -0
- data/assets/shapes/TQCylinder.obj +585 -0
- data/assets/shapes/TQSphere.obj +1497 -0
- data/assets/shapes/TQTorus.obj +3754 -0
- data/bin/torqml +12 -0
- data/examples/SerialLink/SerialLink.qml +35 -0
- data/examples/SerialLink/main.qml +29 -0
- data/examples/SerialLink/main_multi.qml +40 -0
- data/examples/Tutorial/MyModel.qml +34 -0
- data/examples/Tutorial/main_00_minimal.qml +10 -0
- data/examples/Tutorial/main_01_property.qml +15 -0
- data/examples/Tutorial/main_02_pose.qml +19 -0
- data/examples/Tutorial/main_03_link.qml +32 -0
- data/examples/Tutorial/main_04_importmodel.qml +7 -0
- data/examples/Tutorial/main_05_cameralight.qml +17 -0
- data/examples/Tutorial/main_06_animation.qml +18 -0
- data/examples/WheeledVehicle/WheeledVehicle.qml +62 -0
- data/examples/WheeledVehicle/data/maze2014student.dat +19 -0
- data/examples/WheeledVehicle/data/wheeledvehicle.csv +11712 -0
- data/examples/WheeledVehicle/main.qml +38 -0
- data/examples/WheeledVehicle/plugins/MazeWallGenerator/plugin.rb +68 -0
- data/examples/WheeledVehicle/plugins/MazeWallGenerator/qml/TorQML/Plugins/MazeWallGenerator/MazeHorizWall.qml +29 -0
- data/examples/WheeledVehicle/plugins/MazeWallGenerator/qml/TorQML/Plugins/MazeWallGenerator/MazeVertWall.qml +30 -0
- data/examples/WheeledVehicle/plugins/MazeWallGenerator/qml/TorQML/Plugins/MazeWallGenerator/MazeWallGenerator.qml +24 -0
- data/examples/WheeledVehicle/plugins/MazeWallGenerator/qml/TorQML/Plugins/MazeWallGenerator/qmldir +4 -0
- data/examples/WheeledVehicle/plugins/MazeWallGenerator/qml/TorQML/Plugins/MazeWallGenerator/wallAllocator.js +47 -0
- data/ext/TorQML/FrameGrabber/extconf.rb +45 -0
- data/ext/TorQML/FrameGrabber/framegrabber.cpp +36 -0
- data/ext/TorQML/FrameGrabber/framegrabber.pro +9 -0
- data/ext/TorQML/FrameGrabber/qmldir +2 -0
- data/lib/torqml.rb +47 -0
- data/lib/torqml/datasources.rb +12 -0
- data/lib/torqml/datasources/csvdatasource.rb +44 -0
- data/lib/torqml/datasources/datasource.rb +44 -0
- data/lib/torqml/datasources/lineardatasource.rb +47 -0
- data/lib/torqml/datasources/matrixdatasource.rb +37 -0
- data/lib/torqml/plugins.rb +44 -0
- data/lib/torqml/version.rb +6 -0
- data/plugins/DO_NOT_MODIFY_THIS_DIRECTORY +2 -0
- data/qml/TorQML/DataSources/TQCSVDataSource.qml +17 -0
- data/qml/TorQML/DataSources/TQLinearDataSource.qml +18 -0
- data/qml/TorQML/DataSources/qmldir +3 -0
- data/qml/TorQML/Shapes/TQAxis.qml +26 -0
- data/qml/TorQML/Shapes/TQBox.qml +11 -0
- data/qml/TorQML/Shapes/TQCone.qml +17 -0
- data/qml/TorQML/Shapes/TQCoordinate.qml +30 -0
- data/qml/TorQML/Shapes/TQCylinder.qml +17 -0
- data/qml/TorQML/Shapes/TQGrid.qml +36 -0
- data/qml/TorQML/Shapes/TQPrimitive.qml +33 -0
- data/qml/TorQML/Shapes/TQSphere.qml +18 -0
- data/qml/TorQML/Shapes/TQTorus.qml +18 -0
- data/qml/TorQML/Shapes/qmldir +10 -0
- data/qml/TorQML/TQModel.qml +9 -0
- data/qml/TorQML/Views/Dialogs/TQCaptureDialog.qml +197 -0
- data/qml/TorQML/Views/Dialogs/TQProgressDialog.qml +36 -0
- data/qml/TorQML/Views/Dialogs/qmldir +3 -0
- data/qml/TorQML/Views/TQBasicView.qml +148 -0
- data/qml/TorQML/Views/TQCamera.qml +11 -0
- data/qml/TorQML/Views/TQViewport.qml +41 -0
- data/qml/TorQML/Views/basicview.js +172 -0
- data/qml/TorQML/Views/mouseEventHandler.js +55 -0
- data/qml/TorQML/Views/qmldir +4 -0
- data/qml/TorQML/qmldir +2 -0
- data/torqml.gemspec +29 -0
- metadata +181 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
#!/usr/bin/ruby -Ku
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
|
|
4
|
+
require 'qml'
|
|
5
|
+
|
|
6
|
+
module TorQML
|
|
7
|
+
module DataSources
|
|
8
|
+
# Base class of data sources.
|
|
9
|
+
class DataSource_rb
|
|
10
|
+
include QML::Access
|
|
11
|
+
# do not call register_to_qml here because this class has no features
|
|
12
|
+
|
|
13
|
+
# @return [Integer] the current frame number
|
|
14
|
+
property(:currentFrame) { 1 }
|
|
15
|
+
# Event signal for QML component.
|
|
16
|
+
signal :dataTriggered, []
|
|
17
|
+
|
|
18
|
+
# Emitts onDataTriggered event to the QML component.
|
|
19
|
+
on_changed :currentFrame do
|
|
20
|
+
dataTriggered.emit # QML: onDataTriggered
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Returns the current frame value at column index.
|
|
24
|
+
# This is a dummy method.
|
|
25
|
+
#
|
|
26
|
+
# @param [Integer] index index
|
|
27
|
+
# @return [Float] always returns index
|
|
28
|
+
def value_at(index)
|
|
29
|
+
index # dummy
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Returns the number of rows.
|
|
33
|
+
# This is a dummy method.
|
|
34
|
+
#
|
|
35
|
+
# @return [Integer] always returns 0
|
|
36
|
+
def rows
|
|
37
|
+
0 # dummy
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# vim:set ts=2 sw=2 et:
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#!/usr/bin/ruby -Ku
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
|
|
4
|
+
require 'qml'
|
|
5
|
+
require_relative './datasource'
|
|
6
|
+
|
|
7
|
+
module TorQML
|
|
8
|
+
module DataSources
|
|
9
|
+
# Data source class to provide simple linear data.
|
|
10
|
+
# This class is useful when testing some models without preparing time-series data files.
|
|
11
|
+
class LinearDataSource_rb < DataSource_rb
|
|
12
|
+
include QML::Access
|
|
13
|
+
register_to_qml # QML: LinearDataSource_rb
|
|
14
|
+
|
|
15
|
+
# @return [Integer] the size of data
|
|
16
|
+
property(:dataSize) { 0 }
|
|
17
|
+
# @return [Float] the value step against index
|
|
18
|
+
property(:dataStep) { 0 }
|
|
19
|
+
|
|
20
|
+
# Prepare data to provide.
|
|
21
|
+
def prepare_data
|
|
22
|
+
@data = Array.new(self.dataSize) do |i|
|
|
23
|
+
i * self.dataStep
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Returns the current frame value.
|
|
28
|
+
# Return value is not dependent on index argument.
|
|
29
|
+
#
|
|
30
|
+
# @param [Integer] index index
|
|
31
|
+
# @return [Float] the current frame value
|
|
32
|
+
def value_at(index)
|
|
33
|
+
@data[currentFrame.to_i - 1]
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Returns the number of rows.
|
|
37
|
+
#
|
|
38
|
+
# @return [Integer] the number of rows
|
|
39
|
+
def rows
|
|
40
|
+
@data.length
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# vim:set ts=2 sw=2 et:
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
#!/usr/bin/ruby -Ku
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
|
|
4
|
+
require 'qml'
|
|
5
|
+
require_relative './datasource'
|
|
6
|
+
|
|
7
|
+
module TorQML
|
|
8
|
+
module DataSources
|
|
9
|
+
# Base class of matrix type data sources.
|
|
10
|
+
class MatrixDataSource_rb < DataSource_rb
|
|
11
|
+
# do not call register_to_qml here
|
|
12
|
+
|
|
13
|
+
# Returns the current frame value at column index.
|
|
14
|
+
#
|
|
15
|
+
# @param [Integer] index index
|
|
16
|
+
# @return [Float] the current frame value at column index
|
|
17
|
+
def value_at(index)
|
|
18
|
+
if @data.nil?
|
|
19
|
+
raise "data not initialized"
|
|
20
|
+
0
|
|
21
|
+
else
|
|
22
|
+
@data[currentFrame.to_i - 1][index.to_i]
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Returns the number of rows.
|
|
27
|
+
#
|
|
28
|
+
# @return [Integer] the number of rows
|
|
29
|
+
def rows
|
|
30
|
+
@data.length
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# vim:set ts=2 sw=2 et:
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
require 'qml'
|
|
2
|
+
|
|
3
|
+
module TorQML
|
|
4
|
+
# TorQML module of plugins
|
|
5
|
+
module Plugins
|
|
6
|
+
# Version of Plugins module.
|
|
7
|
+
VERSION="0.1"
|
|
8
|
+
|
|
9
|
+
# Returns default path of plugin directory.
|
|
10
|
+
#
|
|
11
|
+
# @return [String] the default directory
|
|
12
|
+
def default_path
|
|
13
|
+
ENV['HOME'] + '/.torqml/plugins'
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Preloads ruby modules of plugins.
|
|
17
|
+
#
|
|
18
|
+
# @param [Pathname] dir path to the directory that contains plugins
|
|
19
|
+
def preload(dir)
|
|
20
|
+
Pathname.glob(dir + '*/plugin.rb').each do |path|
|
|
21
|
+
# load ruby modules
|
|
22
|
+
require(path.realpath.dirname + path.basename)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Loads QML/C++ plugins.
|
|
27
|
+
#
|
|
28
|
+
# @param [QML::Application] app QML application
|
|
29
|
+
# @param [Pathname] dir path to the directory that contains plugins
|
|
30
|
+
def load(app, dir)
|
|
31
|
+
Pathname.glob(dir + '*/plugin.rb').each do |path|
|
|
32
|
+
# add directories into import path of the application
|
|
33
|
+
app.engine.add_import_path("#{path.realpath.dirname}/qml") if (path.realpath.dirname + 'qml').exist?
|
|
34
|
+
app.engine.add_import_path("#{path.realpath.dirname}/ext") if (path.realpath.dirname + 'ext').exist?
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
module_function :default_path
|
|
39
|
+
module_function :preload
|
|
40
|
+
module_function :load
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# vim:set ts=2 sw=2 et:
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import QtQuick 2.0
|
|
2
|
+
import TorQML.DataSources 0.1
|
|
3
|
+
|
|
4
|
+
// registered component by csvdatasource.rb
|
|
5
|
+
CSVDataSource_rb {
|
|
6
|
+
id: _dataSource
|
|
7
|
+
source: null
|
|
8
|
+
currentFrame: -1
|
|
9
|
+
onDataTriggered: {
|
|
10
|
+
}
|
|
11
|
+
Component.onCompleted: {
|
|
12
|
+
_dataSource.prepare_data()
|
|
13
|
+
_dataSource.currentFrame = 1
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// vim:set ts=4 sw=4 et:
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import QtQuick 2.0
|
|
2
|
+
import TorQML.DataSources 0.1
|
|
3
|
+
|
|
4
|
+
// registered component by lineardatasource.rb
|
|
5
|
+
LinearDataSource_rb {
|
|
6
|
+
id: _dataSource
|
|
7
|
+
dataSize: 100
|
|
8
|
+
dataStep: 0.1
|
|
9
|
+
currentFrame: -1
|
|
10
|
+
onDataTriggered: {
|
|
11
|
+
}
|
|
12
|
+
Component.onCompleted: {
|
|
13
|
+
_dataSource.prepare_data()
|
|
14
|
+
_dataSource.currentFrame = 1
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// vim:set ts=4 sw=4 et:
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import QtQuick 2.0
|
|
2
|
+
import Qt3D 2.0
|
|
3
|
+
import Qt3D.Shapes 2.0
|
|
4
|
+
import TorQML.Shapes 0.1
|
|
5
|
+
|
|
6
|
+
Item3D {
|
|
7
|
+
id: _obj
|
|
8
|
+
property real cylinderRadius: 0.1
|
|
9
|
+
property real cylinderLength: 0.7
|
|
10
|
+
property real coneRadius: 0.2
|
|
11
|
+
property real coneLength: 0.3
|
|
12
|
+
property alias color: _cylinder.color
|
|
13
|
+
|
|
14
|
+
TQCylinder {
|
|
15
|
+
id: _cylinder
|
|
16
|
+
radius: cylinderRadius
|
|
17
|
+
length: cylinderLength
|
|
18
|
+
TQCone {
|
|
19
|
+
radius: coneRadius
|
|
20
|
+
length: coneLength
|
|
21
|
+
color: _cylinder.color
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// vim:set ts=4 sw=4 et:
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import QtQuick 2.0
|
|
2
|
+
import Qt3D 2.0
|
|
3
|
+
import Qt3D.Shapes 2.0
|
|
4
|
+
import TorQML.Shapes 0.1
|
|
5
|
+
|
|
6
|
+
TQPrimitive {
|
|
7
|
+
id: _obj
|
|
8
|
+
property real radius: 1
|
|
9
|
+
property alias length: _obj.xLength
|
|
10
|
+
|
|
11
|
+
yWidth: radius
|
|
12
|
+
zDepth: radius
|
|
13
|
+
|
|
14
|
+
mesh: Mesh { source: "../../../assets/shapes/TQCone.obj" }
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// vim:set ts=4 sw=4 et:
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import QtQuick 2.0
|
|
2
|
+
import Qt3D 2.0
|
|
3
|
+
import Qt3D.Shapes 2.0
|
|
4
|
+
import TorQML.Shapes 0.1
|
|
5
|
+
|
|
6
|
+
Item3D {
|
|
7
|
+
property alias xColor: xAxis.color
|
|
8
|
+
property alias yColor: yAxis.color
|
|
9
|
+
property alias zColor: zAxis.color
|
|
10
|
+
TQAxis {
|
|
11
|
+
id: xAxis
|
|
12
|
+
color: "red"
|
|
13
|
+
}
|
|
14
|
+
TQAxis {
|
|
15
|
+
id: yAxis
|
|
16
|
+
color: "green"
|
|
17
|
+
transform: [
|
|
18
|
+
Rotation3D { angle: 90; axis: "0,0,1" }
|
|
19
|
+
]
|
|
20
|
+
}
|
|
21
|
+
TQAxis {
|
|
22
|
+
id: zAxis
|
|
23
|
+
color: "blue"
|
|
24
|
+
transform: [
|
|
25
|
+
Rotation3D { angle: -90; axis: "0,1,0" }
|
|
26
|
+
]
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// vim:set ts=4 sw=4 et:
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import QtQuick 2.0
|
|
2
|
+
import Qt3D 2.0
|
|
3
|
+
import Qt3D.Shapes 2.0
|
|
4
|
+
import TorQML.Shapes 0.1
|
|
5
|
+
|
|
6
|
+
TQPrimitive {
|
|
7
|
+
id: _obj
|
|
8
|
+
property real radius: 1
|
|
9
|
+
property alias length: _obj.xLength
|
|
10
|
+
|
|
11
|
+
yWidth: radius
|
|
12
|
+
zDepth: radius
|
|
13
|
+
|
|
14
|
+
mesh: Mesh { source: "../../../assets/shapes/TQCylinder.obj" }
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// vim:set ts=4 sw=4 et:
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import QtQuick 2.0
|
|
2
|
+
import Qt3D 2.0
|
|
3
|
+
import Qt3D.Shapes 2.0
|
|
4
|
+
import TorQML.Shapes 0.1
|
|
5
|
+
|
|
6
|
+
Item3D {
|
|
7
|
+
id: _obj
|
|
8
|
+
property real step: 1.0
|
|
9
|
+
property real size: 10
|
|
10
|
+
property string color: "#33FFFFFF"
|
|
11
|
+
Repeater {
|
|
12
|
+
model: _obj.size / _obj.step * 2 + 1
|
|
13
|
+
delegate: TQCylinder {
|
|
14
|
+
radius: _obj.step / 20
|
|
15
|
+
length: _obj.size * 2
|
|
16
|
+
centered: true
|
|
17
|
+
position: Qt.vector3d(0, _obj.step * index - _obj.size, 0)
|
|
18
|
+
color: _obj.color
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
Repeater {
|
|
22
|
+
model: _obj.size / _obj.step * 2 + 1
|
|
23
|
+
delegate: TQCylinder {
|
|
24
|
+
radius: _obj.step / 20
|
|
25
|
+
length: _obj.size * 2
|
|
26
|
+
centered: true
|
|
27
|
+
position: Qt.vector3d(_obj.step * index - _obj.size, 0, 0)
|
|
28
|
+
transform: [
|
|
29
|
+
Rotation3D { angle: 90; axis: "0,0,1" }
|
|
30
|
+
]
|
|
31
|
+
color: _obj.color
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// vim:set ts=4 sw=4 et:
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import QtQuick 2.0
|
|
2
|
+
import Qt3D 2.0
|
|
3
|
+
|
|
4
|
+
Item3D {
|
|
5
|
+
property real xLength: 1
|
|
6
|
+
property real yWidth: 1
|
|
7
|
+
property real zDepth: 1
|
|
8
|
+
property bool centered: false
|
|
9
|
+
property alias color: _effect.color
|
|
10
|
+
property alias texture: _effect.texture
|
|
11
|
+
|
|
12
|
+
property alias mesh: _obj.mesh
|
|
13
|
+
|
|
14
|
+
Item3D {
|
|
15
|
+
id: _obj
|
|
16
|
+
effect: Effect {
|
|
17
|
+
id: _effect
|
|
18
|
+
blending: true
|
|
19
|
+
color: "red"
|
|
20
|
+
}
|
|
21
|
+
transform: [
|
|
22
|
+
Scale3D { scale: Qt.vector3d(xLength, yWidth, zDepth) },
|
|
23
|
+
Translation3D { translate: Qt.vector3d( centered ? -xLength / 2 : 0, 0, 0) }
|
|
24
|
+
]
|
|
25
|
+
}
|
|
26
|
+
Component.onCompleted: {
|
|
27
|
+
if("xLength" in parent){
|
|
28
|
+
position = Qt.vector3d( parent.xLength / ( parent.centered ? 2 : 1 ), 0, 0)
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// vim:set ts=4 sw=4 et:
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import QtQuick 2.0
|
|
2
|
+
import Qt3D 2.0
|
|
3
|
+
import Qt3D.Shapes 2.0
|
|
4
|
+
import TorQML.Shapes 0.1
|
|
5
|
+
|
|
6
|
+
TQPrimitive {
|
|
7
|
+
id: _obj
|
|
8
|
+
property real radius: 1
|
|
9
|
+
|
|
10
|
+
xLength: radius
|
|
11
|
+
yWidth: radius
|
|
12
|
+
zDepth: radius
|
|
13
|
+
centered: true
|
|
14
|
+
|
|
15
|
+
mesh: Mesh { source: "../../../assets/shapes/TQSphere.obj" }
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// vim:set ts=4 sw=4 et:
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import QtQuick 2.0
|
|
2
|
+
import Qt3D 2.0
|
|
3
|
+
import Qt3D.Shapes 2.0
|
|
4
|
+
import TorQML.Shapes 0.1
|
|
5
|
+
|
|
6
|
+
TQPrimitive {
|
|
7
|
+
id: _obj
|
|
8
|
+
property real radius: 1
|
|
9
|
+
|
|
10
|
+
xLength: radius
|
|
11
|
+
yWidth: radius
|
|
12
|
+
zDepth: radius
|
|
13
|
+
|
|
14
|
+
centered: false
|
|
15
|
+
mesh: Mesh { source: "../../../assets/shapes/TQTorus.obj" }
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// vim:set ts=4 sw=4 et:
|