<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>rbCanvas</title>
<!-- rbcCanvas editor v0.8.2 -->
</head>
<body>
<script type="text/javascript" src="https://rbcanvas.net/0.8.2/runtime/opal/opal_patched.min.js" onload="Opal.load('opal')"></script>
<script type="text/javascript" src="https://rbcanvas.net/0.8.2/runtime/opal/opal-parser_patched.min.js" onload="Opal.load('opal-parser'); Opal.load('parser/ruby23');"></script>
<script type="text/javascript" src="https://rbcanvas.net/0.8.2/runtime/opal/native.min.js" onload="Opal.load('native')"></script>
<script type="text/javascript" src="https://rbcanvas.net/0.8.2/runtime/p5/p5.min.js"></script>
<script type="text/javascript" src="https://rbcanvas.net/0.8.2/runtime/rbcanvas/monkeypatch_p5.js"></script>
<script type="text/javascript" src="https://rbcanvas.net/0.8.2/runtime/rbcanvas/rbcanvas_transpiled_helper.js"></script>
<script type="text/javascript" src="https://rbcanvas.net/0.8.2/runtime/rbcanvas/rbcanvas_transpiled.js"></script>
<script type="text/javascript" src="https://rbcanvas.net/0.8.2/runtime/rbcanvas/microbit_bleuart.js"></script>
<script type="text/javascript" src="https://rbcanvas.net/0.8.2/runtime/rbcanvas/microbit_bleuart_rb.js"></script>
<script type="text/ruby" section="s00" name="main">
def setup
puts RBCanvas::CODE_USER
eval(RBCanvas::CODE_CONSTANT)
eval(RBCanvas::CODE_USER)
end
module RBCanvas
CODE_CONSTANT = <<-'EOC_CONSTANT'
%x{
cv = document.getElementById("defaultCanvas0");
if (cv) {
cv.remove(); // remove default Canvas (100 x 100)
}
// document.body.innerHTML = ""
}
EOC_CONSTANT
CODE_USER = <<-'EOC_USER'
include DX
include Console
$PROGRAM_NAME = "main"
Window.width = 640
Window.height = 480
Window.bgcolor = 'AliceBlue'
Window.loop do
#test
puts Box.new(1, 2, 3).inspect
puts TDO.new.yaw
puts Box[].inspect
exit
end
$PROGRAM_NAME = "main"
EOC_USER
end
</script>
<script type="text/ruby" section="s01" name="3D">
$PROGRAM_NAME = "3D"
class TDO # 3d object(s)
# pos=>[x, y, z], rot=>[pitch, yaw, roll]
@@eye_pos = [0, 0, 0] # meter
@@eye_rot = [0, 0, 0] # degree
@@scale = 30 # px/m
@@instances = []
def initialize(pos = [0, 0, 0], rot = [0, 0, 0], *, color: 'White', shade: true, otl_w: 0, otl_c: 'Black') # *, outline weight, outline color
@pos, @rot = pos, rot
@color, @shade, @otl_w, @otl_c = color, shade, otl_w, otl_c
@@instances << self
end
def self.[] (*args)
self.new(*args)
end
def x() @pos[0] end
def y() @pos[1] end
def z() @pos[2] end
def pitch() @rot[0] end
def yaw() @rot[1] end
def roll() @rot[2] end
def pos() @pos end
def rot() @rot end
def x=(val) @pos[0] = val end
def y=(val) @pos[1] = val end
def z=(val) @pos[2] = val end
def pitch=(val) @rot[0] = val end
def yaw=(val) @rot[1] = val end
def roll=(val) @rot[2] = val end
def pos=(val) @pos = val end
def rot=(val) @rot = val end
def draw
Window.save do
Window.rotate(-@@rot[2])
Window.scale(@@scale)
yeild # drawing proc.
end
end
private
def eye_x() @@eye_pos[0] end
def eye_y() @@eye_pos[1] end
def eye_z() @@eye_pos[2] end
def eye_roll() @@eye_rot[0] end
def eye_yaw() @@eye_rot[1] end
def eye_pitch() @@eye_rot[2] end
def eye_pos() @@eye_pos end
def eye_rot() @@eye_rot end
def scale() @@scale end
def eye_x=(val) @@eye_pos[0] = val end
def eye_y=(val) @@eye_pos[1] = val end
def eye_z=(val) @@eye_pos[2] = val end
def eye_roll=(val) @@eye_rot[0] = val end
def eye_yaw=(val) @@eye_rot[1] = val end
def eye_pitch=(val) @@eye_rot[2] = val end
def eye_pos=(val) @@eye_pos = val end
def eye_rot=(val) @@eye_rot = val end
def scale=(val) @@scale = val end
def draw_objects
@@instances.each(&:draw)
end
end
class Box < TDO
def initialize(*, edges)
super
@edges = edges # edges=>[l, w, h]
end
def l() @edges[0] end
def w() @edges[1] end
def h() @edges[2] end
def l=(val) @edges[0] = val end
def w=(val) @edges[1] = val end
def h=(val) @edges[2] = val end
def draw
super do
##########drawing proc##########
end
end
end
class Sphere < TDO
def initialize(*, r)
super
@r = r
end
def r() @r end
def r=(val) @r = val end
def draw
super do
##########drawing proc##########
end
end
end
$PROGRAM_NAME = "3D"
</script>
</body>
</html>