Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9871000d84 | |||
| 17a056b3b9 | |||
| a8c5bd573f | |||
| 1d2fe047bf | |||
| 3465f86605 | |||
| 540e727b73 | |||
| 8c576f820c |
+23
-20
@@ -8,54 +8,57 @@ on:
|
||||
workflow_call:
|
||||
outputs:
|
||||
semver:
|
||||
description: "The computed version number for this run"
|
||||
description: "The full SemVer 2.0 version of this build, e.g. '3.0.0-alpha.1234' (note: no 'v'-prefix)"
|
||||
value: ${{ jobs.build.outputs.semver }}
|
||||
file_version:
|
||||
description: "The assembly info version for this run"
|
||||
description: "The file info version, e.g. '3.0.0.1234'"
|
||||
value: ${{ jobs.build.outputs.file_version }}
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
semver: ${{ steps.set-version.outputs.semver }}
|
||||
file_version: ${{ steps.set-info-version.outputs.file-version }}
|
||||
file_version: ${{ steps.set-version.outputs.file-version }}
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Set up Python 3.10
|
||||
uses: actions/setup-python@v3
|
||||
with:
|
||||
python-version: "3.10"
|
||||
|
||||
- name: Install GitVersion
|
||||
uses: gittools/actions/gitversion/setup@v3.0.0
|
||||
with:
|
||||
versionSpec: 6.0.5 # github actions doesnt like 6.1.0 onwards https://github.com/GitTools/actions/blob/main/docs/versions.md
|
||||
- id: set-version
|
||||
name: Set version to output
|
||||
shell: bash
|
||||
run: |
|
||||
TAG=${{ github.ref_name }}
|
||||
if [[ "${{ github.ref }}" != refs/tags/* ]]; then
|
||||
TAG="v3.0.99.${{ github.run_number }}"
|
||||
fi
|
||||
SEMVER="${TAG#v}"
|
||||
FILE_VERSION=$(echo "$TAG" | sed -E 's/^v([0-9]+\.[0-9]+\.[0-9]+).*/\1/')
|
||||
FILE_VERSION="$FILE_VERSION.${{ github.run_number }}"
|
||||
|
||||
- name: Determine Version
|
||||
id: gitversion
|
||||
uses: gittools/actions/gitversion/execute@v3.0.0
|
||||
echo "semver=$SEMVER" >> "$GITHUB_OUTPUT"
|
||||
echo "file-version=$FILE_VERSION" >> "$GITHUB_OUTPUT"
|
||||
|
||||
echo $SEMVER
|
||||
echo $FILE_VERSION
|
||||
|
||||
- name: Set connector version
|
||||
run: |
|
||||
python patch_version.py ${{steps.gitversion.outputs.semVer}}
|
||||
python patch_version.py ${{steps.set-version.outputs.semver}}
|
||||
|
||||
- uses: montudor/action-zip@v1
|
||||
with:
|
||||
args: zip -q -r sketchup.zip vendor speckle_connector_3/ speckle_connector_3.rb
|
||||
|
||||
- name: ⬆️ Upload artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: output-${{steps.gitversion.outputs.semVer}}
|
||||
name: output-${{steps.set-version.outputs.semver}}
|
||||
path: sketchup.zip
|
||||
retention-days: 1
|
||||
if-no-files-found: error
|
||||
compression-level: 0 # no compression
|
||||
- id: set-version
|
||||
name: Set version to output
|
||||
run: echo "semver=${{steps.gitversion.outputs.semVer}}" >> "$GITHUB_OUTPUT" # version will be retrieved from tag?
|
||||
- id: set-info-version
|
||||
name: Set version to output
|
||||
run: echo "file-version=${{steps.gitversion.outputs.AssemblySemVer}}" >> "$GITHUB_OUTPUT" # version will be retrieved from tag?
|
||||
|
||||
@@ -26,7 +26,8 @@ module SpeckleConnector3
|
||||
unless path.nil?
|
||||
new_path_entities = path[-1].definition.entities
|
||||
new_path_entities.add_observer(observers[ENTITIES_OBSERVER])
|
||||
edges = new_path_entities.grep(Sketchup::Edge)
|
||||
# attach observers to only orphan edges since face edges can be detected via face changes.
|
||||
edges = new_path_entities.grep(Sketchup::Edge).filter { |edge| edge.faces.none? }
|
||||
edges.each do |edge|
|
||||
edge.add_observer(observers[ENTITY_OBSERVER])
|
||||
edge.start.add_observer(observers[ENTITY_OBSERVER])
|
||||
|
||||
@@ -27,14 +27,14 @@ module SpeckleConnector3
|
||||
new_state = InitializeMaterials.update_state(new_state)
|
||||
|
||||
# Read speckle entities
|
||||
new_speckle_entities = SketchupModel::Reader::SpeckleEntitiesReader.read(sketchup_model.entities)
|
||||
new_speckle_state = new_state.speckle_state.with_speckle_entities(Immutable::Hash.new(new_speckle_entities))
|
||||
#new_speckle_entities = SketchupModel::Reader::SpeckleEntitiesReader.read(sketchup_model.entities)
|
||||
#new_speckle_state = new_state.speckle_state.with_speckle_entities(Immutable::Hash.new(new_speckle_entities))
|
||||
# POC: Reconsider it when we will do caching between sessions!
|
||||
new_speckle_state = new_speckle_state.with_empty_object_references
|
||||
# new_speckle_state = new_speckle_state.with_empty_object_references
|
||||
# Read mapped entities
|
||||
new_mapped_entities = SketchupModel::Reader::MapperReader.read_mapped_entities(sketchup_model.entities)
|
||||
new_speckle_state = new_speckle_state.with_mapped_entities(Immutable::Hash.new(new_mapped_entities))
|
||||
new_state = new_state.with_speckle_state(new_speckle_state)
|
||||
# new_mapped_entities = SketchupModel::Reader::MapperReader.read_mapped_entities(sketchup_model.entities)
|
||||
# new_speckle_state = new_speckle_state.with_mapped_entities(Immutable::Hash.new(new_mapped_entities))
|
||||
# new_state = new_state.with_speckle_state(new_speckle_state)
|
||||
|
||||
# Read preferences from database and model.
|
||||
preferences = Preferences.read_preferences(new_state.sketchup_state.sketchup_model)
|
||||
|
||||
@@ -18,6 +18,7 @@ module SpeckleConnector3
|
||||
converter = Converters::ToNativeV2.new(state,
|
||||
root_obj['instanceDefinitionProxies'] || [],
|
||||
root_obj['renderMaterialProxies'] || [],
|
||||
root_obj['levelProxies'] || [],
|
||||
source_application,
|
||||
model_card)
|
||||
start_time = Time.now.to_f
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -34,7 +34,17 @@ module SpeckleConnector3
|
||||
edges.each { |edge| remove_edge_have_coplanar_faces(edge) }
|
||||
|
||||
# Remove remaining orphan edges
|
||||
# the commented out code throws an exception over deleted elements
|
||||
# even if they are rejected by deleted? flag
|
||||
# edges.reject(&:deleted?).select { |edge| edge.faces.empty? }.each(&:erase!)
|
||||
edges.each do |edge|
|
||||
next if edge.deleted?
|
||||
begin
|
||||
edge.erase! if edge.faces.empty?
|
||||
rescue Sketchup::DeletedEntityError
|
||||
# Ignore deleted edge
|
||||
end
|
||||
end
|
||||
|
||||
merged_faces(faces)
|
||||
end
|
||||
|
||||
@@ -49,16 +49,19 @@ module SpeckleConnector3
|
||||
# @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 = []
|
||||
@@ -199,6 +202,7 @@ module SpeckleConnector3
|
||||
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
|
||||
@@ -463,17 +467,6 @@ module SpeckleConnector3
|
||||
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|
|
||||
@@ -528,25 +521,27 @@ module SpeckleConnector3
|
||||
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')
|
||||
def create_levels
|
||||
return if level_proxies.empty?
|
||||
|
||||
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
|
||||
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']
|
||||
|
||||
elevation = SpeckleObjects::Geometry.length_to_native(level['elevation'], level['units'])
|
||||
is_exist = @entities_to_fill.grep(Sketchup::SectionPlane).any? { |sp| sp.name == name }
|
||||
next if is_exist
|
||||
|
||||
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
|
||||
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
|
||||
|
||||
@@ -34,7 +34,7 @@ module SpeckleConnector3
|
||||
|
||||
unless material.nil?
|
||||
if render_material_proxies.has_key?(material.persistent_id.to_s)
|
||||
render_material_proxies[material.persistent_id.to_s].add_object_id(entity.persistent_id.to_s)
|
||||
render_material_proxies[material.persistent_id.to_s].try_add_object_id(entity.persistent_id.to_s)
|
||||
else
|
||||
convert_material_and_add_to_proxies(material, entity)
|
||||
end
|
||||
@@ -43,7 +43,7 @@ module SpeckleConnector3
|
||||
unless back_material.nil?
|
||||
if render_material_proxies.has_key?(back_material.persistent_id.to_s)
|
||||
render_material_proxies[back_material.persistent_id.to_s]
|
||||
.add_object_id("#{entity.persistent_id.to_s}_back")
|
||||
.try_add_object_id("#{entity.persistent_id.to_s}_back")
|
||||
else
|
||||
convert_material_and_add_to_proxies(back_material, entity, true)
|
||||
end
|
||||
|
||||
@@ -114,7 +114,8 @@ module SpeckleConnector3
|
||||
speckle_folders = layers_relation[:elements].reject { |layer_or_fol| layer_or_fol[:elements].nil? }
|
||||
|
||||
speckle_folders.each do |speckle_folder|
|
||||
sub_folder = folder.add_folder(speckle_folder[:name])
|
||||
folder_name = speckle_folder[:name] == '' ? 'Unnamed' : speckle_folder[:name]
|
||||
sub_folder = folder.add_folder(folder_name)
|
||||
sub_folder.visible = speckle_folder[:visible] unless speckle_folder[:visible].nil?
|
||||
to_native_layer_folder(speckle_folder, color_proxies, sub_folder, sketchup_model, project_id, model_id)
|
||||
end
|
||||
|
||||
@@ -35,9 +35,11 @@ module SpeckleConnector3
|
||||
end
|
||||
|
||||
# @param object_id [String] application id of the object to add into proxy list
|
||||
def add_object_id(object_id)
|
||||
object_ids.append(object_id)
|
||||
self[:objects] = object_ids
|
||||
def try_add_object_id(object_id)
|
||||
unless object_ids.include?(object_id)
|
||||
object_ids.append(object_id)
|
||||
self[:objects] = object_ids
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -85,7 +85,7 @@ module SpeckleConnector3
|
||||
end
|
||||
# File.exist?(@htm_file) ? dialog.set_file(@htm_file) : dialog.set_url('http://localhost:9091')
|
||||
# dialog.set_url('http://localhost:8082') # uncomment this line if you want to use your local version of ui
|
||||
dialog.set_url('https://boisterous-douhua-e3cefb.netlify.app/') # uncomment this line if you want to use deployed ui on netlify
|
||||
dialog.set_url('https://dui.speckle.systems/') # uncomment this line if you want to use deployed ui on netlify
|
||||
add_exec_callback(dialog)
|
||||
dialog
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user