Class: Rgltf::Builder::MeshBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/rgltf/builder/component_builders.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(builder) ⇒ MeshBuilder

Returns a new instance of MeshBuilder.



8
9
10
11
# File 'lib/rgltf/builder/component_builders.rb', line 8

def initialize(builder)
  @builder = builder
  @primitives = []
end

Instance Attribute Details

#primitivesObject (readonly)

Returns the value of attribute primitives.



6
7
8
# File 'lib/rgltf/builder/component_builders.rb', line 6

def primitives
  @primitives
end

Instance Method Details

#primitive(attributes:, indices: nil, material: nil, mode: :triangles, targets: nil, extensions: nil, extras: nil, **properties) ⇒ Object

Raises:

  • (ArgumentError)


13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/rgltf/builder/component_builders.rb', line 13

def primitive(attributes:, indices: nil, material: nil, mode: :triangles, targets: nil,
              extensions: nil, extras: nil, **properties)
  value = { 'attributes' => attributes_json(attributes) }
  if indices
    @builder.mark_accessor_target(indices, :element_array)
    value['indices'] = @builder.reference(indices, :accessor)
  end
  value['material'] = @builder.reference(material, :material) if material
  mode_number = Primitive::MODES.key(mode.to_sym)
  raise ArgumentError, "unsupported primitive mode #{mode.inspect}" unless mode_number

  value['mode'] = mode_number unless mode_number == 4
  value['targets'] = targets.map { |target| attributes_json(target) } if targets
  value['extensions'] = extensions if extensions
  value['extras'] = extras unless extras.nil?
  properties.each { |key, property| value[@builder.send(:camelize, key)] = property }
  @primitives << value
  self
end