Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update dev with changes from main #3058

Merged
merged 4 commits into from
Nov 22, 2023
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
176 changes: 98 additions & 78 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -10,64 +10,6 @@ dotnet_style_parentheses_in_arithmetic_binary_operators = never_if_unnecessary:n
dotnet_style_parentheses_in_other_binary_operators = never_if_unnecessary:none
dotnet_style_parentheses_in_relational_binary_operators = never_if_unnecessary:none

# ReSharper properties
resharper_align_linq_query = false
resharper_align_multiline_calls_chain = true
resharper_align_multiline_extends_list = true
resharper_align_multiline_for_stmt = true
resharper_align_multiline_parameter = true
resharper_align_multiple_declaration = true
resharper_align_multline_type_parameter_constrains = true
resharper_align_multline_type_parameter_list = true
resharper_braces_for_dowhile = not_required
resharper_braces_for_fixed = not_required
resharper_braces_for_lock = not_required
resharper_braces_for_using = not_required
resharper_csharp_align_multiline_calls_chain = false
resharper_csharp_align_multiline_extends_list = false
resharper_csharp_align_multiline_parameter = false
resharper_csharp_int_align_comments = false
resharper_csharp_outdent_commas = true
resharper_csharp_outdent_dots = false
resharper_csharp_wrap_after_declaration_lpar = true
resharper_csharp_wrap_after_invocation_lpar = true
resharper_csharp_wrap_arguments_style = chop_if_long
resharper_csharp_wrap_before_declaration_rpar = true
resharper_csharp_wrap_before_invocation_rpar = false
resharper_csharp_wrap_extends_list_style = chop_if_long
resharper_csharp_wrap_parameters_style = chop_if_long
resharper_force_attribute_style = join
resharper_indent_nested_fixed_stmt = false
resharper_indent_nested_foreach_stmt = true
resharper_indent_nested_for_stmt = true
resharper_indent_nested_lock_stmt = false
resharper_indent_nested_usings_stmt = false
resharper_indent_nested_while_stmt = true
resharper_int_align = false
resharper_int_align_nested_ternary = false
resharper_int_align_switch_expressions = false
resharper_keep_existing_declaration_block_arrangement = true
resharper_keep_existing_declaration_parens_arrangement = false
resharper_keep_existing_embedded_block_arrangement = true
resharper_keep_existing_enum_arrangement = true
resharper_keep_existing_expr_member_arrangement = true
resharper_keep_existing_initializer_arrangement = false
resharper_local_function_body = expression_body
resharper_max_attribute_length_for_same_line = 20
resharper_max_formal_parameters_on_line = 5
resharper_max_initializer_elements_on_line = 0
resharper_max_invocation_arguments_on_line = 5
resharper_outdent_binary_ops = true
resharper_outdent_dots = false
resharper_place_constructor_initializer_on_same_line = false
resharper_place_simple_initializer_on_single_line = true
resharper_prefer_explicit_discard_declaration = false
resharper_wrap_after_declaration_lpar = false
resharper_wrap_before_invocation_rpar = false
resharper_wrap_chained_binary_expressions = chop_if_long
resharper_wrap_chained_binary_patterns = chop_if_long
resharper_wrap_chained_method_calls = chop_if_long
resharper_xmldoc_indent_text = ZeroIndent

# Standard properties
insert_final_newline = true
Expand Down Expand Up @@ -107,7 +49,6 @@ dotnet_style_qualification_for_event = false:suggestion
# Use language keywords instead of framework type names for type references
dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion
dotnet_style_predefined_type_for_member_access = true:suggestion

# Parentheses preferences
dotnet_style_parentheses_in_arithmetic_binary_operators = never_if_unnecessary:silent
dotnet_style_parentheses_in_relational_binary_operators = never_if_unnecessary:silent
Expand Down Expand Up @@ -155,6 +96,7 @@ csharp_style_pattern_matching_over_as_with_null_check = true:suggestion
csharp_style_inlined_variable_declaration = true:suggestion
csharp_style_throw_expression = true:suggestion
csharp_style_conditional_delegate_call = true:suggestion
csharp_style_namespace_declarations = file_scoped

# Newline settings
csharp_new_line_before_open_brace = all
Expand All @@ -181,36 +123,114 @@ csharp_space_between_method_call_empty_parameter_list_parentheses = false
csharp_preserve_single_line_statements = true
csharp_preserve_single_line_blocks = true



# SYMBOL NAMING RULES
# Copied from https://github.com/dotnet/roslyn/blob/main/.editorconfig
# Adapted rules:
# - Constants are ALL_UPPER
# - Non-private fields are PascalCase

# Non-private fields are PascalCase
dotnet_naming_rule.non_private_readonly_fields_should_be_pascal_case.severity = warning
dotnet_naming_rule.non_private_readonly_fields_should_be_pascal_case.symbols = non_private_readonly_fields
dotnet_naming_rule.non_private_readonly_fields_should_be_pascal_case.style = non_private_readonly_field_style

dotnet_naming_symbols.non_private_readonly_fields.applicable_kinds = field
dotnet_naming_symbols.non_private_readonly_fields.applicable_accessibilities = public, protected, internal, protected_internal, private_protected

dotnet_naming_style.non_private_readonly_field_style.capitalization = pascal_case

# Constants are ALL_UPPER
dotnet_naming_rule.constants_should_be_pascal_case.severity = warning
dotnet_naming_rule.constants_should_be_pascal_case.symbols = constants
dotnet_naming_rule.constants_should_be_pascal_case.style = constant_style

dotnet_naming_symbols.constants.applicable_kinds = field, local
dotnet_naming_symbols.constants.required_modifiers = const

dotnet_naming_style.constant_style.capitalization = all_upper

# Private static fields are camelCase and start with s_
dotnet_naming_rule.static_fields_should_be_camel_case.severity = warning
dotnet_naming_rule.static_fields_should_be_camel_case.symbols = static_fields
dotnet_naming_rule.static_fields_should_be_camel_case.style = static_field_style

dotnet_naming_symbols.static_fields.applicable_accessibilities = private
dotnet_naming_symbols.static_fields.applicable_kinds = field
dotnet_naming_symbols.static_fields.required_modifiers = static

dotnet_naming_style.static_field_style.capitalization = camel_case
dotnet_naming_style.static_field_style.required_prefix = s_


# Instance fields are camelCase and start with _
dotnet_naming_rule.instance_fields_should_be_camel_case.severity = warning
dotnet_naming_rule.instance_fields_should_be_camel_case.symbols = instance_fields
dotnet_naming_rule.instance_fields_should_be_camel_case.style = instance_field_style

dotnet_naming_symbols.instance_fields.applicable_kinds = field

dotnet_naming_style.instance_field_style.capitalization = camel_case
dotnet_naming_style.instance_field_style.required_prefix = _

# Locals and parameters are camelCase
dotnet_naming_rule.locals_should_be_camel_case.severity = warning
dotnet_naming_rule.locals_should_be_camel_case.symbols = locals_and_parameters
dotnet_naming_rule.locals_should_be_camel_case.style = camel_case_style

dotnet_naming_symbols.locals_and_parameters.applicable_kinds = parameter, local

dotnet_naming_style.camel_case_style.capitalization = camel_case

# Local functions are PascalCase
dotnet_naming_rule.local_functions_should_be_pascal_case.severity = warning
dotnet_naming_rule.local_functions_should_be_pascal_case.symbols = local_functions
dotnet_naming_rule.local_functions_should_be_pascal_case.style = local_function_style

dotnet_naming_symbols.local_functions.applicable_kinds = local_function

dotnet_naming_style.local_function_style.capitalization = pascal_case

# By default, name items with PascalCase
dotnet_naming_rule.members_should_be_pascal_case.severity = warning
dotnet_naming_rule.members_should_be_pascal_case.symbols = all_members
dotnet_naming_rule.members_should_be_pascal_case.style = pascal_case_style

dotnet_naming_symbols.all_members.applicable_kinds = *

dotnet_naming_style.pascal_case_style.capitalization = pascal_case


# Analyzer settings
dotnet_diagnostic.ide0055.severity = none
dotnet_analyzer_diagnostic.category-Style.severity = warning # All rules will use this severity unless overriden
dotnet_diagnostic.ide0055.severity = none # Formatting rule: Incompatible with CSharpier
dotnet_diagnostic.ide0007.severity = none # Use var instead of explicit type: Preference
dotnet_diagnostic.ide0009.severity = none # Add this or Me qualification: Preference
dotnet_diagnostic.ide0046.severity = suggestion # Use conditional expression for return: Preference
dotnet_diagnostic.ide0078.severity = suggestion # Use pattern matching: Subjective
dotnet_diagnostic.ide0260.severity = suggestion # Use pattern matching: Subjective


# Maintainability rules
dotnet_diagnostic.ca1501.severity = warning
dotnet_diagnostic.ca1502.severity = warning
dotnet_diagnostic.ca1505.severity = warning
dotnet_diagnostic.ca1506.severity = warning
dotnet_diagnostic.ca1507.severity = warning
dotnet_diagnostic.ca1508.severity = warning
dotnet_diagnostic.ca1509.severity = warning
dotnet_diagnostic.ca1501.severity = warning # Avoid excessive inheritance
dotnet_diagnostic.ca1502.severity = warning # Avoid excessive complexity
dotnet_diagnostic.ca1505.severity = warning # Avoid unmaintainable code
dotnet_diagnostic.ca1506.severity = warning # Avoid excessive class coupling
dotnet_diagnostic.ca1507.severity = warning # Use nameof in place of string
dotnet_diagnostic.ca1508.severity = warning # Avoid dead conditional code
dotnet_diagnostic.ca1509.severity = warning # Invalid entry in code metrics configuration file

dotnet_diagnostic.ca1002.severity = suggestion
dotnet_diagnostic.ca1002.severity = suggestion # Do not expose generic lists

# Misc
dotnet_diagnostic.ca1051.severity = none # Do not declare visible instance fields
dotnet_diagnostic.ca1056.severity = suggestion
dotnet_diagnostic.ca1051.severity = warning # Do not declare visible instance fields
dotnet_diagnostic.ca1056.severity = suggestion # URI properties should not be strings
dotnet_diagnostic.ca1062.severity = none # Public method must check all parameters for null
dotnet_diagnostic.ca1707.severity = none # Remove underscores in names
dotnet_diagnostic.ca1822.severity = suggestion # Mark member as static

dotnet_diagnostic.ca2211.severity = suggestion # Non constant fields should not be visible
dotnet_diagnostic.ca2227.severity = suggestion # Collection props should be read-only


dotnet_analyzer_diagnostic.category-Globalization.severity = none
dotnet_analyzer_diagnostic.category-Security.severity = none
dotnet_analyzer_diagnostic.category-Interoperability.severity = none
dotnet_analyzer_diagnostic.category-SingleFile.severity = none

[*.{appxmanifest,asax,ascx,aspx,axaml,build,c,c++,cc,cginc,compute,cp,cpp,cs,cshtml,cu,cuh,cxx,dtd,fs,fsi,fsscript,fsx,fx,fxh,h,hh,hlsl,hlsli,hlslinc,hpp,hxx,inc,inl,ino,ipp,ixx,master,ml,mli,mpp,mq4,mq5,mqh,nuspec,paml,razor,resw,resx,shader,skin,tpp,usf,ush,vb,xaml,xamlx,xoml,xsd}]
indent_style = space
indent_size = 2
Expand Down
1 change: 1 addition & 0 deletions All.sln.DotSettings
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=QL/@EntryIndexedValue">QL</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SQ/@EntryIndexedValue">SQ</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=UI/@EntryIndexedValue">UI</s:String>
<s:Boolean x:Key="/Default/CodeStyle/Naming/CSharpNaming/ApplyAutoDetectedRules/@EntryValue">False</s:Boolean>
<s:String x:Key="/Default/CustomTools/CustomToolsData/@EntryValue">ExternalToolData|CSharpier|csharpier||csharpier|$FILE$</s:String>
<s:String x:Key="/Default/Environment/StructuredLogging/PropertyNamingType/@EntryValue">CamelCase</s:String>
<s:Boolean x:Key="/Default/UserDictionary/Words/=spandrel/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,9 @@ static void GetModelInfoForElement (const Modeler::Elem& elem,
// edges
for (ULong edgeIdx = 0; edgeIdx < body.GetEdgeCount (); ++edgeIdx) {
const EDGE& edge = body.GetConstEdge (edgeIdx);
modelInfo.AddEdge (ModelInfo::EdgeId (edge.vert1 + vetrexOffset, edge.vert2 + vetrexOffset), ModelInfo::EdgeData (ModelInfo::VisibleEdge, edge.pgon1, edge.pgon2));
// send only edges which have no polygons (only 3D lines)
if (edge.pgon1 == Brep::MeshBrep::Edge::InvalidPgonIdx && edge.pgon2 == Brep::MeshBrep::Edge::InvalidPgonIdx)
modelInfo.AddEdge (ModelInfo::EdgeId (edge.vert1 + vetrexOffset, edge.vert2 + vetrexOffset), ModelInfo::EdgeData (ModelInfo::VisibleEdge, edge.pgon1, edge.pgon2));
}

// polygons
Expand Down
61 changes: 49 additions & 12 deletions ConnectorArchicad/ConnectorArchicad/ConnectorBinding.cs
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,14 @@ public override async Task<StreamState> ReceiveStream(StreamState state, Progres
{
using (var timer = Archicad.Helpers.Timer.CreateReceive(state.StreamId))
{
Base commitObject = await Speckle.Core.Api.Helpers.Receive(IdentifyStream(state));
Base commitObject;

var context = Archicad.Helpers.Timer.Context.Peek;
using (context?.cumulativeTimer?.Begin(ConnectorArchicad.Properties.OperationNameTemplates.SendToServer))
{
commitObject = await Speckle.Core.Api.Helpers.Receive(IdentifyStream(state));
}

if (commitObject is not null)
await ElementConverterManager.Instance.ConvertToNative(state, commitObject, progress);

Expand Down Expand Up @@ -193,20 +200,50 @@ public override void PreviewSend(StreamState state, ProgressViewModel progress)

public override async Task<string> SendStream(StreamState state, ProgressViewModel progress)
{
if (state.Filter == null)
throw new InvalidOperationException("Expected selection filter to be non-null");
try
{
using (var timer = Archicad.Helpers.Timer.CreateSend(state.StreamId))
{
if (state.Filter == null)
{
throw new InvalidOperationException("Expected selection filter to be non-null");
}

var commitObject = await ElementConverterManager.Instance.ConvertToSpeckle(state.Filter, progress);
var commitObject = await ElementConverterManager.Instance.ConvertToSpeckle(state.Filter, progress);

if (commitObject == null)
throw new SpeckleException("Failed to convert objects to speckle: conversion returned null");
if (commitObject == null)
{
timer.Cancel();
throw new SpeckleException("Failed to convert objects to Speckle");
}

var context = Archicad.Helpers.Timer.Context.Peek;
using (context?.cumulativeTimer?.Begin(ConnectorArchicad.Properties.OperationNameTemplates.SendToServer))
{
return await Speckle.Core.Api.Helpers.Send(
IdentifyStream(state),
commitObject,
state.CommitMessage,
HostApplications.Archicad.Name
);
}
}
}
catch (Exception ex)
{
// log
if (ex is not OperationCanceledException)
SpeckleLog.Logger.Error("Conversion to Speckle failed.");

return await Speckle.Core.Api.Helpers.Send(
IdentifyStream(state),
commitObject,
state.CommitMessage,
HostApplications.Archicad.Name
);
// throw
switch (ex)
{
case OperationCanceledException:
throw new OperationCanceledException(ex.Message);
default:
throw new SpeckleException(ex.Message, ex);
}
}
}

public override void WriteStreamsToFile(List<StreamState> streams) { }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,22 +81,26 @@ CancellationToken token
if (jArray is null)
return beams;

foreach (Speckle.Newtonsoft.Json.Linq.JToken jToken in jArray)
var context = Archicad.Helpers.Timer.Context.Peek;
using (context?.cumulativeTimer?.Begin(ConnectorArchicad.Properties.OperationNameTemplates.ConvertToSpeckle, Type.Name))
{
// convert between DTOs
Objects.BuiltElements.Archicad.ArchicadBeam beam =
Archicad.Converters.Utils.ConvertDTOs<Objects.BuiltElements.Archicad.ArchicadBeam>(jToken);

// downgrade (always): Objects.BuiltElements.Archicad.ArchicadBeam --> Objects.BuiltElements.Beam
foreach (Speckle.Newtonsoft.Json.Linq.JToken jToken in jArray)
{
beam.units = Units.Meters;
beam.displayValue = Operations.ModelConverter.MeshesToSpeckle(
elementModels.First(e => e.applicationId == beam.applicationId).model
);
beam.baseLine = new Line(beam.begC, beam.endC);
}
// convert between DTOs
Objects.BuiltElements.Archicad.ArchicadBeam beam =
Archicad.Converters.Utils.ConvertDTOs<Objects.BuiltElements.Archicad.ArchicadBeam>(jToken);

beams.Add(beam);
// downgrade (always): Objects.BuiltElements.Archicad.ArchicadBeam --> Objects.BuiltElements.Beam
{
beam.units = Units.Meters;
beam.displayValue = Operations.ModelConverter.MeshesToSpeckle(
elementModels.First(e => e.applicationId == beam.applicationId).model
);
beam.baseLine = new Line(beam.begC, beam.endC);
}

beams.Add(beam);
}
}

return beams;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,18 +78,22 @@ CancellationToken token
if (jArray is null)
return columns;

foreach (Speckle.Newtonsoft.Json.Linq.JToken jToken in jArray)
var context = Archicad.Helpers.Timer.Context.Peek;
using (context?.cumulativeTimer?.Begin(ConnectorArchicad.Properties.OperationNameTemplates.ConvertToSpeckle, Type.Name))
{
// convert between DTOs
Objects.BuiltElements.Archicad.ArchicadColumn column =
Archicad.Converters.Utils.ConvertDTOs<Objects.BuiltElements.Archicad.ArchicadColumn>(jToken);
foreach (Speckle.Newtonsoft.Json.Linq.JToken jToken in jArray)
{
// convert between DTOs
Objects.BuiltElements.Archicad.ArchicadColumn column =
Archicad.Converters.Utils.ConvertDTOs<Objects.BuiltElements.Archicad.ArchicadColumn>(jToken);

column.units = Units.Meters;
column.displayValue = Operations.ModelConverter.MeshesToSpeckle(
elementModels.First(e => e.applicationId == column.applicationId).model
);
column.baseLine = new Line(column.origoPos, column.origoPos + new Point(0, 0, column.height));
columns.Add(column);
column.units = Units.Meters;
column.displayValue = Operations.ModelConverter.MeshesToSpeckle(
elementModels.First(e => e.applicationId == column.applicationId).model
);
column.baseLine = new Line(column.origoPos, column.origoPos + new Point(0, 0, column.height));
columns.Add(column);
}
}

return columns;
Expand Down
Loading