cosmos 4.2.2-java → 4.2.3-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +7 -3
- data/autohotkey/tools/cmd_sender.ahk +35 -35
- data/bin/dart_import +3 -1
- data/cosmos.gemspec +4 -3
- data/data/crc.txt +14 -14
- data/demo/config/dart/Gemfile +2 -2
- data/demo/config/data/crc.txt +1 -1
- data/install/config/dart/Gemfile +2 -2
- data/install/config/data/crc.txt +3 -3
- data/lib/cosmos/dart/lib/dart_common.rb +1 -1
- data/lib/cosmos/gui/opengl/gl_scene.rb +3 -3
- data/lib/cosmos/gui/opengl/gl_shape.rb +27 -29
- data/lib/cosmos/gui/opengl/gl_viewer.rb +127 -124
- data/lib/cosmos/gui/opengl/opengl.rb +6 -0
- data/lib/cosmos/gui/opengl/stl_reader.rb +7 -7
- data/lib/cosmos/gui/opengl/stl_shape.rb +16 -16
- data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +53 -51
- data/lib/cosmos/packets/commands.rb +22 -0
- data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +20 -0
- data/lib/cosmos/tools/script_runner/script_runner_frame.rb +6 -2
- data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +1 -1
- data/lib/cosmos/utilities/ruby_lex_utils.rb +1 -6
- data/lib/cosmos/version.rb +4 -4
- metadata +2 -8
@@ -209,31 +209,32 @@ module Cosmos
|
|
209
209
|
pickh = @wvt.h / h.to_f
|
210
210
|
|
211
211
|
# Set pick projection matrix
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
212
|
+
glMatrixMode(OpenGL::GL_PROJECTION)
|
213
|
+
glLoadIdentity()
|
214
|
+
glTranslatef(pickx, picky, 0.0)
|
215
|
+
glScalef(pickw, pickh, 1.0)
|
216
216
|
case projection
|
217
217
|
when :PARALLEL
|
218
|
-
|
218
|
+
glOrtho(@wvt.left, @wvt.right, @wvt.bottom, @wvt.top, @wvt.hither, @wvt.yon)
|
219
219
|
when :PERSPECTIVE
|
220
|
-
|
220
|
+
glFrustum(@wvt.left, @wvt.right, @wvt.bottom, @wvt.top, @wvt.hither, @wvt.yon)
|
221
221
|
end
|
222
222
|
|
223
223
|
# Model matrix
|
224
|
-
|
225
|
-
|
224
|
+
glMatrixMode(OpenGL::GL_MODELVIEW)
|
225
|
+
glLoadMatrixf(@transform.to_a.flatten.pack('F*'))
|
226
226
|
|
227
227
|
# Loop until room enough to fit
|
228
228
|
while true
|
229
229
|
nhits = 0
|
230
|
-
buffer =
|
231
|
-
|
232
|
-
|
233
|
-
|
230
|
+
buffer = ' ' * mh
|
231
|
+
glSelectBuffer(mh, buffer)
|
232
|
+
glRenderMode(OpenGL::GL_SELECT)
|
233
|
+
glInitNames()
|
234
|
+
glPushName(0)
|
234
235
|
@scene.hit(self) if @scene
|
235
|
-
|
236
|
-
nhits =
|
236
|
+
glPopName()
|
237
|
+
nhits = glRenderMode(OpenGL::GL_RENDER)
|
237
238
|
mh <<= 1
|
238
239
|
break if nhits >= 0
|
239
240
|
end
|
@@ -273,111 +274,109 @@ module Cosmos
|
|
273
274
|
end
|
274
275
|
|
275
276
|
def initializeGL
|
276
|
-
GL.GetError()
|
277
|
-
|
278
277
|
# Initialize GL context
|
279
|
-
|
278
|
+
glRenderMode(OpenGL::GL_RENDER)
|
280
279
|
|
281
280
|
# Fast hints
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
281
|
+
glHint(OpenGL::GL_POLYGON_SMOOTH_HINT, OpenGL::GL_FASTEST)
|
282
|
+
glHint(OpenGL::GL_PERSPECTIVE_CORRECTION_HINT, OpenGL::GL_FASTEST)
|
283
|
+
glHint(OpenGL::GL_FOG_HINT, OpenGL::GL_FASTEST)
|
284
|
+
glHint(OpenGL::GL_LINE_SMOOTH_HINT, OpenGL::GL_FASTEST)
|
285
|
+
glHint(OpenGL::GL_POINT_SMOOTH_HINT, OpenGL::GL_FASTEST)
|
287
286
|
|
288
287
|
# Z-buffer test on
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
288
|
+
glEnable(OpenGL::GL_DEPTH_TEST)
|
289
|
+
glDepthFunc(OpenGL::GL_LESS)
|
290
|
+
glDepthRange(0.0, 1.0)
|
291
|
+
glClearDepth(1.0)
|
292
|
+
glClearColor(@top_background[0], @top_background[1], @top_background[2], @top_background[3])
|
294
293
|
|
295
294
|
# No face culling
|
296
|
-
|
297
|
-
|
298
|
-
|
295
|
+
glDisable(OpenGL::GL_CULL_FACE)
|
296
|
+
glCullFace(OpenGL::GL_BACK)
|
297
|
+
glFrontFace(OpenGL::GL_CCW)
|
299
298
|
|
300
299
|
# Two sided lighting
|
301
|
-
|
302
|
-
|
300
|
+
glLightModeli(OpenGL::GL_LIGHT_MODEL_TWO_SIDE, 1)
|
301
|
+
glLightModelfv(OpenGL::GL_LIGHT_MODEL_AMBIENT, @ambient.pack('F*'))
|
303
302
|
|
304
303
|
# Preferred blend over background
|
305
|
-
|
304
|
+
glBlendFunc(OpenGL::GL_SRC_ALPHA, OpenGL::GL_ONE_MINUS_SRC_ALPHA)
|
306
305
|
|
307
306
|
enable_light(@light)
|
308
307
|
# Viewer is close
|
309
|
-
|
308
|
+
glLightModeli(OpenGL::GL_LIGHT_MODEL_LOCAL_VIEWER, 1)
|
310
309
|
|
311
310
|
enable_material(@material)
|
312
311
|
# Vertex colors change both diffuse and ambient
|
313
|
-
|
314
|
-
|
312
|
+
glColorMaterial(OpenGL::GL_FRONT_AND_BACK, OpenGL::GL_AMBIENT_AND_DIFFUSE)
|
313
|
+
glDisable(OpenGL::GL_COLOR_MATERIAL)
|
315
314
|
|
316
315
|
# Simplest and fastest drawing is default
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
316
|
+
glShadeModel(OpenGL::GL_FLAT)
|
317
|
+
glDisable(OpenGL::GL_BLEND)
|
318
|
+
glDisable(OpenGL::GL_LINE_SMOOTH)
|
319
|
+
glDisable(OpenGL::GL_POINT_SMOOTH)
|
320
|
+
glDisable(OpenGL::GL_COLOR_MATERIAL)
|
322
321
|
|
323
322
|
# Lighting
|
324
|
-
|
323
|
+
glDisable(OpenGL::GL_LIGHTING)
|
325
324
|
|
326
325
|
# No normalization of normals (it's broken on some machines anyway)
|
327
|
-
|
326
|
+
glDisable(OpenGL::GL_NORMALIZE)
|
328
327
|
|
329
328
|
# Dithering if needed
|
330
|
-
|
329
|
+
glDisable(OpenGL::GL_DITHER)
|
331
330
|
end
|
332
331
|
|
333
332
|
def paintGL
|
334
333
|
# Set viewport
|
335
|
-
|
334
|
+
glViewport(0, 0, @wvt.w, @wvt.h)
|
336
335
|
reset_gl_state()
|
337
336
|
clear_solid_background()
|
338
337
|
|
339
338
|
# Depth test on by default
|
340
|
-
|
341
|
-
|
339
|
+
glDepthMask(OpenGL::GL_TRUE)
|
340
|
+
glEnable(OpenGL::GL_DEPTH_TEST)
|
342
341
|
|
343
342
|
# Switch to projection matrix
|
344
|
-
|
345
|
-
|
343
|
+
glMatrixMode(OpenGL::GL_PROJECTION)
|
344
|
+
glLoadIdentity
|
346
345
|
case @projection
|
347
346
|
when :PARALLEL
|
348
|
-
|
347
|
+
glOrtho(@wvt.left, @wvt.right, @wvt.bottom, @wvt.top, @wvt.hither, @wvt.yon)
|
349
348
|
when :PERSPECTIVE
|
350
|
-
|
349
|
+
glFrustum(@wvt.left, @wvt.right, @wvt.bottom, @wvt.top, @wvt.hither, @wvt.yon)
|
351
350
|
end
|
352
351
|
|
353
352
|
# Switch to model matrix
|
354
|
-
|
355
|
-
|
353
|
+
glMatrixMode(OpenGL::GL_MODELVIEW)
|
354
|
+
glLoadIdentity
|
356
355
|
|
357
356
|
enable_light(@light)
|
358
357
|
enable_material(@material)
|
359
358
|
|
360
359
|
# Color commands change both
|
361
|
-
|
360
|
+
glColorMaterial(OpenGL::GL_FRONT_AND_BACK, OpenGL::GL_AMBIENT_AND_DIFFUSE)
|
362
361
|
# Global ambient light
|
363
|
-
|
362
|
+
glLightModelfv(OpenGL::GL_LIGHT_MODEL_AMBIENT, @ambient.pack('F*'))
|
364
363
|
|
365
364
|
# Enable fog
|
366
365
|
if @options.include?(:VIEWER_FOG)
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
366
|
+
glEnable(OpenGL::GL_FOG)
|
367
|
+
glFog(OpenGL::GL_FOG_COLOR, @top_background) # Disappear into the background
|
368
|
+
glFogf(OpenGL::GL_FOG_START, (@distance - @diameter).to_f) # Range tight around model position
|
369
|
+
glFogf(OpenGL::GL_FOG_END, (@distance + @diameter).to_f) # Far place same as clip plane:- clipped stuff is in the mist!
|
370
|
+
glFogi(OpenGL::GL_FOG_MODE, OpenGL::GL_LINEAR) # Simple linear depth cueing
|
372
371
|
end
|
373
372
|
|
374
373
|
# Dithering
|
375
|
-
|
374
|
+
glEnable(OpenGL::GL_DITHER) if @options.include?(:VIEWER_DITHER)
|
376
375
|
# Enable lighting
|
377
|
-
|
376
|
+
glEnable(OpenGL::GL_LIGHTING) if @options.include?(:VIEWER_LIGHTING)
|
378
377
|
|
379
378
|
# Set model matrix
|
380
|
-
|
379
|
+
glLoadMatrixf(@transform.to_a.flatten.pack('F*'))
|
381
380
|
|
382
381
|
draw_axis() if (@draw_axis and @draw_axis > 0)
|
383
382
|
|
@@ -386,49 +385,53 @@ module Cosmos
|
|
386
385
|
end
|
387
386
|
|
388
387
|
def reset_gl_state
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
388
|
+
glShadeModel(OpenGL::GL_SMOOTH)
|
389
|
+
glPolygonMode(OpenGL::GL_FRONT_AND_BACK, OpenGL::GL_FILL)
|
390
|
+
glDisable(OpenGL::GL_LIGHTING)
|
391
|
+
glDisable(OpenGL::GL_ALPHA_TEST)
|
392
|
+
glDisable(OpenGL::GL_BLEND)
|
393
|
+
glDisable(OpenGL::GL_DITHER)
|
394
|
+
glDisable(OpenGL::GL_FOG)
|
395
|
+
glDisable(OpenGL::GL_LOGIC_OP)
|
396
|
+
glDisable(OpenGL::GL_POLYGON_SMOOTH)
|
397
|
+
glDisable(OpenGL::GL_POLYGON_STIPPLE)
|
398
|
+
glDisable(OpenGL::GL_STENCIL_TEST)
|
399
|
+
glDisable(OpenGL::GL_CULL_FACE)
|
400
|
+
glDisable(OpenGL::GL_COLOR_MATERIAL)
|
402
401
|
|
403
402
|
# Reset matrices
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
403
|
+
glMatrixMode(OpenGL::GL_PROJECTION)
|
404
|
+
glLoadIdentity
|
405
|
+
glMatrixMode(OpenGL::GL_MODELVIEW)
|
406
|
+
glLoadIdentity
|
408
407
|
end
|
409
408
|
|
410
409
|
def clear_solid_background
|
411
|
-
|
412
|
-
|
410
|
+
glClearDepth(1.0)
|
411
|
+
glClearColor(@top_background[0], @top_background[1], @top_background[2], @top_background[3])
|
413
412
|
if @top_background == @bottom_background
|
414
413
|
begin
|
415
|
-
|
414
|
+
glClear(OpenGL::GL_COLOR_BUFFER_BIT | OpenGL::GL_DEPTH_BUFFER_BIT)
|
416
415
|
rescue
|
417
416
|
# Raises false error on Mac
|
418
417
|
end
|
419
418
|
else # Clear to gradient background
|
420
419
|
begin
|
421
|
-
|
420
|
+
glClear(OpenGL::GL_DEPTH_BUFFER_BIT)
|
422
421
|
rescue
|
423
422
|
# Raises false error on Mac
|
424
423
|
end
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
424
|
+
glDisable(OpenGL::GL_DEPTH_TEST)
|
425
|
+
glDepthMask(OpenGL::GL_FALSE)
|
426
|
+
glBegin(OpenGL::GL_TRIANGLE_STRIP)
|
427
|
+
glColor4f(@bottom_background[0], @bottom_background[1], @bottom_background[2], @bottom_background[3])
|
428
|
+
glVertex3f(-1.0, -1.0, 0.0)
|
429
|
+
glVertex3f(1.0, -1.0, 0.0)
|
430
|
+
glColor4f(@top_background[0], @top_background[1], @top_background[2], @bottom_background[3])
|
431
|
+
glVertex3f(-1.0, 1.0, 0.0)
|
432
|
+
glVertex3f(1.0, 1.0, 0.0)
|
430
433
|
begin
|
431
|
-
|
434
|
+
glEnd
|
432
435
|
rescue
|
433
436
|
# Raises false error on Mac
|
434
437
|
end
|
@@ -436,58 +439,58 @@ module Cosmos
|
|
436
439
|
end
|
437
440
|
|
438
441
|
def draw_axis
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
442
|
+
glPushMatrix
|
443
|
+
glLineWidth(2.5)
|
444
|
+
glColor3f(1.0, 0.0, 0.0)
|
445
|
+
glBegin(OpenGL::GL_LINES)
|
446
|
+
glVertex3f(-@draw_axis.to_f, 0.0, 0.0)
|
447
|
+
glVertex3f(@draw_axis.to_f, 0.0, 0.0)
|
445
448
|
begin
|
446
|
-
|
449
|
+
glEnd
|
447
450
|
rescue
|
448
451
|
# Raises false error on Mac
|
449
452
|
end
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
453
|
+
glColor3f(0.0, 1.0, 0.0)
|
454
|
+
glBegin(OpenGL::GL_LINES)
|
455
|
+
glVertex3f(0, -@draw_axis, 0.0)
|
456
|
+
glVertex3f(0, @draw_axis, 0)
|
454
457
|
begin
|
455
|
-
|
458
|
+
glEnd
|
456
459
|
rescue
|
457
460
|
# Raises false error on Mac
|
458
461
|
end
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
462
|
+
glColor3f(0.0, 0.0, 1.0)
|
463
|
+
glBegin(OpenGL::GL_LINES)
|
464
|
+
glVertex3f(0, 0, -@draw_axis)
|
465
|
+
glVertex3f(0, 0, @draw_axis)
|
463
466
|
begin
|
464
|
-
|
467
|
+
glEnd
|
465
468
|
rescue
|
466
469
|
# Raises false error on Mac
|
467
470
|
end
|
468
|
-
|
471
|
+
glPopMatrix
|
469
472
|
end
|
470
473
|
|
471
474
|
def enable_light(light)
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
475
|
+
glEnable(OpenGL::GL_LIGHT0)
|
476
|
+
glLightfv(OpenGL::GL_LIGHT0, OpenGL::GL_AMBIENT, light.ambient.pack('F*'))
|
477
|
+
glLightfv(OpenGL::GL_LIGHT0, OpenGL::GL_DIFFUSE, light.diffuse.pack('F*'))
|
478
|
+
glLightfv(OpenGL::GL_LIGHT0, OpenGL::GL_SPECULAR, light.specular.pack('F*'))
|
479
|
+
glLightfv(OpenGL::GL_LIGHT0, OpenGL::GL_POSITION, light.position.pack('F*'))
|
480
|
+
glLightfv(OpenGL::GL_LIGHT0, OpenGL::GL_SPOT_DIRECTION, light.direction.pack('F*'))
|
481
|
+
glLightf(OpenGL::GL_LIGHT0, OpenGL::GL_SPOT_EXPONENT, light.exponent)
|
482
|
+
glLightf(OpenGL::GL_LIGHT0, OpenGL::GL_SPOT_CUTOFF, light.cutoff)
|
483
|
+
glLightf(OpenGL::GL_LIGHT0, OpenGL::GL_CONSTANT_ATTENUATION, light.c_attn)
|
484
|
+
glLightf(OpenGL::GL_LIGHT0, OpenGL::GL_LINEAR_ATTENUATION, light.l_attn)
|
485
|
+
glLightf(OpenGL::GL_LIGHT0, OpenGL::GL_QUADRATIC_ATTENUATION, light.q_attn)
|
483
486
|
end
|
484
487
|
|
485
488
|
def enable_material(material)
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
489
|
+
glMaterialfv(OpenGL::GL_FRONT_AND_BACK, OpenGL::GL_AMBIENT, material.ambient.pack('F*'))
|
490
|
+
glMaterialfv(OpenGL::GL_FRONT_AND_BACK, OpenGL::GL_DIFFUSE, material.diffuse.pack('F*'))
|
491
|
+
glMaterialfv(OpenGL::GL_FRONT_AND_BACK, OpenGL::GL_SPECULAR, material.specular.pack('F*'))
|
492
|
+
glMaterialfv(OpenGL::GL_FRONT_AND_BACK, OpenGL::GL_EMISSION, material.emission.pack('F*'))
|
493
|
+
glMaterialf(OpenGL::GL_FRONT_AND_BACK, OpenGL::GL_SHININESS, material.shininess)
|
491
494
|
end
|
492
495
|
|
493
496
|
def resizeGL(width, height)
|
@@ -65,13 +65,13 @@ module Cosmos
|
|
65
65
|
end
|
66
66
|
|
67
67
|
def draw_triangles
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
68
|
+
glEnableClientState(OpenGL::GL_NORMAL_ARRAY)
|
69
|
+
glEnableClientState(OpenGL::GL_VERTEX_ARRAY)
|
70
|
+
glNormalPointer(OpenGL::GL_FLOAT, 0, @normals_packed)
|
71
|
+
glVertexPointer(3, OpenGL::GL_FLOAT, 0, @vertexes_packed)
|
72
|
+
glDrawArrays(OpenGL::GL_TRIANGLES, 0, @triangles.length * 3)
|
73
|
+
glDisableClientState(OpenGL::GL_NORMAL_ARRAY)
|
74
|
+
glDisableClientState(OpenGL::GL_VERTEX_ARRAY)
|
75
75
|
end
|
76
76
|
|
77
77
|
def process(filename, scaling_factor = 1.0)
|
@@ -63,17 +63,17 @@ module Cosmos
|
|
63
63
|
def drawshape(viewer)
|
64
64
|
@viewer = viewer
|
65
65
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
66
|
+
glPushMatrix()
|
67
|
+
glEnable(OpenGL::GL_BLEND)
|
68
|
+
glBlendFunc(OpenGL::GL_SRC_ALPHA, OpenGL::GL_ONE_MINUS_SRC_ALPHA)
|
69
|
+
glColor4f(@color[0], @color[1], @color[2], @color[3])
|
70
|
+
glRotatef(@rotation_x, 1.0, 0.0, 0.0) if @rotation_x
|
71
|
+
glRotatef(@rotation_y, 0.0, 1.0, 0.0) if @rotation_y
|
72
|
+
glRotatef(@rotation_z, 0.0, 0.0, 1.0) if @rotation_z
|
73
|
+
glMaterialfv(OpenGL::GL_FRONT_AND_BACK, OpenGL::GL_AMBIENT_AND_DIFFUSE, @color.pack('F*'))
|
74
|
+
draw_stl()
|
75
|
+
glDisable(OpenGL::GL_BLEND)
|
76
|
+
glPopMatrix()
|
77
77
|
end
|
78
78
|
|
79
79
|
def export
|
@@ -110,18 +110,18 @@ module Cosmos
|
|
110
110
|
end
|
111
111
|
|
112
112
|
def draw_stl
|
113
|
-
|
114
|
-
|
115
|
-
|
113
|
+
glPushMatrix()
|
114
|
+
glMaterialfv(OpenGL::GL_FRONT_AND_BACK, OpenGL::GL_SPECULAR, [1.0, 1.0, 1.0].pack("F*"))
|
115
|
+
glMaterialf(OpenGL::GL_FRONT_AND_BACK, OpenGL::GL_SHININESS, 100.0)
|
116
116
|
if @mystl.triangles.empty?
|
117
117
|
load_stl
|
118
118
|
else
|
119
119
|
@mystl.draw_triangles()
|
120
120
|
end
|
121
|
-
|
121
|
+
glPopMatrix()
|
122
122
|
|
123
123
|
# Set Pixel Storage Size
|
124
|
-
|
124
|
+
glPixelStorei(OpenGL::GL_UNPACK_ALIGNMENT, 1)
|
125
125
|
end
|
126
126
|
end
|
127
127
|
end
|