class Assimp::MaterialProperty
Constants
- BOOL_PROPERTIES
- COLOR_PROPERTIES
- FLOAT_PROPERTIES
- INTEGER_PROPERTIES
- STRING_PROPERTIES
- TEX_PROPERTIES
Public Class Methods
property(key, val, semantic: 0, index: 0, type: nil)
click to toggle source
# File lib/assimp/material.rb, line 175 def self.property(key, val, semantic: 0, index: 0, type: nil) p = MaterialProperty::new p.set_property(key, val, semantic: semantic, index: index, type: type) end
Public Instance Methods
data()
click to toggle source
# File lib/assimp/material.rb, line 292 def data case type when :String length = self[:data].read_uint self[:data].get_string(4, length) when :Integer if data_length == 4 i = self[:data].read_int case key when *BOOL_PROPERTIES i != 0 when MATKEY_SHADING_MODEL ShadingMode[i] when MATKEY_MAPPINGMODE_U, MATKEY_MAPPINGMODE_V, MATKEY_MAPPINGMODE_W TextureMapMode[i] when MATKEY_BLEND_FUNC BlendMode[i] when MATKEY_TEXFLAGS TextureFlags[i] when MATKEY_MAPPING TextureMapping[i] when MATKEY_TEXOP TextureOp[i] else i end elsif data_length > 4 self[:data].read_array_of_int(data_length/4) else nil end when :Float if data_length == 4 self[:data].read_float elsif data_length > 4 if key.match("\\$clr\\.") && data_length == Color4D.size Color4D.new(self[:data]) elsif key == MATKEY_TEXMAP_AXIS && data_length == Vector3D.size Vector3D.new(self[:data]) elsif key == MATKEY_UVTRANSFORM && data_length == UVTransform.size UVTransform.new(self[:data]) else self[:data].read_array_of_float(data_length/4) end else nil end when :Double if data_length == 8 self[:data].read_double elsif data_length > 8 if key.match("\\$clr\\.") && data_length == Color4D.size Color4D.new(self[:data]) elsif key == MATKEY_TEXMAP_AXIS && data_length == Vector3D.size Vector3D.new(self[:data]) elsif key == MATKEY_UVTRANSFORM && data_length == UVTransform.size UVTransform.new(self[:data]) else self[:data].read_array_of_double(data_length/8) end else nil end when :Buffer self[:data].slice(0, data_length) else raise "Invalid type: #{type.inspect}!" end end
data=(val)
click to toggle source
# File lib/assimp/material.rb, line 216 def data=(val) ptr = nil case type when :String length = val.bytesize ptr = FFI::MemoryPointer::new(length+4+1) ptr.write_uint(length) ptr.put_string(4, val) when :Integer if val.kind_of? Array ptr = FFI::MemoryPointer::new(:int, val.length) ptr.write_array_of_int(val) else i = nil case key when *BOOL_PROPERTIES if val.nil? || val == false || val == 0 i = Assimp::FALSE else i = Assimp::TRUE end when MATKEY_SHADING_MODEL i = ShadingMode.to_native(val, nil) when MATKEY_MAPPINGMODE_U, MATKEY_MAPPINGMODE_V, MATKEY_MAPPINGMODE_W i = TextureMapMode.to_native(val, nil) when MATKEY_BLEND_FUNC i = BlendMode.to_native(val, nil) when MATKEY_TEXFLAGS i = TextureFlags.to_native(val, nil) when MATKEY_MAPPING i = TextureMapping.to_native(val, nil) when MATKEY_TEXOP i = TextureOp.to_native(val, nil) else i = val end ptr = FFI::MemoryPointer::new(:int) ptr.write_int(i) end when :Float if val.kind_of? Array ptr = FFI::MemoryPointer::new(:float, val.length) ptr.write_array_of_float(val) elsif val.kind_of? FFI::Struct ptr = FFI::MemoryPointer::new(val.class.size) ptr.write_array_of_uint8(val.pointer.read_array_of_uint8(val.class.size)) else ptr = FFI::MemoryPointer::new(:float) ptr.write_float(val) end when :Double if val.kind_of? Array ptr = FFI::MemoryPointer::new(:double, val.length) ptr.write_array_of_double(val) elsif val.kind_of? FFI::Struct ptr = FFI::MemoryPointer::new(val.class.size) ptr.write_array_of_uint8(val.pointer.read_array_of_uint8(val.class.size)) else ptr.write_double(val) end when :Buffer if val.kind_of? FFI::Pointer ptr = FFI::MemoryPointer::new(val.size) ptr.write_array_of_uint8(val.pointer.read_array_of_uint8(val.size)) else ptr = FFI::MemoryPointer.from_string(val) end else raise ArgumentError::new("Invalid type: #{type.inspect}!") end @data = ptr self[:data] = ptr self.data_length = (ptr ? ptr.size : 0) val end
set_property(key, val, semantic: 0, index: 0, type: nil)
click to toggle source
# File lib/assimp/material.rb, line 180 def set_property(key, val, semantic: 0, index: 0, type: nil) if type self.type = type else case key when *STRING_PROPERTIES self.type = :String when *INTEGER_PROPERTIES self.type = :Integer when *FLOAT_PROPERTIES if ENV["ASSIMP_DOUBLE_PRECISION"] self.type = :Double else self.type = :Float end else raise ArgumentError::new("Could not determine property type!") end end if semantic == 0 && TEX_PROPERTIES.include?(key) raise ArgumentError::new("Missing semantic for texture property!") elsif semantic != 0 && ! TEX_PROPERTIES.include?(key) raise ArgumentError::new("Semantic given for non texture property!") else self.semantic = semantic end if index != 0 && ! TEX_PROPERTIES.include?(key) raise ArgumentError::new("Index given for non texture property!") else self.index = index end self.key = key self.data = val self end
to_s()
click to toggle source
# File lib/assimp/material.rb, line 362 def to_s "#{key}: #{data}" end