13 Commits

Author SHA1 Message Date
Jedd Morgan 25b2916c66 bump package version (#108) 2023-11-20 14:10:56 +00:00
Jedd Morgan d158bbdf60 feat!(selection): selection now indexes based on ID (#107) 2023-11-20 13:57:18 +00:00
Jedd Morgan bb43ba5443 Merge pull request #106 from specklesystems/jrm/core/2.17rc
deps(2.17): Updated Core to 2.17.0-rc
2023-11-20 13:54:21 +00:00
Jedd Morgan cff4978179 Bump core to 2.17.0-rc 2023-11-17 12:58:42 +00:00
Jedd Morgan ce33e7c454 Merge pull request #105 from specklesystems/jrm/core/2.16.0
Updated core and objects to 2.16.0
2023-10-31 12:18:13 +00:00
Jedd Morgan fb1e458970 Bumped version connector package semver 2023-10-31 12:17:15 +00:00
Jedd Morgan 2755a9abd7 Fix compiler errors for 2.16 core/objects bump 2023-10-31 12:15:13 +00:00
Jedd Morgan ee9795e39f Bump Core + Objects 2023-10-31 11:52:47 +00:00
Jedd Morgan 999e6ae4ea Merge pull request #103 from specklesystems/jrm/update-docs
Updated SpeckleReceiver.cs
2023-09-26 22:46:37 +01:00
Jedd Morgan 8df96eeca4 Updated SpeckleReceiver.cs 2023-09-26 22:45:44 +01:00
Jedd Morgan 6aa92d4c57 Merge pull request #102 from specklesystems/doc-comments
Update SpeckleReceiver.cs
2023-09-26 22:18:41 +01:00
Jedd Morgan 030cb277b8 Update SpeckleReceiver.cs 2023-09-26 22:18:28 +01:00
Jedd Morgan 5ee498afce Update SpeckleReceiver.cs 2023-09-26 22:17:28 +01:00
27 changed files with 693 additions and 527 deletions
+7 -11
View File
@@ -1,5 +1,3 @@
using System.Collections;
using System.Collections.Generic;
using System.Threading.Tasks;
using NUnit.Framework;
@@ -9,7 +7,6 @@ using Speckle.ConnectorUnity.Wrappers;
using Speckle.Core.Api;
using Speckle.Core.Models;
using UnityEngine;
using UnityEngine.TestTools;
namespace Speckle.ConnectorUnity.Tests
{
@@ -25,7 +22,7 @@ namespace Speckle.ConnectorUnity.Tests
{
return Task.Run(async () => await Helpers.Receive(stream)).Result;
}
[Test, TestCaseSource(nameof(TestCases))]
public void ToNative_Passes(string stream)
{
@@ -37,14 +34,13 @@ namespace Speckle.ConnectorUnity.Tests
Assert.That(results, HasSomeComponent<SpeckleProperties>());
}
private static Constraint HasSomeComponent<T>() where T : Component
private static Constraint HasSomeComponent<T>()
where T : Component
{
return Has.Some.Matches<ConversionResult>(
x =>
{
return x.WasSuccessful(out var success, out _)
&& success.GetComponent<T>();
});
return Has.Some.Matches<ConversionResult>(x =>
{
return x.WasSuccessful(out var success, out _) && success.GetComponent<T>();
});
}
}
}
@@ -13,7 +13,7 @@ namespace Speckle.ConnectorUnity.Components.Editor
[CustomEditor(typeof(SpeckleReceiver))]
public class SpeckleReceiverEditor : UnityEditor.Editor
{
private static bool _generateAssets = false;
private static bool _generateAssets;
private bool _foldOutStatus = true;
private Texture2D? _previewImage;
@@ -79,12 +79,6 @@ namespace Speckle.ConnectorUnity.NativeCache.Editor
return _readCache.TrySaveObject(speckleObject, nativeObject);
}
public override void BeginWrite()
{
base.BeginWrite();
//AssetDatabase.StartAssetEditing();
}
public override void FinishWrite()
{
if (!isWriting)
@@ -1,6 +1,7 @@
#nullable enable
using System;
using System.Collections.Generic;
using System.Globalization;
using Speckle.Core.Api;
using Speckle.Core.Credentials;
using UnityEditor;
@@ -49,8 +50,8 @@ namespace Speckle.ConnectorUnity.Wrappers.Selection.Editor
("Description", s => s.description),
("Is Public", s => s.isPublic.ToString()),
("Role", s => s.role),
("Created at", s => s.createdAt.ToString()),
("Updated at", s => s.updatedAt.ToString()),
("Created at", s => s.createdAt.ToString(CultureInfo.InvariantCulture)),
("Updated at", s => s.updatedAt.ToString(CultureInfo.InvariantCulture)),
};
}
}
@@ -70,7 +71,11 @@ namespace Speckle.ConnectorUnity.Wrappers.Selection.Editor
$"<{nameof(BranchSelection.CommitsLimit)}>k__BackingField",
};
details = new (string, Func<Branch, string>)[] { ("Description", s => s.description), };
details = new (string, Func<Branch, string>)[]
{
("Model Id", s => s.id),
("Description", s => s.description),
};
}
}
@@ -85,7 +90,7 @@ namespace Speckle.ConnectorUnity.Wrappers.Selection.Editor
{
("Commit Id", s => s.id),
("Author Name", s => s.authorName),
("Created At", s => s.createdAt.ToString()),
("Created At", s => s.createdAt.ToString(CultureInfo.InvariantCulture)),
("Source Application", s => s.sourceApplication),
("Reference Object Id", s => s.referencedObject),
};
@@ -108,9 +113,9 @@ namespace Speckle.ConnectorUnity.Wrappers.Selection.Editor
protected (string, Func<TOption, string>)[] details = { };
private string[] GetFormattedOptions(TOption[] options)
private string[] GetFormattedOptions(IReadOnlyList<TOption> options)
{
int optionsCount = options.Length;
int optionsCount = options.Count;
string[] choices = new string[optionsCount];
for (int i = 0; i < optionsCount; i++)
{
@@ -182,10 +187,10 @@ namespace Speckle.ConnectorUnity.Wrappers.Selection.Editor
var provider = ScriptableObject.CreateInstance<StringListSearchProvider>();
provider.Title = typeof(TOption).Name;
provider.listItems = GetFormattedOptions(t.Options);
;
provider.onSetIndexCallback = o =>
{
t.SelectedIndex = o;
t.Selected = t.Options[o];
};
SearchWindow.Open(new SearchWindowContext(windowPos), provider);
}
@@ -260,7 +265,7 @@ namespace Speckle.ConnectorUnity.Wrappers.Selection.Editor
public List<SearchTreeEntry> CreateSearchTree(SearchWindowContext context)
{
List<SearchTreeEntry> searchList =
new(listItems.Length + 1) { new SearchTreeGroupEntry(new GUIContent(Title), 0) };
new(listItems.Length + 1) { new SearchTreeGroupEntry(new GUIContent(Title)) };
for (int i = 0; i < listItems.Length; i++)
{
@@ -275,9 +280,9 @@ namespace Speckle.ConnectorUnity.Wrappers.Selection.Editor
return searchList;
}
public bool OnSelectEntry(SearchTreeEntry SearchTreeEntry, SearchWindowContext context)
public bool OnSelectEntry(SearchTreeEntry searchTreeEntry, SearchWindowContext context)
{
onSetIndexCallback?.Invoke((int)SearchTreeEntry.userData);
onSetIndexCallback?.Invoke((int)searchTreeEntry.userData);
return true;
}
@@ -18,25 +18,26 @@ namespace Speckle.ConnectorUnity.Wrappers.Editor
{
private static readonly string[] SpeckleTypeOptionStrings;
private static readonly Type[] SpeckleTypeOptions;
private static HashSet<string> ArrayFoldoutState = new();
private static bool instancePropFoldoutState = true;
private static bool dynamicPropFoldoutState = true;
private static bool isEditMode = false;
private static bool isEditMode;
static SpecklePropertiesEditor()
{
var options = typeof(Mesh).Assembly
.GetTypes()
.Where(x => x.IsSubclassOf(typeof(Base)) && !x.IsAbstract).ToList();
.Where(x => x.IsSubclassOf(typeof(Base)) && !x.IsAbstract)
.ToList();
var strings = options
.Where(x => x.FullName != null)
.Select(x => x.FullName!.Replace('.', '/'));
var manualTypes = new [] { typeof(Base), typeof(Collection)};
var manualStrings = new []{ nameof(Base), nameof(Collection)};
var manualTypes = new[] { typeof(Base), typeof(Collection) };
var manualStrings = new[] { nameof(Base), nameof(Collection) };
//Manually Add `Base`
SpeckleTypeOptions = options.Concat(manualTypes).ToArray();
SpeckleTypeOptionStrings = strings.Concat(manualStrings).ToArray();
@@ -45,64 +46,82 @@ namespace Speckle.ConnectorUnity.Wrappers.Editor
}
private static GUILayoutOption[] propLayoutOptions = { GUILayout.ExpandWidth(true) };
public override void OnInspectorGUI()
{
SpeckleProperties properties = (SpeckleProperties)target;
//Edit Mode
isEditMode = EditorGUILayout.ToggleLeft("Enable Inspector Edit Mode (experimental)", isEditMode);
isEditMode = EditorGUILayout.ToggleLeft(
"Enable Inspector Edit Mode (experimental)",
isEditMode
);
if (isEditMode)
{
GUILayout.Label(
"Modifying properties through the inspector is experimental and can lead to invalid objects, proceed at your own risk!",
EditorStyles.helpBox);
EditorStyles.helpBox
);
GUILayout.Space(10);
}
GUI.enabled = isEditMode;
// SpeckleType
GUILayout.Label("Speckle Type: ", EditorStyles.boldLabel );
GUILayout.Label("Speckle Type: ", EditorStyles.boldLabel);
var oldIndex = Array.IndexOf(SpeckleTypeOptions, properties.SpeckleType);
var speckleTypeSelectedIndex = EditorGUILayout.Popup(oldIndex, SpeckleTypeOptionStrings);
if(oldIndex != speckleTypeSelectedIndex && speckleTypeSelectedIndex >= 0)
var speckleTypeSelectedIndex = EditorGUILayout.Popup(
oldIndex,
SpeckleTypeOptionStrings
);
if (oldIndex != speckleTypeSelectedIndex && speckleTypeSelectedIndex >= 0)
{
properties.SpeckleType = SpeckleTypeOptions[speckleTypeSelectedIndex];
}
// Instance Properties
var InstancePropertyNames = DynamicBase.GetInstanceMembersNames(properties.SpeckleType);
instancePropFoldoutState = EditorGUILayout.Foldout(instancePropFoldoutState, "Instance Properties: ", EditorStyles.foldoutHeader);
var instancePropertyNames =
(IReadOnlyCollection<string>)
DynamicBase.GetInstanceMembersNames(properties.SpeckleType);
instancePropFoldoutState = EditorGUILayout.Foldout(
instancePropFoldoutState,
"Instance Properties: ",
EditorStyles.foldoutHeader
);
if (instancePropFoldoutState)
{
foreach (var propName in InstancePropertyNames)
foreach (var propName in instancePropertyNames)
{
if (!properties.Data.TryGetValue(propName, out object? existingValue)) continue;
if (!properties.Data.TryGetValue(propName, out object? existingValue))
continue;
var newValue = CreateField(existingValue, propName, propLayoutOptions);
if(newValue != existingValue)
if (newValue != existingValue)
properties.Data[propName] = newValue;
}
}
GUILayout.Space(10);
dynamicPropFoldoutState = EditorGUILayout.Foldout(dynamicPropFoldoutState, "Dynamic Properties:", EditorStyles.foldoutHeader);
dynamicPropFoldoutState = EditorGUILayout.Foldout(
dynamicPropFoldoutState,
"Dynamic Properties:",
EditorStyles.foldoutHeader
);
if (dynamicPropFoldoutState)
{
var ignoreSet = InstancePropertyNames.ToImmutableHashSet();
var ignoreSet = instancePropertyNames.ToImmutableHashSet();
foreach (var kvp in properties.Data)
{
if (ignoreSet.Contains(kvp.Key)) continue;
if (ignoreSet.Contains(kvp.Key))
continue;
var existingValue = kvp.Value;
var newValue = CreateField(existingValue, kvp.Key, propLayoutOptions);
if(newValue != existingValue)
if (newValue != existingValue)
properties.Data[kvp.Key] = newValue;
GUILayout.Space(10);
}
}
@@ -118,13 +137,18 @@ namespace Speckle.ConnectorUnity.Wrappers.Editor
_ => CreateFieldPrimitive(v, propName, options),
};
if (ret != null) return ret;
EditorGUILayout.TextField(propName, v == null? "NULL" : v.ToString());
if (ret != null)
return ret;
EditorGUILayout.TextField(propName, v == null ? "NULL" : v.ToString());
return v;
}
private static object? CreateFieldPrimitive(object? v, string propName, params GUILayoutOption[] options)
private static object? CreateFieldPrimitive(
object? v,
string propName,
params GUILayoutOption[] options
)
{
return v switch
{
@@ -135,11 +159,19 @@ namespace Speckle.ConnectorUnity.Wrappers.Editor
string s => EditorGUILayout.TextField(propName, s, options),
bool b => EditorGUILayout.Toggle(propName, b, options),
Enum e => EditorGUILayout.EnumPopup(propName, e, options),
Point p => PointToVector3(EditorGUILayout.Vector3Field(propName, new Vector3((float)p.x, (float)p.z, (float)p.z), options), p),
Point p
=> PointToVector3(
EditorGUILayout.Vector3Field(
propName,
new Vector3((float)p.x, (float)p.z, (float)p.z),
options
),
p
),
_ => null,
};
}
private static Point PointToVector3(Vector3 vector, Point p)
{
p.x = vector.x;
@@ -147,10 +179,13 @@ namespace Speckle.ConnectorUnity.Wrappers.Editor
p.z = vector.z;
return p;
}
private IList ArrayField(string propName, IList list, params GUILayoutOption[] options)
{
bool isExpanded = EditorGUILayout.Foldout(ArrayFoldoutState.Contains(propName), propName);
bool isExpanded = EditorGUILayout.Foldout(
ArrayFoldoutState.Contains(propName),
propName
);
if (isExpanded)
{
ArrayFoldoutState.Add(propName);
@@ -158,10 +193,13 @@ namespace Speckle.ConnectorUnity.Wrappers.Editor
{
object? item = list[i];
var r = CreateFieldPrimitive(item, i.ToString(), options);
if (r == null)
{
EditorGUILayout.TextField(i.ToString(), item == null? "NULL" : item.ToString());
EditorGUILayout.TextField(
i.ToString(),
item == null ? "NULL" : item.ToString()
);
continue;
}
//Update list item
@@ -175,6 +213,5 @@ namespace Speckle.ConnectorUnity.Wrappers.Editor
return list;
}
}
}
@@ -77,16 +77,13 @@ namespace Speckle.ConnectorUnity.Components
return true;
}
/// <summary>
/// Receive the selected <see cref="Commit"/> object, and converts ToNative as children of <paramref name="parent"/>
/// </summary>
/// <param name="parent">Optional parent <see cref="Transform"/> for the created root <see cref="GameObject"/>s</param>
/// <param name="predicate">A filter function to allow for selectively excluding certain objects from being converted</param>
/// <remarks>function does not throw, instead calls <see cref="OnErrorAction"/>, and calls <see cref="OnComplete"/> upon completion</remarks>
/// <seealso cref="ReceiveAsync(System.Threading.CancellationToken)"/>
/// <seealso cref="RecursiveConverter.RecursivelyConvertToNative_Enumerable"/>
/// <inheritdoc cref="ReceiveAndConvert_Async"/>
/// <example>
/// This function is designed to run as a coroutine i.e.
/// <c>StartCoroutine(mySpeckleReceiver.ReceiveAndConvert_Routine());</c>
/// </example>
public IEnumerator ReceiveAndConvert_Routine(
Transform? parent,
Transform? parent = null,
Predicate<TraversalContext>? predicate = null
)
{
@@ -130,9 +127,16 @@ namespace Speckle.ConnectorUnity.Components
FinishOperation();
}
/// <inheritdoc cref="ReceiveAndConvert_Routine"/>
/// <summary>
/// Receive the selected <see cref="Commit"/> object, and converts ToNative as children of <paramref name="parent"/>
/// </summary>
/// <param name="parent">Optional parent <see cref="Transform"/> for the created root <see cref="GameObject"/>s</param>
/// <param name="predicate">A filter function to allow for selectively excluding certain objects from being converted</param>
/// <remarks>function does not throw, instead calls <see cref="OnErrorAction"/>, and calls <see cref="OnComplete"/> upon completion</remarks>
/// <seealso cref="ReceiveAsync(System.Threading.CancellationToken)"/>
/// <seealso cref="RecursiveConverter.RecursivelyConvertToNative_Enumerable"/>
public async void ReceiveAndConvert_Async(
Transform? parent,
Transform? parent = null,
Predicate<TraversalContext>? predicate = null
)
{
@@ -323,7 +327,6 @@ namespace Speckle.ConnectorUnity.Components
{
await client
.CommitReceived(
cancellationToken,
new CommitReceivedInput
{
streamId = streamId,
@@ -332,7 +335,8 @@ namespace Speckle.ConnectorUnity.Components
sourceApplication = HostApplications.Unity.GetVersion(
CoreUtils.GetHostAppVersion()
)
}
},
cancellationToken
)
.ConfigureAwait(false);
}
@@ -510,7 +514,7 @@ namespace Speckle.ConnectorUnity.Components
Branch.Initialise();
Commit.Initialise();
Commit.OnSelectionChange = () => OnCommitSelectionChange?.Invoke(Commit.Selected);
if (Account.Options is not { Length: > 0 } || forceRefresh)
if (Account.Options is not { Count: > 0 } || forceRefresh)
Account.RefreshOptions();
}
@@ -536,7 +540,7 @@ namespace Speckle.ConnectorUnity.Components
#region Deprecated members
[Obsolete("use " + nameof(ReceiveAndConvertRoutine), true)]
[Obsolete("use " + nameof(ReceiveAndConvert_Routine), true)]
public IEnumerator ReceiveAndConvertRoutine(
SpeckleReceiver speckleReceiver,
string rootObjectName,
@@ -141,7 +141,6 @@ namespace Speckle.ConnectorUnity.Components
)
{
string commitId = await client.CommitCreate(
cancellationToken,
new CommitCreateInput
{
streamId = streamId,
@@ -152,7 +151,8 @@ namespace Speckle.ConnectorUnity.Components
CoreUtils.GetHostAppVersion()
),
totalChildrenCount = (int)data.totalChildrenCount,
}
},
cancellationToken
);
return commitId;
@@ -230,7 +230,7 @@ namespace Speckle.ConnectorUnity.Components
Stream.Initialise();
Branch.Initialise();
Branch.OnSelectionChange = () => OnBranchSelectionChange?.Invoke(Branch.Selected);
if (Account.Options is not { Length: > 0 } || forceRefresh)
if (Account.Options is not { Count: > 0 } || forceRefresh)
Account.RefreshOptions();
}
@@ -47,21 +47,27 @@ namespace Objects.Converter.Unity
public Vector3 VectorFromPoint(Point p) => VectorByCoordinates(p.x, p.y, p.z, p.units);
/// <summary>
///
/// </summary>
/// <param name="arr"></param>
/// <param name="arr">flat list of x,y,z values</param>
/// <param name="units"></param>
/// <returns></returns>
public Vector3[] ArrayToPoints(IList<double> arr, string units)
/// <exception cref="ArgumentException">Length of <paramref name="arr"/> must be a multiple of 3</exception>
public Vector3[] ArrayToPoints(IReadOnlyList<double> arr, string units)
{
if (arr.Count % 3 != 0)
throw new Exception("Array malformed: length not a multiple of 3");
{
throw new ArgumentException(
"Array malformed: length not a multiple of 3",
nameof(arr)
);
}
Vector3[] points = new Vector3[arr.Count / 3];
var f = GetConversionFactor(units);
double f = GetConversionFactor(units);
for (int i = 2, k = 0; i < arr.Count; i += 3)
{
points[k++] = VectorByCoordinates(arr[i - 2], arr[i - 1], arr[i], f);
}
return points;
}
@@ -70,13 +76,7 @@ namespace Objects.Converter.Unity
#region ToSpeckle
//TODO: more of these
/// <summary>
///
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
[Obsolete("", true)]
public virtual Point PointToSpeckle(Vector3 p)
{
//switch y and z
@@ -117,7 +117,7 @@ namespace Objects.Converter.Unity
{
Vector3 newPt = VectorByCoordinates(point.x, point.y, point.z, point.units);
var go = NewPointBasedGameObject(new Vector3[] { newPt, newPt }, point.speckle_type);
var go = NewPointBasedGameObject(new[] { newPt, newPt }, point.speckle_type);
return go;
}
@@ -352,30 +352,30 @@ namespace Objects.Converter.Unity
public Matrix4x4 TransformToNativeMatrix(STransform speckleTransform)
{
var sf = GetConversionFactor(speckleTransform.units);
var smatrix = speckleTransform.matrix;
var sMatrix = speckleTransform.matrix;
return new Matrix4x4
{
// Left (X -> X)
[0, 0] = smatrix.M11,
[2, 0] = smatrix.M21,
[1, 0] = smatrix.M31,
[3, 0] = smatrix.M41,
[0, 0] = (float)sMatrix.M11,
[2, 0] = (float)sMatrix.M21,
[1, 0] = (float)sMatrix.M31,
[3, 0] = (float)sMatrix.M41,
//Up (Z -> Y)
[0, 2] = smatrix.M12,
[2, 2] = smatrix.M22,
[1, 2] = smatrix.M32,
[3, 2] = smatrix.M42,
[0, 2] = (float)sMatrix.M12,
[2, 2] = (float)sMatrix.M22,
[1, 2] = (float)sMatrix.M32,
[3, 2] = (float)sMatrix.M42,
//Forwards (Y -> Z)
[0, 1] = smatrix.M13,
[2, 1] = smatrix.M23,
[1, 1] = smatrix.M33,
[3, 1] = smatrix.M43,
[0, 1] = (float)sMatrix.M13,
[2, 1] = (float)sMatrix.M23,
[1, 1] = (float)sMatrix.M33,
[3, 1] = (float)sMatrix.M43,
//Translation
[0, 3] = (float)(smatrix.M14 * sf),
[2, 3] = (float)(smatrix.M24 * sf),
[1, 3] = (float)(smatrix.M34 * sf),
[3, 3] = smatrix.M44,
[0, 3] = (float)(sMatrix.M14 * sf),
[2, 3] = (float)(sMatrix.M24 * sf),
[1, 3] = (float)(sMatrix.M34 * sf),
[3, 3] = (float)sMatrix.M44,
};
}
@@ -202,6 +202,18 @@ namespace Objects.Converter.Unity
return objects.Select(x => ConvertToNative(x)).ToList();
}
public object ConvertToNativeDisplayable(Base @object)
{
throw new NotImplementedException(
$"{nameof(ConvertToNativeDisplayable)} is not implemented by this converter, use {nameof(ConvertToNative)} instead"
);
}
public bool CanConvertToNativeDisplayable(Base @object)
{
throw new NotImplementedException();
}
public bool CanConvertToSpeckle(object @object)
{
switch (@object)
@@ -25,7 +25,8 @@
"Serilog.Sinks.Console": "4.1.0",
"Serilog.Sinks.Seq": "5.2.2",
"SerilogTimings": "3.0.1",
"Speckle.Newtonsoft.Json": "13.0.2"
"Speckle.Newtonsoft.Json": "13.0.2",
"System.DoubleNumerics": "3.1.3"
},
"runtime": {
"SpeckleCore2.dll": {}
@@ -444,6 +445,17 @@
}
}
},
"System.DoubleNumerics/3.1.3": {
"dependencies": {
"NETStandard.Library": "2.0.3"
},
"runtime": {
"lib/netstandard1.3/System.DoubleNumerics.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "1.0.0.0"
}
}
},
"System.Memory/4.5.4": {
"dependencies": {
"System.Buffers": "4.5.1",
@@ -863,6 +875,13 @@
"path": "system.collections.immutable/5.0.0",
"hashPath": "system.collections.immutable.5.0.0.nupkg.sha512"
},
"System.DoubleNumerics/3.1.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-KRKEM/L3KBodjA9VOg3EifFVWUY6EOqaMB05UvPEDm7Zeby/kZW+4kdWUEPzW6xtkwf46p661L9NrbeeQhtLzw==",
"path": "system.doublenumerics/3.1.3",
"hashPath": "system.doublenumerics.3.1.3.nupkg.sha512"
},
"System.Memory/4.5.4": {
"type": "package",
"serviceable": true,
@@ -16,383 +16,173 @@
https://www.apollographql.com/docs/apollo-server/v2/data/errors/#forbidden
</summary>
</member>
<member name="M:Speckle.Core.Api.Client.StreamGetActivity(System.String,System.Nullable{System.DateTime},System.Nullable{System.DateTime},System.Nullable{System.DateTime},System.String,System.Int32)">
<member name="M:Speckle.Core.Api.Client.StreamGetActivity(System.String,System.Nullable{System.DateTime},System.Nullable{System.DateTime},System.Nullable{System.DateTime},System.String,System.Int32,System.Threading.CancellationToken)">
<summary>
Gets the activity of a stream
</summary>
<param name="streamId">Id of the stream to get the activity from</param>
<param name="after">Only show activity after this DateTime</param>
<param name="before">Only show activity before this DateTime</param>
<param name="cursor">Time to filter the activity with</param>
<param name="actionType">Time to filter the activity with</param>
<param name="limit">Max number of activity items to get</param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.StreamGetActivity(System.Threading.CancellationToken,System.String,System.Nullable{System.DateTime},System.Nullable{System.DateTime},System.Nullable{System.DateTime},System.String,System.Int32)">
<summary>
Gets the activity of a stream
</summary>
<param name="cancellationToken"></param>
<param name="id">Id of the stream to get the activity from</param>
<param name="after">Only show activity after this DateTime</param>
<param name="before">Only show activity before this DateTime</param>
<param name="cursor">Time to filter the activity with</param>
<param name="actionType">Time to filter the activity with</param>
<param name="limit">Max number of commits to get</param>
<returns></returns>
<exception cref="T:System.Exception"></exception>
</member>
<member name="M:Speckle.Core.Api.Client.StreamGetBranches(System.String,System.Int32,System.Int32)">
<summary>
Get branches from a given stream
</summary>
<param name="streamId">Id of the stream to get the branches from</param>
<param name="branchesLimit">Max number of branches to retrieve</param>
<param name="commitsLimit">Max number of commits to retrieve</param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.StreamGetBranches(System.Threading.CancellationToken,System.String,System.Int32,System.Int32)">
<summary>
Get branches from a given stream
</summary>
<param name="limit">Max number of activity items to get</param>
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.StreamGetBranchesWithLimitRetry(System.String,System.Int32)">
<summary>
Get branches from a given stream, first with a max of 500 and then with a max of 100.
This ensures that if the server API is limiting to 100 branches, that any failure will try again at the lower value.
</summary>
<param name="streamId">Id of the stream to get the branches from</param>
<param name="commitsLimit">Max number of commits to retrieve</param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.StreamGetBranches(System.String,System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>
Get branches from a given stream
</summary>
<param name="streamId">Id of the stream to get the branches from</param>
<param name="branchesLimit">Max number of branches to retrieve</param>
<param name="commitsLimit">Max number of commits to retrieve</param>
<param name="cancellationToken"></param>
<returns></returns>
<exception cref="T:System.Exception"></exception>
</member>
<member name="M:Speckle.Core.Api.Client.BranchCreate(Speckle.Core.Api.BranchCreateInput)">
<summary>
Creates a branch on a stream.
</summary>
<param name="branchInput"></param>
<returns>The stream's id.</returns>
</member>
<member name="M:Speckle.Core.Api.Client.BranchCreate(System.Threading.CancellationToken,Speckle.Core.Api.BranchCreateInput)">
<member name="M:Speckle.Core.Api.Client.BranchCreate(Speckle.Core.Api.BranchCreateInput,System.Threading.CancellationToken)">
<summary>
Creates a branch on a stream.
</summary>
<param name="branchInput"></param>
<param name="cancellationToken"></param>
<returns>The branch id.</returns>
</member>
<member name="M:Speckle.Core.Api.Client.BranchGet(System.String,System.String,System.Int32)">
<member name="M:Speckle.Core.Api.Client.BranchGet(System.String,System.String,System.Int32,System.Threading.CancellationToken)">
<summary>
Gets a given branch from a stream.
</summary>
<param name="streamId">Id of the stream to get the branch from</param>
<param name="branchName">Name of the branch to get</param>
<returns></returns>
<param name="cancellationToken"></param>
<returns>The requested branch</returns>
</member>
<member name="M:Speckle.Core.Api.Client.BranchGet(System.Threading.CancellationToken,System.String,System.String,System.Int32)">
<member name="M:Speckle.Core.Api.Client.ModelGet(System.String,System.String,System.Threading.CancellationToken)">
<summary>
Gets a given branch from a stream.
Gets a given model from a project.
</summary>
<param name="cancellationToken"></param>
<param name="streamId">Id of the stream to get the branch from</param>
<param name="branchName">Name of the branch to get</param>
<param name="projectId">Id of the project to get the model from</param>
<param name="modelId">Id of the model</param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.BranchUpdate(Speckle.Core.Api.BranchUpdateInput)">
<member name="M:Speckle.Core.Api.Client.BranchUpdate(Speckle.Core.Api.BranchUpdateInput,System.Threading.CancellationToken)">
<summary>
Updates a branch.
</summary>
<param name="branchInput"></param>
<returns>The stream's id.</returns>
</member>
<member name="M:Speckle.Core.Api.Client.BranchUpdate(System.Threading.CancellationToken,Speckle.Core.Api.BranchUpdateInput)">
<summary>
Updates a branch.
</summary>
<param name="branchInput"></param>
<returns>The stream's id.</returns>
</member>
<member name="M:Speckle.Core.Api.Client.BranchDelete(Speckle.Core.Api.BranchDeleteInput)">
<member name="M:Speckle.Core.Api.Client.BranchDelete(Speckle.Core.Api.BranchDeleteInput,System.Threading.CancellationToken)">
<summary>
Deletes a stream.
</summary>
<param name="branchInput"></param>
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.BranchDelete(System.Threading.CancellationToken,Speckle.Core.Api.BranchDeleteInput)">
<summary>
Deletes a stream.
</summary>
<param name="branchInput"></param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.StreamGetComments(System.String,System.Int32,System.String)">
<member name="M:Speckle.Core.Api.Client.StreamGetComments(System.String,System.Int32,System.String,System.Threading.CancellationToken)">
<summary>
Gets the comments on a Stream
</summary>
<param name="streamId">Id of the stream to get the comments from</param>
<param name="limit">The number of comments to get</param>
<param name="cursor">Time to filter the comments with</param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.StreamGetComments(System.Threading.CancellationToken,System.String,System.Int32,System.String)">
<summary>
Gets the comments on a Stream
</summary>
<param name="cancellationToken"></param>
<param name="streamId">Id of the stream to get the comments from</param>
<param name="limit">The number of comments to get</param>
<param name="cursor">Time to filter the comments with</param>
<returns></returns>
<exception cref="T:Speckle.Core.Logging.SpeckleException"></exception>
</member>
<member name="M:Speckle.Core.Api.Client.StreamGetCommentScreenshot(System.String,System.String)">
<member name="M:Speckle.Core.Api.Client.StreamGetCommentScreenshot(System.String,System.String,System.Threading.CancellationToken)">
<summary>
Gets the screenshot of a Comment
Gets the screenshot of a Comment
</summary>
<param name="id">Id of the comment</param>
<param name="streamId">Id of the stream to get the comment from</param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.StreamGetCommentScreenshot(System.Threading.CancellationToken,System.String,System.String)">
<summary>
Gets the screenshot of a Comment
</summary>
<param name="cancellationToken"></param>
<param name="id">Id of the comment</param>
<param name="streamId">Id of the stream to get the comment from</param>
<returns></returns>
<exception cref="T:Speckle.Core.Logging.SpeckleException"></exception>
</member>
<member name="M:Speckle.Core.Api.Client.CommitGet(System.String,System.String)">
<member name="M:Speckle.Core.Api.Client.CommitGet(System.String,System.String,System.Threading.CancellationToken)">
<summary>
Gets a given commit from a stream.
</summary>
<param name="streamId">Id of the stream to get the commit from</param>
<param name="commitId">Id of the commit to get</param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.CommitGet(System.Threading.CancellationToken,System.String,System.String)">
<summary>
Gets a given commit from a stream.
</summary>
<param name="cancellationToken"></param>
<param name="streamId">Id of the stream to get the commit from</param>
<param name="commitId">Id of the commit to get</param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.StreamGetCommits(System.String,System.Int32)">
<member name="M:Speckle.Core.Api.Client.StreamGetCommits(System.String,System.Int32,System.Threading.CancellationToken)">
<summary>
Gets the latest commits from a stream
</summary>
<param name="streamId">Id of the stream to get the commits from</param>
<param name="limit">Max number of commits to get</param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.StreamGetCommits(System.Threading.CancellationToken,System.String,System.Int32)">
<summary>
Gets the latest commits from a stream
</summary>
<param name="cancellationToken"></param>
<param name="streamId">Id of the stream to get the commits from</param>
<param name="limit">Max number of commits to get</param>
<returns></returns>
<exception cref="T:System.Exception"></exception>
<returns>The requested commits</returns>
</member>
<member name="M:Speckle.Core.Api.Client.CommitCreate(Speckle.Core.Api.CommitCreateInput)">
<member name="M:Speckle.Core.Api.Client.CommitCreate(Speckle.Core.Api.CommitCreateInput,System.Threading.CancellationToken)">
<summary>
Creates a commit on a branch.
</summary>
<param name="commitInput"></param>
<returns>The commit id.</returns>
</member>
<member name="M:Speckle.Core.Api.Client.CommitCreate(System.Threading.CancellationToken,Speckle.Core.Api.CommitCreateInput)">
<inheritdoc cref="M:Speckle.Core.Api.Client.CommitCreate(Speckle.Core.Api.CommitCreateInput)"/>
<member name="M:Speckle.Core.Api.Client.CommitUpdate(Speckle.Core.Api.CommitUpdateInput,System.Threading.CancellationToken)">
<summary>
Updates a commit.
</summary>
<param name="commitInput"></param>
<param name="cancellationToken"></param>
</member>
<member name="M:Speckle.Core.Api.Client.CommitUpdate(Speckle.Core.Api.CommitUpdateInput)">
<summary>
Updates a commit.
</summary>
<param name="commitInput"></param>
<returns>The stream's id.</returns>
</member>
<member name="M:Speckle.Core.Api.Client.CommitUpdate(System.Threading.CancellationToken,Speckle.Core.Api.CommitUpdateInput)">
<summary>
Updates a commit.
</summary>
<param name="commitInput"></param>
<returns>The stream's id.</returns>
</member>
<member name="M:Speckle.Core.Api.Client.CommitDelete(Speckle.Core.Api.CommitDeleteInput)">
<member name="M:Speckle.Core.Api.Client.CommitDelete(Speckle.Core.Api.CommitDeleteInput,System.Threading.CancellationToken)">
<summary>
Deletes a commit.
</summary>
<param name="commitInput"></param>
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.CommitDelete(System.Threading.CancellationToken,Speckle.Core.Api.CommitDeleteInput)">
<summary>
Deletes a commit.
</summary>
<param name="commitInput"></param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.CommitReceived(Speckle.Core.Api.CommitReceivedInput)">
<member name="M:Speckle.Core.Api.Client.CommitReceived(Speckle.Core.Api.CommitReceivedInput,System.Threading.CancellationToken)">
<summary>
Sends a commitReceived mutation, affirming a commit has been received.
</summary>
<remarks>Used for read receipts</remarks>
<param name="commitReceivedInput"></param>
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.CommitReceived(System.Threading.CancellationToken,Speckle.Core.Api.CommitReceivedInput)">
<inheritdoc cref="M:Speckle.Core.Api.Client.CommitReceived(Speckle.Core.Api.CommitReceivedInput)"/>
<param name="cancellationToken"></param>
</member>
<member name="M:Speckle.Core.Api.Client.ObjectGet(System.String,System.String)">
<member name="M:Speckle.Core.Api.Client.ObjectGet(System.String,System.String,System.Threading.CancellationToken)">
<summary>
Gets a given object from a stream.
Gets data about the requested Speckle object from a stream.
</summary>
<param name="streamId">Id of the stream to get the object from</param>
<param name="objectId">Id of the object to get</param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.ObjectGet(System.Threading.CancellationToken,System.String,System.String)">
<summary>
Gets a given object from a stream.
</summary>
<param name="cancellationToken"></param>
<param name="streamId">Id of the stream to get the object from</param>
<param name="objectId">Id of the object to get</param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.ObjectCountGet(System.String,System.String)">
<member name="M:Speckle.Core.Api.Client.ObjectCountGet(System.String,System.String,System.Threading.CancellationToken)">
<summary>
Gets a given object from a stream.
</summary>
<param name="streamId"></param>
<param name="objectId"></param>
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.ObjectCountGet(System.Threading.CancellationToken,System.String,System.String)">
<member name="M:Speckle.Core.Api.Client._CheckStreamInvitesSupported(System.Threading.CancellationToken)">
<summary>
Gets a given object from a stream.
Checks if Speckle Server version is at least v2.6.4 meaning stream invites are supported.
</summary>
<param name="cancellationToken"></param>
<param name="streamId"></param>
<param name="objectId"></param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.GetServerVersion(System.Threading.CancellationToken)">
<summary>
Gets the version of the current server. Useful for guarding against unsupported api calls on newer or older servers.
</summary>
<param name="cancellationToken">[Optional] defaults to an empty cancellation token</param>
<returns><see cref="T:Speckle.Core.Api.Version"/> object excluding any strings (eg "2.7.2-alpha.6995" becomes "2.7.2.6995")</returns>
<exception cref="T:Speckle.Core.Logging.SpeckleException"></exception>
</member>
<member name="M:Speckle.Core.Api.Client.IsStreamAccessible(System.String,System.Threading.CancellationToken)">
<summary>
Cheks if a stream exists by id.
</summary>
<param name="id">Id of the stream to get</param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.StreamGet(System.String,System.Int32)">
<summary>
Gets a stream by id including basic branch info (id, name, description, and total commit count).
For detailed commit and branch info, use StreamGetCommits and StreamGetBranches respectively.
</summary>
<param name="id">Id of the stream to get</param>
<param name="branchesLimit">Max number of branches to retrieve</param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.StreamGet(System.Threading.CancellationToken,System.String,System.Int32)">
<summary>
Gets a stream by id including basic branch info (id, name, description, and total commit count).
For detailed commit and branch info, use StreamGetCommits and StreamGetBranches respectively.
</summary>
<param name="id">Id of the stream to get</param>
<param name="branchesLimit">Max number of branches to retrieve</param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.StreamsGet(System.Int32)">
<summary>
Gets all streams for the current user
</summary>
<param name="limit">Max number of streams to return</param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.StreamsGet(System.Threading.CancellationToken,System.Int32)">
<summary>
Gets all streams for the current user
</summary>
<param name="limit">Max number of streams to return</param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.FavoriteStreamsGet(System.Threading.CancellationToken,System.Int32)">
<summary>
Gets all favorite streams for the current user
</summary>
<param name="limit">Max number of streams to return</param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.StreamSearch(System.String,System.Int32)">
<summary>
Searches the user's streams by name, description, and ID
</summary>
<param name="query">String query to search for</param>
<param name="limit">Max number of streams to return</param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.StreamSearch(System.Threading.CancellationToken,System.String,System.Int32)">
<summary>
Searches the user's streams by name, description, and ID
</summary>
<param name="query">String query to search for</param>
<param name="limit">Max number of streams to return</param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.StreamCreate(Speckle.Core.Api.StreamCreateInput)">
<summary>
Creates a stream.
</summary>
<param name="streamInput"></param>
<returns>The stream's id.</returns>
</member>
<member name="M:Speckle.Core.Api.Client.StreamCreate(System.Threading.CancellationToken,Speckle.Core.Api.StreamCreateInput)">
<summary>
Creates a stream.
</summary>
<param name="streamInput"></param>
<returns>The stream's id.</returns>
</member>
<member name="M:Speckle.Core.Api.Client.StreamUpdate(Speckle.Core.Api.StreamUpdateInput)">
<summary>
Updates a stream.
</summary>
<param name="streamInput">Note: the id field needs to be a valid stream id.</param>
<returns>The stream's id.</returns>
</member>
<member name="M:Speckle.Core.Api.Client.StreamUpdate(System.Threading.CancellationToken,Speckle.Core.Api.StreamUpdateInput)">
<summary>
Updates a stream.
</summary>
<param name="cancellationToken"></param>
<param name="streamInput">Note: the id field needs to be a valid stream id.</param>
<returns>The stream's id.</returns>
</member>
<member name="M:Speckle.Core.Api.Client.StreamDelete(System.String)">
<summary>
Deletes a stream.
</summary>
<param name="id">Id of the stream to be deleted</param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.StreamDelete(System.Threading.CancellationToken,System.String)">
<summary>
Deletes a stream.
</summary>
<param name="cancellationToken"></param>
<param name="id">Id of the stream to be deleted</param>
<returns></returns>
<returns>true if invites are supported</returns>
<exception cref="T:Speckle.Core.Logging.SpeckleException">if Speckle Server version is less than v2.6.4</exception>
</member>
<member name="M:Speckle.Core.Api.Client.StreamGrantPermission(Speckle.Core.Api.StreamPermissionInput)">
<summary>
@@ -409,19 +199,87 @@
<param name="permissionInput"></param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.StreamRevokePermission(Speckle.Core.Api.StreamRevokePermissionInput)">
<member name="M:Speckle.Core.Api.Client.GetServerVersion(System.Threading.CancellationToken)">
<summary>
Revokes permissions of a user on a given stream.
Gets the version of the current server. Useful for guarding against unsupported api calls on newer or older servers.
</summary>
<param name="permissionInput"></param>
<param name="cancellationToken">[Optional] defaults to an empty cancellation token</param>
<returns><see cref="T:Speckle.Core.Api.Version"/> object excluding any strings (eg "2.7.2-alpha.6995" becomes "2.7.2.6995")</returns>
<exception cref="T:Speckle.Core.Logging.SpeckleException"></exception>
</member>
<member name="M:Speckle.Core.Api.Client.IsStreamAccessible(System.String,System.Threading.CancellationToken)">
<summary>
Checks if a stream exists by id.
</summary>
<param name="id">Id of the stream to get</param>
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.StreamRevokePermission(System.Threading.CancellationToken,Speckle.Core.Api.StreamRevokePermissionInput)">
<member name="M:Speckle.Core.Api.Client.StreamGet(System.String,System.Int32,System.Threading.CancellationToken)">
<summary>
Gets a stream by id including basic branch info (id, name, description, and total commit count).
For detailed commit and branch info, use <see cref="M:Speckle.Core.Api.Client.StreamGetCommits(System.String,System.Int32,System.Threading.CancellationToken)"/> and <see cref="M:Speckle.Core.Api.Client.StreamGetBranches(System.String,System.Int32,System.Int32,System.Threading.CancellationToken)"/> respectively.
</summary>
<param name="id">Id of the stream to get</param>
<param name="branchesLimit">Max number of branches to retrieve</param>
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.StreamsGet(System.Int32,System.Threading.CancellationToken)">
<summary>
Gets all streams for the current user
</summary>
<param name="limit">Max number of streams to return</param>
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.FavoriteStreamsGet(System.Int32,System.Threading.CancellationToken)">
<summary>
Gets all favorite streams for the current user
</summary>
<param name="limit">Max number of streams to return</param>
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.StreamSearch(System.String,System.Int32,System.Threading.CancellationToken)">
<summary>
Searches the user's streams by name, description, and ID
</summary>
<param name="query">String query to search for</param>
<param name="limit">Max number of streams to return</param>
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.StreamCreate(Speckle.Core.Api.StreamCreateInput,System.Threading.CancellationToken)">
<summary>
Creates a stream.
</summary>
<param name="streamInput"></param>
<param name="cancellationToken"></param>
<returns>The stream's id.</returns>
</member>
<member name="M:Speckle.Core.Api.Client.StreamUpdate(Speckle.Core.Api.StreamUpdateInput,System.Threading.CancellationToken)">
<summary>
Updates a stream.
</summary>
<param name="streamInput">Note: the id field needs to be a valid stream id.</param>
<param name="cancellationToken"></param>
<returns>The stream's id.</returns>
</member>
<member name="M:Speckle.Core.Api.Client.StreamDelete(System.String,System.Threading.CancellationToken)">
<summary>
Deletes a stream.
</summary>
<param name="id">Id of the stream to be deleted</param>
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.StreamRevokePermission(Speckle.Core.Api.StreamRevokePermissionInput,System.Threading.CancellationToken)">
<summary>
Revokes permissions of a user on a given stream.
</summary>
<param name="cancellationToken"></param>
<param name="permissionInput"></param>
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.StreamUpdatePermission(Speckle.Core.Api.StreamPermissionInput,System.Threading.CancellationToken)">
@@ -433,36 +291,21 @@
<returns></returns>
<exception cref="T:Speckle.Core.Logging.SpeckleException"></exception>
</member>
<member name="M:Speckle.Core.Api.Client.StreamGetPendingCollaborators(System.String)">
<member name="M:Speckle.Core.Api.Client.StreamGetPendingCollaborators(System.String,System.Threading.CancellationToken)">
<summary>
Gets the pending collaborators of a stream by id.
Requires the user to be an owner of the stream.
</summary>
<param name="id">Id of the stream to get</param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.StreamGetPendingCollaborators(System.Threading.CancellationToken,System.String)">
<summary>
Gets the pending collaborators of a stream by id.
Requires the user to be an owner of the stream.
</summary>
<param name="id">Id of the stream to get</param>
<param name="branchesLimit">Max number of branches to retrieve</param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.StreamInviteCreate(Speckle.Core.Api.StreamInviteCreateInput)">
<summary>
Sends an email invite to join a stream and assigns them a collaborator role.
</summary>
<param name="streamCreateInput"></param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.StreamInviteCreate(System.Threading.CancellationToken,Speckle.Core.Api.StreamInviteCreateInput)">
<summary>
Sends an email invite to join a stream and assigns them a collaborator role.
</summary>
<param name="streamId"></param>
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.StreamInviteCreate(Speckle.Core.Api.StreamInviteCreateInput,System.Threading.CancellationToken)">
<summary>
Sends an email invite to join a stream and assigns them a collaborator role.
</summary>
<param name="inviteCreateInput"></param>
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.StreamInviteCancel(System.String,System.String,System.Threading.CancellationToken)">
@@ -474,14 +317,6 @@
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client._CheckStreamInvitesSupported(System.Threading.CancellationToken)">
<summary>
Checks if Speckle Server version is at least v2.6.4 meaning stream invites are supported.
</summary>
<param name="cancellationToken"></param>
<returns>true if invites are supported</returns>
<exception cref="T:Speckle.Core.Logging.SpeckleException">if Speckle Server version is less than v2.6.4</exception>
</member>
<member name="M:Speckle.Core.Api.Client.StreamInviteUse(System.String,System.String,System.Boolean,System.Threading.CancellationToken)">
<summary>
Accept or decline a stream invite.
@@ -493,45 +328,22 @@
<returns></returns>
<exception cref="T:Speckle.Core.Logging.SpeckleException"></exception>
</member>
<member name="M:Speckle.Core.Api.Client.ActiveUserGet">
<summary>
Gets the currently active user profile.
</summary>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.ActiveUserGet(System.Threading.CancellationToken)">
<summary>
Gets the currently active user profile.
</summary>
<param name="cancellationToken"></param>
<returns></returns>
<exception cref="T:Speckle.Core.Logging.SpeckleException"></exception>
</member>
<member name="M:Speckle.Core.Api.Client.OtherUserGet(System.String)">
<member name="M:Speckle.Core.Api.Client.OtherUserGet(System.String,System.Threading.CancellationToken)">
<summary>
Get another user's profile by its user id.
</summary>
<param name="id">Id of the user you are looking for</param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.OtherUserGet(System.Threading.CancellationToken,System.String)">
<summary>
Get another user's profile by its user id.
</summary>
<param name="cancellationToken"></param>
<param name="id">Id of the user you are looking for</param>
<returns></returns>
<exception cref="T:Speckle.Core.Logging.SpeckleException"></exception>
</member>
<member name="M:Speckle.Core.Api.Client.UserSearch(System.String,System.Int32)">
<summary>
Searches for a user on the server.
</summary>
<param name="query">String to search for. Must be at least 3 characters</param>
<param name="limit">Max number of users to return</param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Client.UserSearch(System.Threading.CancellationToken,System.String,System.Int32)">
<member name="M:Speckle.Core.Api.Client.UserSearch(System.String,System.Int32,System.Threading.CancellationToken)">
<summary>
Searches for a user on the server.
</summary>
@@ -601,17 +413,17 @@
</member>
<member name="P:Speckle.Core.Api.Stream.branch">
<summary>
Set only in the case that you've requested this through <see cref="M:Speckle.Core.Api.Client.BranchGet(System.Threading.CancellationToken,System.String,System.String,System.Int32)"/>.
Set only in the case that you've requested this through <see cref="M:Speckle.Core.Api.Client.BranchGet(System.String,System.String,System.Int32,System.Threading.CancellationToken)"/>.
</summary>
</member>
<member name="P:Speckle.Core.Api.Stream.commit">
<summary>
Set only in the case that you've requested this through <see cref="M:Speckle.Core.Api.Client.CommitGet(System.Threading.CancellationToken,System.String,System.String)"/>.
Set only in the case that you've requested this through <see cref="M:Speckle.Core.Api.Client.CommitGet(System.String,System.String,System.Threading.CancellationToken)"/>.
</summary>
</member>
<member name="P:Speckle.Core.Api.Stream.commits">
<summary>
Set only in the case that you've requested this through <see cref="M:Speckle.Core.Api.Client.StreamGetCommits(System.Threading.CancellationToken,System.String,System.Int32)"/>
Set only in the case that you've requested this through <see cref="M:Speckle.Core.Api.Client.StreamGetCommits(System.String,System.Int32,System.Threading.CancellationToken)"/>
</summary>
</member>
<member name="T:Speckle.Core.Api.ActiveUserData">
@@ -774,15 +586,25 @@
</member>
<member name="M:Speckle.Core.Api.Operations.Serialize(Speckle.Core.Models.Base)">
<summary>
Serializes a given object. Note: if you want to save and persist an object to a Speckle Transport or Server, please use any of the "Send" methods. See <see cref="!:Send(Base, System.Collections.Generic.List&lt;Speckle.Core.Transports.ITransport&gt;, bool, System.Action&lt;System.Collections.Concurrent.ConcurrentDictionary&lt;string,int&gt;&gt;(System.Collections.Concurrent.ConcurrentDictionary&lt;string,int&gt;), Action&lt;string, Exception&gt;)"/>.
Serializes a given object.
<remarks>
if you want to save and persist an object to a Speckle Transport or Server,
please use any of the "Send" methods.
See <see cref="M:Speckle.Core.Api.Operations.Send(Speckle.Core.Models.Base,System.Collections.Generic.List{Speckle.Core.Transports.ITransport},System.Boolean,System.Action{System.Collections.Concurrent.ConcurrentDictionary{System.String,System.Int32}},System.Action{System.String,System.Exception},System.Boolean,Speckle.Core.Api.SerializerVersion)"/>
</remarks>
</summary>
<param name="object"></param>
<returns>A json string representation of the object.</returns>
</member>
<member name="M:Speckle.Core.Api.Operations.Serialize(Speckle.Core.Models.Base,System.Threading.CancellationToken,Speckle.Core.Api.SerializerVersion)">
<summary>
Serializes a given object. Note: if you want to save and persist an object to Speckle Transport or Server, please use any of the "Send" methods. See <see cref="!:Send(Base, System.Collections.Generic.List&lt;Speckle.Core.Transports.ITransport&gt;, bool, System.Action&lt;System.Collections.Concurrent.ConcurrentDictionary&lt;string,int&gt;&gt;(System.Collections.Concurrent.ConcurrentDictionary&lt;string,int&gt;), Action&lt;string, Exception&gt;)"/>.
Serializes a given object.
</summary>
<remarks>
If you want to save and persist an object to Speckle Transport or Server,
please use any of the "Send" methods.
<see cref="M:Speckle.Core.Api.Operations.Send(Speckle.Core.Models.Base,System.Collections.Generic.List{Speckle.Core.Transports.ITransport},System.Boolean,System.Action{System.Collections.Concurrent.ConcurrentDictionary{System.String,System.Int32}},System.Action{System.String,System.Exception},System.Boolean,Speckle.Core.Api.SerializerVersion)"/>
</remarks>
<param name="object"></param>
<param name="cancellationToken">Propagates notification that operations should be canceled.</param>
<returns>A json string representation of the object.</returns>
@@ -803,15 +625,24 @@
</member>
<member name="M:Speckle.Core.Api.Operations.Deserialize(System.String)">
<summary>
Deserializes a given object. Note: if you want to pull an object from a Speckle Transport or Server, please use any of the <see cref="!:Receive(string, Transports.ITransport, Transports.ITransport, System.Action&lt;System.Collections.Concurrent.ConcurrentDictionary&lt;string,int&gt;&gt;(System.Collections.Concurrent.ConcurrentDictionary&lt;string,int&gt;))"/>.
Deserializes a given object.
</summary>
<remarks>
Note: if you want to pull an object from a Speckle Transport or Server,
please use any of the <see cref="M:Speckle.Core.Api.Operations.Receive(System.String,Speckle.Core.Transports.ITransport,Speckle.Core.Transports.ITransport,System.Action{System.Collections.Concurrent.ConcurrentDictionary{System.String,System.Int32}},System.Action{System.String,System.Exception},System.Action{System.Int32},System.Boolean,Speckle.Core.Api.SerializerVersion)"/>
</remarks>
<param name="object">The json string representation of a speckle object that you want to deserialise.</param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Api.Operations.Deserialize(System.String,System.Threading.CancellationToken,Speckle.Core.Api.SerializerVersion)">
<summary>
Deserializes a given object. Note: if you want to pull an object from a Speckle Transport or Server, please use any of the <see cref="!:Receive(string, Transports.ITransport, Transports.ITransport, System.Action&lt;System.Collections.Concurrent.ConcurrentDictionary&lt;string,int&gt;&gt;(System.Collections.Concurrent.ConcurrentDictionary&lt;string,int&gt;))"/>.
Deserializes a given object.
</summary>
<remarks>
Note: if you want to pull an object from a Speckle Transport or Server,
please use any of the
<see cref="M:Speckle.Core.Api.Operations.Receive(System.String,Speckle.Core.Transports.ITransport,Speckle.Core.Transports.ITransport,System.Action{System.Collections.Concurrent.ConcurrentDictionary{System.String,System.Int32}},System.Action{System.String,System.Exception},System.Action{System.Int32},System.Boolean,Speckle.Core.Api.SerializerVersion)"/>.
</remarks>
<param name="object">The json string representation of a speckle object that you want to deserialise.</param>
<param name="cancellationToken">Propagates notification that operations should be canceled.</param>
<returns></returns>
@@ -830,6 +661,15 @@
<param name="dictionary"></param>
<returns></returns>
</member>
<member name="T:Speckle.Core.Api.ServerLimits">
<summary>
Defines the limits for specific API calls on the Speckle Server.
These are magic numbers! Should be aligned with server always.
</summary>
<remarks>
⚠️ Not all limits are reflected here!
</remarks>
</member>
<member name="T:Speckle.Core.Credentials.AccountManager">
<summary>
Manage accounts locally for desktop applications.
@@ -880,7 +720,8 @@
<summary>
Gets all the accounts present in this environment.
</summary>
<returns></returns>
<remarks>This function does have potential side effects. Any invalid accounts found while enumerating will be removed</remarks>
<returns>Un-enumerated enumerable of accounts</returns>
</member>
<member name="M:Speckle.Core.Credentials.AccountManager.GetLocalAccounts">
<summary>
@@ -1125,16 +966,55 @@
</member>
<member name="T:Speckle.Core.Kits.ConversionException">
<summary>
Exception thrown when conversion of an object fails
Exception thrown when conversion of an object was not successful
</summary>
<remarks>
Ideally this exception contains a meaningful message, and reference to the object that failed to be converted.
This exception can be used for both ToSpeckle and ToNative conversion
</remarks>
</member>
<member name="T:Speckle.Core.Kits.ConversionNotSupportedException">
<summary>
Exception used when an object could not be converted, because we don't support a specific conversion.
</summary>
<remarks>
This Exception should be thrown as part of a pre-emptive check in conversions (not as part reactive error handling)
and usage (throwing) should not be dependent on external state:
i.e. given the same object and converter state, the outcome (exception throw or not) should be the same.
</remarks>
<example>
It can be used for:
<ul>
<li> objects who's <see cref="T:System.Type"/> we don't support (e.g. <c>"Walls are not supported"</c>)</li>
<li> objects with a property who's value we don't support (e.g. <c>"Beams with shape type of Circular are not supported"</c>)</li>
<li> complex object requirements (e.g. <c>"We don't support walls with zero width and no displayValue"</c>)</li>
</ul>
It should <b>NOT</b> be used for:
<ul>
<li> Invalid Speckle Objects (e.g. <c>"We don't support walls with null lines"</c>)</li>
<li> Objects that we have already converted, and therefore now skip (e.g. <c>"A Wall with the same name was already converted"</c>)</li>
<li> Reactive error handling (e.g. "Failed to convert wall, I guess it wasn't supported")</li>
</ul>
</example>
</member>
<member name="T:Speckle.Core.Kits.ConversionSkippedException">
<summary>
Exception thrown when an object was desirably skipped
Exception thrown when an object was desirably skipped<br/>
</summary>
<remarks>
<b>Avoid throwing this exception Type!</b><br/>
As it introduces some bad patterns for exception handling.
<br/>
Namely, it encodes how the exception WILL be handled, Not simply what HAS happened.
Exceptions shouldn't care how they are handled.
<br/>
We were also misusing this exception in Revit, to correct for ambiguity in the way certain objects should be traversed,
by selectively skipping objects that were already converted by other means.
</remarks>
</member>
<member name="T:Speckle.Core.Kits.ConversionNotReadyException">
<summary>
Exception thrown when an object was not ready to be baked into the document (i.e. the element's host doesn't exist yet)
</summary>
</member>
<member name="P:Speckle.Core.Kits.ISpeckleConverter.Report">
@@ -1182,6 +1062,23 @@
<param name="objects"></param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Kits.ISpeckleConverter.ConvertToNativeDisplayable(Speckle.Core.Models.Base)">
<summary>
Converts a given speckle objects as a generic native object.
This should assume <see cref="M:Speckle.Core.Kits.ISpeckleConverter.CanConvertToNativeDisplayable(Speckle.Core.Models.Base)"/> has been called and returned True,
or call it within this method's implementation to ensure non-displayable objects are gracefully handled.
</summary>
<remarks>
This method should not try to convert an object to it's native representation (i.e Speckle Wall -> Wall),
but rather use the 'displayValue' of that wall to create a geometrically correct representation of that object
in the native application.
An object may be able to be converted both with <see cref="M:Speckle.Core.Kits.ISpeckleConverter.ConvertToNative(Speckle.Core.Models.Base)"/> and <see cref="M:Speckle.Core.Kits.ISpeckleConverter.ConvertToNativeDisplayable(Speckle.Core.Models.Base)"/>.
In this case, deciding which to use is dependent on each connector developer.
Preferably, <see cref="M:Speckle.Core.Kits.ISpeckleConverter.ConvertToNativeDisplayable(Speckle.Core.Models.Base)"/> should be used as a fallback to the <see cref="M:Speckle.Core.Kits.ISpeckleConverter.ConvertToNative(Speckle.Core.Models.Base)"/> logic.
</remarks>
<param name="object">Speckle object to convert</param>
<returns>The native object that resulted after converting the input <paramref name="object"/></returns>
</member>
<member name="M:Speckle.Core.Kits.ISpeckleConverter.CanConvertToNative(Speckle.Core.Models.Base)">
<summary>
Checks if it can convert a Speckle object to a native one
@@ -1189,6 +1086,20 @@
<param name="object">Speckle object to convert</param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Kits.ISpeckleConverter.CanConvertToNativeDisplayable(Speckle.Core.Models.Base)">
<summary>
Checks to verify if a given object is: 1) displayable and 2) can be supported for conversion to the native application.
An object is considered "displayable" if it has a 'displayValue' property (defined in its class or dynamically attached to it, detached or not).
</summary>
<remarks>
An object may return "True" for both <see cref="M:Speckle.Core.Kits.ISpeckleConverter.CanConvertToNative(Speckle.Core.Models.Base)"/> and <see cref="M:Speckle.Core.Kits.ISpeckleConverter.CanConvertToNativeDisplayable(Speckle.Core.Models.Base)"/>
In this case, deciding which to use is dependent on each connector developer.
Preferably, <see cref="M:Speckle.Core.Kits.ISpeckleConverter.CanConvertToNativeDisplayable(Speckle.Core.Models.Base)"/> should be used as a fallback to the <see cref="M:Speckle.Core.Kits.ISpeckleConverter.CanConvertToNative(Speckle.Core.Models.Base)"/> logic.
Objects found in the 'displayValue' property are assumed to be universally convertible by all converters and the viewer, but are not guaranteed to be so.
</remarks>
<param name="object">Speckle object to convert</param>
<returns>True if the object is "displayable" and the converter supports native conversion of the given speckle object in particular.</returns>
</member>
<member name="M:Speckle.Core.Kits.ISpeckleConverter.GetServicedApplications">
<summary>
Returns a list of applications serviced by this converter
@@ -1650,7 +1561,7 @@
<summary>
Abstract Builder class for a root commit <see cref="T:Speckle.Core.Models.Base"/> object.
</summary>
<typeparam name="TNativeObjectData">The native object data type needed as input for building <see cref="F:Speckle.Core.Models.CommitObjectBuilder`1._parentInfos"/></typeparam>
<typeparam name="TNativeObjectData">The native object data type needed as input for building <see cref="!:_parentInfos"/></typeparam>
<remarks>
It is designed to be inherited by a host app specific implementation,
to give connectors flexibility in constructing their objects.
@@ -1663,12 +1574,12 @@
<member name="F:Speckle.Core.Models.CommitObjectBuilder`1.converted">
<summary>app id -> base</summary>
</member>
<member name="F:Speckle.Core.Models.CommitObjectBuilder`1._parentInfos">
<summary>Base -> Tuple{Parent App Id, propName} ordered by priority</summary>
<member name="F:Speckle.Core.Models.CommitObjectBuilder`1._nestingInstructions">
<summary>Base -> NestingInstructions ordered by priority</summary>
</member>
<member name="M:Speckle.Core.Models.CommitObjectBuilder`1.IncludeObject(Speckle.Core.Models.Base,`0)">
<summary>
Given the parameters, builds connector specific <see cref="F:Speckle.Core.Models.CommitObjectBuilder`1._parentInfos"/>
Given the parameters, builds connector specific <see cref="!:_parentInfos"/>
to be applied when <see cref="M:Speckle.Core.Models.CommitObjectBuilder`1.BuildCommitObject(Speckle.Core.Models.Base)"/> is called.
</summary>
<param name="conversionResult"></param>
@@ -1684,7 +1595,7 @@
</remarks>
<param name="rootCommitObject"></param>
</member>
<member name="M:Speckle.Core.Models.CommitObjectBuilder`1.SetRelationship(Speckle.Core.Models.Base,System.ValueTuple{System.String,System.String}[])">
<member name="M:Speckle.Core.Models.CommitObjectBuilder`1.SetRelationship(Speckle.Core.Models.Base,System.Collections.Generic.IList{Speckle.Core.Models.NestingInstructions})">
<summary>
Sets information on how a given object should be nested in the commit tree.
<paramref name="parentInfo"/> encodes the order in which we should try and nest the given <paramref name="conversionResult"/>
@@ -1704,18 +1615,18 @@
<member name="M:Speckle.Core.Models.CommitObjectBuilder`1.ApplyRelationship(Speckle.Core.Models.Base,Speckle.Core.Models.Base)">
<summary>
Will attempt to find and nest the <paramref name="current"/> object
under the first valid parent according to the <see cref="F:Speckle.Core.Models.CommitObjectBuilder`1._parentInfos"/> <see cref="F:Speckle.Core.Models.CommitObjectBuilder`1.converted"/> dictionary.
under the first valid parent according to the <see cref="!:_parentInfos"/> <see cref="F:Speckle.Core.Models.CommitObjectBuilder`1.converted"/> dictionary.
</summary>
<remarks>
A parent is considered valid if
1. Is non null
2. Is in the <see cref="F:Speckle.Core.Models.CommitObjectBuilder`1.converted"/> dictionary
3. Has (or can dynamically accept) a <see cref="T:System.Collections.IList"/> typed property with the propName specified by the <see cref="F:Speckle.Core.Models.CommitObjectBuilder`1._parentInfos"/> item
3. Has (or can dynamically accept) a <see cref="T:System.Collections.IList"/> typed property with the propName specified by the <see cref="!:_parentInfos"/> item
4. Said <see cref="T:System.Collections.IList"/> can accept the <see cref="!:current"/> object's type
</remarks>
<param name="current"></param>
<param name="rootCommitObject"></param>
<exception cref="T:System.InvalidOperationException">Thrown when no valid parent was found for <see cref="!:current"/> given <see cref="F:Speckle.Core.Models.CommitObjectBuilder`1._parentInfos"/></exception>
<exception cref="T:System.InvalidOperationException">Thrown when no valid parent was found for <see cref="!:current"/> given <see cref="!:_parentInfos"/></exception>
</member>
<member name="T:Speckle.Core.Models.DynamicBase">
<summary>
@@ -1885,6 +1796,15 @@
<param name="value">Value to set</param>
</member>
<!-- Badly formed XML comment ignored for member "M:Speckle.Core.Models.Extensions.BaseExtensions.GetDetachedPropName(Speckle.Core.Models.Base,System.String)" -->
<member name="M:Speckle.Core.Models.Extensions.BaseExtensions.IsDisplayableObject(Speckle.Core.Models.Base)">
<summary>
Checks if an object "is displayable" i.e. has a displayValue property that is a list of base.
This is to mirror the selection logic of our viewer package, where any "displayable object" will become
a single selectable entity.
</summary>
<param name="speckleObject">The Base object to check.</param>
<returns>True if the object is displayable, false otherwise.</returns>
</member>
<member name="T:Speckle.Core.Models.Abstract">
<summary>
Wrapper around other, third party, classes that are not coming from a speckle kit.
@@ -2105,14 +2025,20 @@
<param name="membersToTraverse">Function returning the members that should be traversed for objects where this rule holds <see langword = "true"/></param>
<returns>Traversal rule in a usable state</returns>
</member>
<member name="M:Speckle.Core.Models.Utilities.hashString(System.String,Speckle.Core.Models.Utilities.HashingFuctions)">
<member name="T:Speckle.Core.Models.NestingInstructions">
<summary>
Wrapper method around hashing functions. Defaults to md5.
Container for a reference to a parent's applicationId and an Action to
execute in order to nest the child on the parent
</summary>
</member>
<member name="M:Speckle.Core.Models.Utilities.HashString(System.String,Speckle.Core.Models.Utilities.HashingFunctions)">
<summary>
Wrapper method around hashing functions..
</summary>
<param name="input"></param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Models.Utilities.GetApplicationProps(System.Object,System.Type,System.Boolean,System.Collections.Generic.List{System.String})">
<member name="M:Speckle.Core.Models.Utilities.GetApplicationProps(System.Object,System.Type,System.Boolean,System.Collections.Generic.IReadOnlyList{System.String})">
<summary>
Retrieves the simple type properties of an object
</summary>
@@ -2152,7 +2078,7 @@
<member name="M:Speckle.Core.Serialisation.BaseObjectDeserializerV2.Deserialize(System.String)">
<param name="rootObjectJson">The JSON string of the object to be deserialized <see cref="T:Speckle.Core.Models.Base"/></param>
<returns>A <see cref="T:Speckle.Core.Models.Base"/> typed object deserialized from the <paramref name="rootObjectJson"/></returns>
<exception cref="T:System.InvalidOperationException">Thrown when <see cref="F:Speckle.Core.Serialisation.BaseObjectDeserializerV2.Busy"/></exception>
<exception cref="T:System.InvalidOperationException">Thrown when <see cref="F:Speckle.Core.Serialisation.BaseObjectDeserializerV2._busy"/></exception>
<exception cref="T:System.ArgumentException">Thrown when <paramref name="rootObjectJson"/> deserializes to a type other than <see cref="T:Speckle.Core.Models.Base"/></exception>
</member>
<!-- Badly formed XML comment ignored for member "T:Speckle.Core.Serialisation.BaseObjectSerializer" -->
@@ -2278,11 +2204,9 @@
<returns></returns>
</member>
<member name="M:Speckle.Core.Transports.ITransport.GetObject(System.String)">
<summary>
Gets an object.
</summary>
<param name="id">The object's hash.</param>
<returns></returns>
<returns>The serialized object data, or <see langword="null"/> if the transport cannot find the object</returns>
<exception cref="T:System.OperationCanceledException"></exception>
</member>
<member name="M:Speckle.Core.Transports.ITransport.CopyObjectAndChildren(System.String,Speckle.Core.Transports.ITransport,System.Action{System.Int32})">
<summary>
@@ -2296,7 +2220,7 @@
<exception cref="T:System.ArgumentException">The provided arguments are not valid</exception>
<exception cref="T:System.OperationCanceledException"></exception>
</member>
<member name="M:Speckle.Core.Transports.ITransport.HasObjects(System.Collections.Generic.List{System.String})">
<member name="M:Speckle.Core.Transports.ITransport.HasObjects(System.Collections.Generic.IReadOnlyList{System.String})">
<summary>
Checks if objects are present in the transport
</summary>
@@ -2329,7 +2253,7 @@
Callback when sending batches. Parameters: object count, total bytes sent
</summary>
</member>
<member name="F:Speckle.Core.Transports.SQLiteTransport.WriteTimer">
<member name="F:Speckle.Core.Transports.SQLiteTransport._writeTimer">
<summary>
Timer that ensures queue is consumed if less than MAX_TRANSACTION_SIZE objects are being sent.
</summary>
@@ -2369,7 +2293,7 @@
<summary>
Adds an object to the saving queue.
</summary>
<param name="hash"></param>
<param name="id"></param>
<param name="serializedObject"></param>
</member>
<member name="M:Speckle.Core.Transports.SQLiteTransport.SaveObjectSync(System.String,System.String)">
@@ -2383,7 +2307,7 @@
<summary>
Gets an object.
</summary>
<param name="hash"></param>
<param name="id"></param>
<returns></returns>
</member>
<member name="M:Speckle.Core.Transports.Utilities.WaitUntil(System.Func{System.Boolean},System.Int32,System.Int32)">
@@ -0,0 +1,33 @@
fileFormatVersion: 2
guid: a85708f21043b0c458a3a77c0e09e4b8
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 1
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 1
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
- first:
Windows Store Apps: WindowsStoreApps
second:
enabled: 0
settings:
CPU: AnyCPU
userData:
assetBundleName:
assetBundleVariant:
@@ -14,7 +14,7 @@ namespace Speckle.ConnectorUnity.NativeCache
[ExecuteAlways]
public abstract class AbstractNativeCache : ScriptableObject
{
protected bool isWriting = false;
protected bool isWriting;
public abstract bool TryGetObject<T>(
Base speckleObject,
[NotNullWhen(true)] out T? nativeObject
@@ -429,6 +429,17 @@
}
}
},
"System.DoubleNumerics/3.1.3": {
"dependencies": {
"NETStandard.Library": "2.0.3"
},
"runtime": {
"lib/netstandard1.3/System.DoubleNumerics.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "1.0.0.0"
}
}
},
"System.Memory/4.5.4": {
"dependencies": {
"System.Buffers": "4.5.1",
@@ -848,6 +859,13 @@
"path": "system.collections.immutable/5.0.0",
"hashPath": "system.collections.immutable.5.0.0.nupkg.sha512"
},
"System.DoubleNumerics/3.1.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-KRKEM/L3KBodjA9VOg3EifFVWUY6EOqaMB05UvPEDm7Zeby/kZW+4kdWUEPzW6xtkwf46p661L9NrbeeQhtLzw==",
"path": "system.doublenumerics/3.1.3",
"hashPath": "system.doublenumerics.3.1.3.nupkg.sha512"
},
"System.Memory/4.5.4": {
"type": "package",
"serviceable": true,
@@ -180,6 +180,12 @@
<param name="baseGeometries">A list of base classes to represent the direct shape (only mesh and brep are allowed, anything else will be ignored.)</param>
<param name="parameters">Optional Parameters for this instance.</param>
</member>
<member name="T:Objects.BuiltElements.Revit.RevitFamilyCategory">
<summary>
FamilyDocuments can only be assigned these categories
This is a subset of the list above which was manually retrieved from Revit's UI
</summary>
</member>
<member name="P:Objects.BuiltElements.Revit.FreeformElement.baseGeometry">
<summary>
DEPRECATED. Sets the geometry contained in the FreeformElement. This field has been deprecated in favor of `baseGeometries`
@@ -353,6 +359,112 @@
Retrieves the elements for this link
</summary>
</member>
<member name="T:Objects.BuiltElements.RebarGroup`1">
<summary>
A reinforcement bar group comprised of reinforcing bars of the same type and shape.
</summary>
<remarks>
This class is not suitable for freeform rebar, which can have multiple shapes.
</remarks>
</member>
<member name="P:Objects.BuiltElements.RebarGroup`1.shape">
<summary>
The shape of the rebar group
</summary>
</member>
<member name="P:Objects.BuiltElements.RebarGroup`1.number">
<summary>
The number of rebars in the rebar group
</summary>
<remarks>
Excluded end bars are not included in the count
</remarks>
</member>
<member name="P:Objects.BuiltElements.RebarGroup`1.hasFirstBar">
<summary>
Indicates if rebar set includes the first bar
</summary>
<remarks>
Only applicable to stirrup (transverse) rebar
</remarks>
</member>
<member name="P:Objects.BuiltElements.RebarGroup`1.hasLastBar">
<summary>
Indicates if rebar set includes the last bar
</summary>
<remarks>
Only applicable to stirrup (transverse) rebar
</remarks>
</member>
<member name="P:Objects.BuiltElements.RebarGroup`1.startHook">
<summary>
The start hook of bars in the rebar group
</summary>
<remarks>
Null indicates no start hook
</remarks>
</member>
<member name="P:Objects.BuiltElements.RebarGroup`1.endHook">
<summary>
The end hook of bars in the rebar group
</summary>
<remarks>
Null indicates no end hook
</remarks>
</member>
<member name="P:Objects.BuiltElements.RebarGroup`1.displayValue">
<summary>
The display representation of the rebar group as centerline curves
</summary>
</member>
<member name="P:Objects.BuiltElements.RebarGroup`1.volume">
<summary>
The total volume of the rebar group.
</summary>
</member>
<member name="T:Objects.BuiltElements.RebarShape">
<summary>
The shape describing the geometry and geometry parameters of a reinforcing bar
</summary>
</member>
<member name="P:Objects.BuiltElements.RebarShape.name">
<summary>
The name of the rebar shape
</summary>
</member>
<member name="P:Objects.BuiltElements.RebarShape.rebarType">
<summary>
The type of the rebar shape
</summary>
</member>
<member name="P:Objects.BuiltElements.RebarShape.curves">
<summary>
The curves of the rebar shape
</summary>
<remarks>
Typically suppresses hooks and bend radius
</remarks>
</member>
<member name="P:Objects.BuiltElements.RebarShape.barDiameter">
<summary>
The diameter of the rebar bar
</summary>
</member>
<member name="P:Objects.BuiltElements.RebarHook.angle">
<summary>
The angle of the hook in radians.
</summary>
</member>
<member name="P:Objects.BuiltElements.RebarHook.length">
<summary>
The length of the hook.
</summary>
</member>
<member name="P:Objects.BuiltElements.RebarHook.radius">
<summary>
The radius of the bend of the hook.
</summary>
</member>
<member name="M:Objects.BuiltElements.Room.#ctor(System.String,System.String,Objects.BuiltElements.Level,Objects.Geometry.Point)">
<summary>
SchemaBuilder constructor for a Room
@@ -2154,7 +2266,7 @@
<param name="units"></param>
<exception cref="T:Speckle.Core.Logging.SpeckleException"></exception>
</member>
<member name="M:Objects.Other.Transform.#ctor(System.Numerics.Matrix4x4,System.String)">
<member name="M:Objects.Other.Transform.#ctor(System.DoubleNumerics.Matrix4x4,System.String)">
<summary>
Construct a transform from a 4x4 matrix and translation units
</summary>
@@ -2184,7 +2296,7 @@
Units for translation
</summary>
</member>
<member name="M:Objects.Other.Transform.Decompose(System.Numerics.Vector3@,System.Numerics.Quaternion@,System.Numerics.Vector4@)">
<member name="M:Objects.Other.Transform.Decompose(System.DoubleNumerics.Vector3@,System.DoubleNumerics.Quaternion@,System.DoubleNumerics.Vector4@)">
<summary>
Decomposes matrix into its scaling, rotation, and translation components
</summary>
@@ -1,10 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Collections.Generic;
using System.Threading.Tasks;
using Speckle.Core.Api;
using Speckle.Core.Credentials;
using Speckle.Core.Logging;
namespace Speckle.ConnectorUnity
{
@@ -9,8 +9,12 @@ namespace Speckle.ConnectorUnity.Wrappers.Selection
[Serializable]
public sealed class BranchSelection : OptionSelection<Branch>
{
[field: SerializeField, Range(1, 100), Tooltip("Number of branches to request")]
public int BranchesLimit { get; set; } = 100;
[field:
SerializeField,
Range(1, ServerLimits.BRANCH_GET_LIMIT),
Tooltip("Number of branches to request")
]
public int BranchesLimit { get; set; } = ServerLimits.OLD_BRANCH_GET_LIMIT;
[field: SerializeField, Range(1, 100), Tooltip("Number of commits to request")]
public int CommitsLimit { get; set; } = 25;
@@ -30,14 +34,14 @@ namespace Speckle.ConnectorUnity.Wrappers.Selection
StreamSelection.OnSelectionChange = RefreshOptions;
}
protected override string? KeyFunction(Branch? value) => value?.name;
protected override string? KeyFunction(Branch? value) => value?.id;
public override void RefreshOptions()
{
Stream? stream = StreamSelection.Selected;
if (stream == null)
return;
IList<Branch> branches;
IReadOnlyList<Branch> branches;
try
{
branches = Client!
@@ -29,7 +29,7 @@ namespace Speckle.ConnectorUnity.Wrappers.Selection
public override void RefreshOptions()
{
Branch? branch = BranchSelection!.Selected;
Branch? branch = BranchSelection.Selected;
if (branch == null)
return;
List<Commit> commits = branch.commits.items;
@@ -10,7 +10,7 @@ namespace Speckle.ConnectorUnity.Wrappers.Selection
/// <summary>
/// Reusable <see langword="abstract"/> serializable type that abstracts
/// the fetching of <typeparamref name="TOption"/> objects.
/// And exposes an <see cref="Array"/> of <see cref="Options"/>
/// And exposes an list of <see cref="Options"/>
/// with serialised selection.
/// </summary>
/// <typeparam name="TOption"></typeparam>
@@ -18,32 +18,42 @@ namespace Speckle.ConnectorUnity.Wrappers.Selection
public abstract class OptionSelection<TOption>
where TOption : class
{
[SerializeField]
private int selectedIndex = -1;
public IReadOnlyList<TOption> Options { get; protected set; } = Array.Empty<TOption>();
public int SelectedIndex
{
get => selectedIndex;
set
{
selectedIndex = value;
OnSelectionChange?.Invoke();
}
}
private Dictionary<string, int>? _indexMap;
[SerializeField]
private string? selectedId;
public TOption? Selected
{
get
{
if (Options is null)
if (selectedId == null)
return null;
if (SelectedIndex < 0 || SelectedIndex >= Options.Length)
return null;
return Options[SelectedIndex];
TryGetOption(selectedId, out var value);
return value;
}
set
{
selectedId = KeyFunction(value);
OnSelectionChange?.Invoke();
}
}
public TOption[] Options { get; protected set; } = Array.Empty<TOption>();
public bool TryGetOption(string key, [NotNullWhen(true)] out TOption? value)
{
if (_indexMap is not null && _indexMap.TryGetValue(key, out int index))
{
value = Options[index];
return true;
}
value = null;
return false;
}
public Action? OnSelectionChange { get; set; }
public abstract Client? Client { get; }
@@ -53,36 +63,38 @@ namespace Speckle.ConnectorUnity.Wrappers.Selection
public abstract void RefreshOptions();
protected void GenerateOptions(IList<TOption> source, Func<TOption, int, bool> isDefault)
protected void GenerateOptions(
IReadOnlyCollection<TOption?> source,
Func<TOption, int, bool> isDefault
)
{
List<TOption> optionsToAdd = new(source.Count);
int defaultOption = -1;
Dictionary<string, int> indexMap = new(source.Count);
string? defaultOption = null;
int index = 0;
foreach (TOption? a in source)
{
if (a == null)
continue;
var key = KeyFunction(a);
optionsToAdd.Add(a);
indexMap.Add(key, index);
if (isDefault(a, index))
defaultOption = index;
defaultOption = key;
index++;
}
TOption? currentSelected = Selected;
bool selectionOutOfRange = SelectedIndex < 0 || SelectedIndex >= optionsToAdd.Count;
if (
selectionOutOfRange
|| (
currentSelected != null
&& KeyFunction(currentSelected) != KeyFunction(optionsToAdd[SelectedIndex])
)
)
string? currentSelected = KeyFunction(Selected);
if (currentSelected is null || !indexMap.ContainsKey(currentSelected))
{
selectedIndex = defaultOption;
selectedId = defaultOption;
}
Options = optionsToAdd.ToArray();
//Debug.Log($"{this.GetType()} updated");
Options = optionsToAdd;
_indexMap = indexMap;
OnSelectionChange?.Invoke();
}
}
@@ -36,7 +36,7 @@ namespace Speckle.ConnectorUnity.Wrappers.Selection
{
if (Client == null)
return;
IList<Stream> streams;
IReadOnlyList<Stream> streams;
try
{
streams = Client.StreamsGet(StreamsLimit).GetAwaiter().GetResult();
@@ -5,7 +5,6 @@ using System.Collections.Specialized;
using Speckle.Core.Api;
using Speckle.Core.Models;
using Speckle.Core.Serialisation;
using Speckle.Newtonsoft.Json;
using UnityEngine;
namespace Speckle.ConnectorUnity.Wrappers
@@ -1,6 +1,6 @@
{
"name": "systems.speckle.speckle-unity",
"version": "2.15.3",
"version": "2.17.0-rc",
"displayName": "Speckle Unity Connector",
"description": "AEC Interoperability for Unity through Speckle",
"unity": "2021.1",
@@ -21,4 +21,4 @@
"email": "hello@speckle.systems",
"url": "https://speckle.systems"
}
}
}