1:利用近似几何中心代替物体的坐标
IfcStore model=IfcStore.Open(filename);
var context = new Xbim3DModelContext(model);
context.CreateContext();
var instances = context.ShapeInstances();
var instance = instances.FirstOrDefault(r => r.IfcProductLabel == window.EntityLabel);
//坐标
var Global = instance.Transformation;
提取所有构建的全局坐标,储存在xml文件中
static void GetLocation()
{
XmlDocument xml = new XmlDocument();
XmlNode statement = xml.CreateXmlDeclaration("1.0", "utf-8", "");
xml.AppendChild(statement);
//创建根节点
XmlElement root = xml.CreateElement("Root");
xml.AppendChild(root);
XmlNode RootNode = xml.SelectSingleNode("Root");
var model = IfcStore.Open(filename);
var context = new Xbim3DModelContext(model);
context.CreateContext();
var instances = context.ShapeInstances();
var products = model.Instances.OfType<IIfcProduct>();
foreach (var product in products)
{
if (product.Representation != null)
{
XmlNode ProductNode = xml.CreateElement(product.ExpressType + product.EntityLabel.ToString());
RootNode.AppendChild(ProductNode);
var instance = instances.FirstOrDefault(r => r.IfcProductLabel == product.EntityLabel);
var coordinate = GetGlobalLocation(instance);
XmlElement coordinateX = xml.CreateElement("X");
XmlElement coordinateY = xml.CreateElement("Y");
XmlElement coordinateZ = xml.CreateElement("Z");
coordinateX.InnerText = coordinate.X.ToString("f2");
coordinateY.InnerText = coordinate.Y.ToString("f2");
coordinateZ.InnerText = coordinate.Z.ToString("f2");
ProductNode.AppendChild(coordinateX);
ProductNode.AppendChild(coordinateY);
ProductNode.AppendChild(coordinateZ);
}
}
xml.Save("Location.xml");
if (File.Exists("Location.xml"))
{
Console.WriteLine("成功");
}
}
结果