Skip to content

Commit 55b8ed6

Browse files
committed
#183 Duplication Builtins support
1 parent 7c19a64 commit 55b8ed6

File tree

2 files changed

+57
-19
lines changed

2 files changed

+57
-19
lines changed

source/RevitLookup/Core/Decomposition/Descriptors/ParameterDescriptor.cs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,22 @@ public ParameterDescriptor(Parameter parameter)
4343
return target switch
4444
{
4545
nameof(Parameter.ClearValue) => Variants.Disabled,
46+
nameof(Parameter.HasValue) => ResolveHasValue,
47+
nameof(Parameter.AsString) => ResolveAsString,
4648
_ => null
4749
};
50+
51+
IVariant ResolveHasValue()
52+
{
53+
// Memory corrupted if the Element is null
54+
return _parameter.Element is null ? Variants.Disabled() : Variants.Value(_parameter.HasValue);
55+
}
56+
57+
IVariant ResolveAsString()
58+
{
59+
// Memory corrupted if the Element is null
60+
return _parameter.Element is null ? Variants.Disabled() : Variants.Value(_parameter.AsString());
61+
}
4862
}
4963

5064
public void RegisterExtensions(IExtensionManager manager)
@@ -55,7 +69,7 @@ public void RegisterExtensions(IExtensionManager manager)
5569
manager.Register(nameof(ParameterExtensions.AsColor), () => Variants.Value(_parameter.AsColor()));
5670
}
5771

58-
if (_parameter.Element.Document.IsFamilyDocument)
72+
if (_parameter.Element is not null && _parameter.Element.Document.IsFamilyDocument)
5973
{
6074
manager.Register(nameof(FamilyManager.GetAssociatedFamilyParameter), RegisterGetAssociatedFamilyParameter);
6175
}

source/RevitLookup/Core/Units/UnitsCollector.cs

Lines changed: 42 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,47 +8,71 @@ public static class UnitsCollector
88
{
99
public static List<UnitInfo> GetBuiltinParametersInfo()
1010
{
11-
var parameters = Enum.GetValues(typeof(BuiltInParameter));
11+
#if NETCOREAPP
12+
var parameters = Enum.GetValues<BuiltInParameter>();
13+
var parameterNames = Enum.GetNames<BuiltInParameter>();
14+
#else
15+
var parameters = Enum.GetValues(typeof(BuiltInParameter)).Cast<BuiltInParameter>().ToArray();
16+
var parameterNames = Enum.GetNames(typeof(BuiltInParameter));
17+
#endif
1218
var result = new List<UnitInfo>(parameters.Length);
13-
foreach (BuiltInParameter parameter in parameters)
19+
for (var i = 0; i < parameters.Length; i++)
20+
{
21+
var parameter = parameters[i];
22+
string label;
1423
try
1524
{
16-
result.Add(new UnitInfo
17-
{
18-
Unit = parameter.ToString(),
19-
Label = parameter.ToLabel(),
20-
Value = parameter
21-
});
25+
label = parameter.ToLabel();
2226
}
2327
catch
2428
{
25-
// ignored
2629
// Some parameters don't have a label
30+
label = string.Empty;
2731
}
2832

33+
result.Add(new UnitInfo
34+
{
35+
Unit = parameterNames[i],
36+
Label = label,
37+
Value = parameter
38+
});
39+
}
40+
2941
return result;
3042
}
3143

3244
public static List<UnitInfo> GetBuiltinCategoriesInfo()
3345
{
34-
var categories = Enum.GetValues(typeof(BuiltInCategory));
46+
#if NETCOREAPP
47+
var categories = Enum.GetValues<BuiltInCategory>();
48+
var categoryNames = Enum.GetNames<BuiltInCategory>();
49+
#else
50+
var categories = Enum.GetValues(typeof(BuiltInCategory)).Cast<BuiltInCategory>().ToArray();
51+
var categoryNames = Enum.GetNames(typeof(BuiltInCategory));
52+
#endif
3553
var result = new List<UnitInfo>(categories.Length);
36-
foreach (BuiltInCategory category in categories)
54+
for (var i = 0; i < categories.Length; i++)
55+
{
56+
var category = categories[i];
57+
string label;
3758
try
3859
{
39-
result.Add(new UnitInfo
40-
{
41-
Unit = category.ToString(),
42-
Label = category.ToLabel(),
43-
Value = category
44-
});
60+
label = category.ToLabel();
4561
}
4662
catch
4763
{
48-
// ignored
4964
// Some categories don't have a label
65+
label = string.Empty;
5066
}
5167

68+
result.Add(new UnitInfo
69+
{
70+
Unit = categoryNames[i],
71+
Label = label,
72+
Value = category
73+
});
74+
}
75+
5276
return result;
5377
}
5478

0 commit comments

Comments
 (0)