我正在研究修改数据的基本示例(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.Collection tions.IEnDigable‘。
发布于 2020-08-03 17:19:53
我不认为Xplorer会显示IfcPropertyTableValues。可能是因为目前输出TableValues的BIM工具很少,所以我猜它从未实现过(您需要确定如何在Xplorer视图中显示表-在属性网格中嵌套表吗?)。
如果您查看Xplorer码,您会发现它只支持SingleValues、ComplexValues和EnumeratedValues。您可能可以使用复杂值作为多个IfcPropertySingleValues的集合作为解决办法。
在输出值的第二个代码示例中,使用IfcPropertyTableValues子句筛选出任何.OfType<IIfcPropertySingleValue>(),这样就不会看到输出。看看SimpleProperties:1/FINAL/HTML/link/ifcsimpleproperty.htm的IFC规范
关于最后一个问题,您正在用错误的语法初始化数组。试着做这样的事情:
var labels = new Ifc4.MeasureResource.IfcText[] { "x", "y" };
p.DefiningValues.AddRange(labels.Cast<IIfcValue>()); https://stackoverflow.com/questions/63230788
复制相似问题