zoukankan      html  css  js  c++  java
  • 不规则形状的Ifc构件顶点坐标获取

    不规则形状的Ifc构件顶点坐标获取

    今天有人问我,ifc构件的顶点坐标怎么获取,自己前年的时候写过类似的程序,但有点记不清了,最近一直用C++解析ifc,慎重起见,还是重新再写一次,java版本的获取方式如下,有空了再尝试一下C#版本的怎么写。

    public static void getVertex(IfcProduct ifcProductParam) {
            IfcProductRepresentation productRepresentation =ifcProductParam.getRepresentation();
            LIST<IfcRepresentation> listRepresentation =productRepresentation.getRepresentations();
            for(int k=0;k<listRepresentation.size();k++)
            {
                IfcShapeRepresentation shapeRepresentation=(IfcShapeRepresentation) listRepresentation.get(k);
                SET<IfcRepresentationItem> ifcRepresentationItemSet = shapeRepresentation.getItems();
                
                for(IfcRepresentationItem ifcRepresentationItemObj:ifcRepresentationItemSet) {
                    String className1 = ifcRepresentationItemObj.getClass().getName();
                    //System.out.println(className1+"  "+ifcRepresentationItemSet.size());
                    if(className1.contains("IfcPolyline")) {
                        IfcPolyline ifcPolylineObj = (IfcPolyline) ifcRepresentationItemObj;
                        LIST<IfcCartesianPoint> ifcCartesianPointList = ifcPolylineObj.getPoints();
                        for(IfcCartesianPoint ifcCartesianPointObj:ifcCartesianPointList) {
                            LIST<IfcLengthMeasure> ifcLengthMeasureList=ifcCartesianPointObj.getCoordinates();
                            for(IfcLengthMeasure ifcLengthMeasureObj:ifcLengthMeasureList) {
                                System.out.print(ifcLengthMeasureObj+" ");
                            }
                            System.out.println("");
                        }
                    }else if(className1.contains("IfcExtrudedAreaSolid")) {
                        IfcExtrudedAreaSolid ifcExtrudedAreaSolidObj = (IfcExtrudedAreaSolid) ifcRepresentationItemObj;
                        IfcProfileDef ifcProfileDef=ifcExtrudedAreaSolidObj.getSweptArea();
                        //IfcArbitraryClosedProfileDef IfcArbitraryClosedProfileDef=(IfcArbitraryClosedProfileDef) ifcExtrudedAreaSolidObj.getSweptArea();
                        String profileDefClassName = ifcProfileDef.getClass().getName();
                        //System.out.println("=="+profileDefClassName);
                        
                        //常规轮廓
                        if(profileDefClassName.contains("IfcRectangleProfileDef")) {
                            IfcRectangleProfileDef ifcRectangleProfileDef = (IfcRectangleProfileDef) ifcProfileDef;
                            
                            //中心点
                            IfcAxis2Placement2D ifcAxis2Placement2D = ifcRectangleProfileDef.getPosition();
                            IfcCartesianPoint ifcCartesianPoint = ifcAxis2Placement2D.getLocation();
                            LIST<IfcLengthMeasure> ifcLengthMeasureList= ifcCartesianPoint.getCoordinates();
                            
                            System.out.println("Coordinates:");
                            for(IfcLengthMeasure ifcLengthMeasureObj:ifcLengthMeasureList) {
                                System.out.print(ifcLengthMeasureObj+"	");
                            }
                            System.out.println("");
                            
                            //
                            IfcPositiveLengthMeasure ifcPositiveLengthMeasureX =ifcRectangleProfileDef.getXDim();
                            System.out.println("XDim:"+ifcPositiveLengthMeasureX);
                            
                            //
                            IfcPositiveLengthMeasure ifcPositiveLengthMeasureY =ifcRectangleProfileDef.getYDim();
                            System.out.println("YDim:"+ifcPositiveLengthMeasureY);
                            
                        }
                        //不规则轮廓
                        else if(profileDefClassName.contains("IfcArbitraryClosedProfileDef")) {
                            IfcArbitraryClosedProfileDef ifcArbitraryClosedProfileDef = (IfcArbitraryClosedProfileDef) ifcProfileDef;
                            IfcCurve ifcCurve = ifcArbitraryClosedProfileDef.getOuterCurve();
                            String ifcCurveClassName = ifcCurve.getClass().getName();
                            //System.out.println("==="+ifcCurveClassName);
                            if(ifcCurveClassName.contains("IfcPolyline")) {
                                IfcPolyline ifcPolyline = (IfcPolyline) ifcCurve;
                                LIST<IfcCartesianPoint>  ifcCartesianPointList=ifcPolyline.getPoints();
                                for(IfcCartesianPoint ifcCartesianPointObj:ifcCartesianPointList) {
                                    LIST<IfcLengthMeasure> ifcLengthMeasureList=ifcCartesianPointObj.getCoordinates();
                                    //两个坐标值分开存储的,需要遍历才能获得
                                    for(IfcLengthMeasure ifcLengthMeasureObj:ifcLengthMeasureList) {
                                        System.out.print(ifcLengthMeasureObj+"	");
                                    }
                                    System.out.println("");
                                }
                            }
                        }
                    }
                }
            }
            
            
        }
        

    --------------IfcWallStandardCase
    0.0 0.0
    12240.0 0.0
    Coordinates:
    6120.0 3.90798504668055E-13
    XDim:12240.0
    YDim:239.999999999997
    --------------IfcWallStandardCase
    0.0 0.0
    4400.0 -0.0
    Coordinates:
    2200.0 -7.105427357601E-15
    XDim:4400.0
    YDim:240.0
    --------------IfcWallStandardCase
    0.0 0.0
    12637.650181761 -0.0
    12637.650181761 -120.0
    11122.349818239 120.0
    0.0 120.0
    0.0 -120.0
    12637.650181761 -120.0
    --------------IfcWallStandardCase
    0.0 0.0
    7222.81601221758 -0.0
    7222.81601221758 -120.0
    7144.83528512168 120.0
    1515.30036352204 120.0
    0.0 -120.0
    6970.46507840039 -120.0
    7222.81601221758 -120.0
    --------------IfcWallStandardCase
    0.0 0.0
    1532.81489663935 0.0
    1532.81489663935 -120.0
    1532.81489663935 120.0
    77.9807270958989 120.0
    0.0 -120.0
    1292.81489663935 -120.0
    1532.81489663935 -120.0
    --------------IfcWallStandardCase
    0.0 0.0
    1991.65605265947 0.0
    Coordinates:
    995.828026329733 0.0
    XDim:1991.65605265947
    YDim:239.999999999997
    --------------IfcWallStandardCase
    0.0 0.0
    1000.0 0.0
    Coordinates:
    500.000000000001 -6.3948846218409E-14
    XDim:1000.0
    YDim:240.0
    --------------IfcWallStandardCase
    0.0 0.0
    4000.0 0.0
    Coordinates:
    2000.0 0.0
    XDim:4000.0
    YDim:239.999999999997
    --------------IfcWallStandardCase
    0.0 0.0
    1713.19293543784 -0.0
    Coordinates:
    856.596467718918 -1.98951966012828E-13
    XDim:1713.19293543784
    YDim:240.0

  • 相关阅读:
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    Apache Spark RDD(Resilient Distributed Datasets)论文
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    【机器学习实战】第10章 K-Means(K-均值)聚类算法
    [译]flexbox全揭秘
  • 原文地址:https://www.cnblogs.com/herd/p/11937659.html
Copyright © 2011-2022 走看看