Я работаю над базовым примером c для изменения данных (https://github.com/xBimTeam/XbimEssentials). Единственное, что я изменяю, - это код ниже, где я хочу добавить IfcPropertyTableValue вместо IfcPropertySingleValue.
Этот код выполняется, но в XbimXplorer в свойствах объекта ничего нет - он пуст.
Чтобы убедиться, что код примера, а также другие типы свойств работают и отображаются в Xplorer в разделе свойств.
var pSetRel = model.Instances.New<IfcRelDefinesByProperties>(r =>
{
r.GlobalId = Guid.NewGuid();
r.RelatingPropertyDefinition = model.Instances.New<IfcPropertySet>(pSet =>
{
pSet.Name = "Points";
// FOR EACH POINT i :
pSet.HasProperties.Add(model.Instances.New<IfcPropertyTableValue>(p =>
{
p.Name = "Points " + i;
// FOR EACH COORDINATE x :
p.DefiningValues.Add(new IfcText(x));
p.DefinedValues.Add(new IfcReal(-3.25));
}));
});
});
Как я могу заставить это работать?
Я также пробовал использовать код для чтения свойства на случай, если XbimXplorer просто не отображает таблицы. Этот код запускается и печатает нулевые строки (но работает для других свойств, отображаемых в Xplorer):
// Try to read and print the new property
var nameObj = "my_object_name";
var checkObj = model.Instances.FirstOrDefault<IIfcBuildingElement>(d => d.Name == nameObj);
if (checkObj == null)
{
outputBox.AppendText(newLine + "Object: " + nameObj + " not found");
}
else
{
var properties = checkObj.IsDefinedBy
.Where(r => r.RelatingPropertyDefinition is IIfcPropertySet)
.SelectMany(r => ((IIfcPropertySet)r.RelatingPropertyDefinition).HasProperties)
.OfType<IIfcPropertySingleValue>();
foreach (var property in properties)
outputBox.AppendText($"Property: {property.Name}, Value: {property.NominalValue}");
}
Было бы также удобно, если бы я мог добавить сразу несколько определяющих / определяемых пар значений, например, как это (аналогично обычным спискам C#):
IEnumerable<IfcValue> definingValues = new IfcText() {"x", "y", "z", "k"};
p.DefinedValues.AddRange(definingValues);
IEnumerable<IfcValue> definedValues = new IfcReal() {0.0, 1.6, -2.5, 3.33};
p.DefinedValues.AddRange(definedValues);
Однако {"x", "y", "z", "k"}
помечается ошибкой Невозможно инициализировать тип IfcText с помощью инициализатора коллекции, поскольку он не реализует ' System.Collections.IEnumerable '.