Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ def self.update_state(state, resolve_id, model_card_id, source_application, root
converter = Converters::ToNativeV2.new(state,
root_obj['instanceDefinitionProxies'] || [],
root_obj['renderMaterialProxies'] || [],
root_obj['levelProxies'] || [],
source_application,
model_card)
start_time = Time.now.to_f
Expand Down
1 change: 1 addition & 0 deletions speckle_connector_3/src/constants/type_constants.rb
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ module SpeckleConnector3
SPECKLE_CORE_MODELS_INSTANCES_INSTANCE_PROXY = 'Speckle.Core.Models.Instances.InstanceProxy'
SPECKLE_CORE_MODELS_INSTANCES_INSTANCE_DEFINITION_PROXY = 'Speckle.Core.Models.Instances.InstanceDefinitionProxy'
SPECKLE_CORE_OTHER_RENDER_MATERIAL_PROXY = 'Objects.Other.RenderMaterialProxy'
SPECKLE_CORE_OTHER_LEVEL_PROXY = 'Objects.Other.LevelProxy'
SPECKLE_CORE_OTHER_COLOR_PROXY = 'Speckle.Core.Models.Proxies.ColorProxy'

# DATA OBJECTS
Expand Down
57 changes: 26 additions & 31 deletions speckle_connector_3/src/convertors/to_native_v2.rb
Original file line number Diff line number Diff line change
Expand Up @@ -49,16 +49,19 @@ class ToNativeV2 < ConverterV2
# @return [Array<SpeckleObjects::InstanceDefinitionProxy>]
attr_reader :root_definition_proxies

attr_reader :level_proxies

# @return [Array<SpeckleObjects::RenderMaterialProxy>]
attr_accessor :root_render_material_proxies

# @param definition_proxies [Array<SpeckleObjects::InstanceDefinitionProxy>]
# @param render_material_proxies [Array<SpeckleObjects::RenderMaterialProxy>]
# @param model_card [SpeckleConnector3::Cards::ReceiveCard]
def initialize(state, definition_proxies, render_material_proxies, source_app, model_card)
def initialize(state, definition_proxies, render_material_proxies, level_proxies, source_app, model_card)
super(state, model_card)
@root_definition_proxies = definition_proxies
@root_render_material_proxies = render_material_proxies
@level_proxies = level_proxies
@definition_proxies = {}
@source_app = source_app.downcase
@converted_faces = []
Expand Down Expand Up @@ -199,6 +202,7 @@ def receive_commit_object(obj)
default_commit_layer = sketchup_model.layers.layers.find { |layer| layer.display_name == '@Untagged' }

traverse_commit_object(obj, default_commit_layer, @entities_to_fill)
create_levels
create_levels_from_section_planes
check_hiding_layers_needed
try_create_instance
Expand Down Expand Up @@ -463,17 +467,6 @@ def convert_to_native(state, obj, layer, entities = sketchup_model.entities)
end
faces = converted_entities.select { |e| e.is_a?(Sketchup::Face) }
@converted_faces += faces if faces.any?
if from_revit
begin
# Create levels as section planes if they exists
create_levels(state, obj)
# Create layers from category of object and place object in it
# create_layers_from_categories(state, obj, converted_entities)
rescue StandardError => e
puts "Level could not be created: #{e.message}"
end

end
# Create speckle entities from sketchup entities to achieve continuous traversal.

converted_entities.each do |converted|
Expand Down Expand Up @@ -528,25 +521,27 @@ def find_material_from_proxies(id)
nil
end

# @param state [States::State] state of the speckle application
def create_levels(state, speckle_object)
level = speckle_object['level']
return state if level.nil?
# return state unless level['speckle_type'].include?('Objects.BuiltElements.Level')

level_name = level['name'] || level['id']
is_exist = @entities_to_fill.grep(Sketchup::SectionPlane).any? { |sp| sp.name == level_name }
return state if is_exist

elevation = SpeckleObjects::Geometry.length_to_native(level['elevation'], level['units'])

section_plane = @entities_to_fill.add_section_plane([0, 0, elevation + LEVEL_SHIFT_VALUE], [0, 0, -1])
section_plane.name = level_name
section_plane.layer = levels_layer
SketchupModel::Dictionary::SpeckleEntityDictionaryHandler.write_initial_base_data(
section_plane, level['applicationId'], level['id'], level['speckle_type'], [], model_card.project_id
)
state
def create_levels
return if level_proxies.empty?

level_proxies.each do |level_proxy|
level_data_object = level_proxy['value']
name = level_data_object['name'] || level_data_object['id']
units = level_data_object['units']
elevation_raw = level_data_object['elevation']

is_exist = @entities_to_fill.grep(Sketchup::SectionPlane).any? { |sp| sp.name == name }
next if is_exist

elevation = SpeckleObjects::Geometry.length_to_native(elevation_raw, units)

section_plane = @entities_to_fill.add_section_plane([0, 0, elevation + LEVEL_SHIFT_VALUE], [0, 0, -1])
section_plane.name = name
section_plane.layer = levels_layer
SketchupModel::Dictionary::SpeckleEntityDictionaryHandler.write_initial_base_data(
section_plane, level_data_object['applicationId'], level_data_object['id'], level_data_object['speckle_type'], [], model_card.project_id
)
end
end
end
# rubocop:enable Metrics/ClassLength
Expand Down