不规则形状的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+"\t");
}
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+"\t");
}
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

不规则形状的Ifc构件顶点坐标获取的更多相关文章

  1. 不规则的Ifc构件顶点提取方法

    BIM模型中有很多不规则的构件,在IFC中这些不规则的构件一般用顶点的形式表示,顶点坐标提取路径:  IfcObject->IfcProductDefinitionShape->IfcSh ...

  2. 获取IFC构件的位置数据、方向数据

    获取IFC构件的位置数据.方向数据 std::map<int, shared_ptr<BuildingEntity>> map_buildingEntity = b_model ...

  3. cocos2d-x 不规则形状按钮的点击判定

    cocos2d-x 不规则形状按钮的点击判定 原理: 1.OpeGL ES提供了glReadPixels[^footnote]函数,来获取当前framebuffer上的像素数据 2.cocos2d-x ...

  4. Unity 制作不规则形状button

    在游戏开发中,我们有时需要制作不规则形状的按键. Unity3d中使用UGUI的Button控件只能实现规则的长方形按钮.而通过给Button的Image组件添加对应的贴图(sprite)我们可以实现 ...

  5. osg::NodeVisitor中计算一个节点对应的世界变换矩阵、法向量、顶点坐标

    class MyNodeVisitor:public osg::NodeVisitor { pulic: MyNodeVisitor():osg::NodeVisitor(osg::NodeVisit ...

  6. 使用Win32 API创建不规则形状&带透明色的窗口

    前一阵突然想起了9月份电面某公司实习时的二面题,大概就是说怎么用Win32 API实现一个透明的窗口,估计当时我的脑残答案肯定让面试官哭笑不得吧.所以本人决定好好研究下这个问题.经过一下午的摸索,基本 ...

  7. C#的百度地图开发(三)依据坐标获取位置、商圈及周边信息

    原文:C#的百度地图开发(三)依据坐标获取位置.商圈及周边信息 我们得到了百度坐标,现在依据这一坐标来获取相应的信息.下面是相应的代码 public class BaiduMap { /// < ...

  8. 根据高德API知道坐标获取详细地址信息

    /** * 根据坐标获取具体地址 * @param coor 坐标字符串 * @return */ public static String getAdd(String coor){ String u ...

  9. 不规则形状的Mask动画

    不规则形状的Mask动画 效果 源码 https://github.com/YouXianMing/Animations // // MaskShapeViewController.m // Anim ...

随机推荐

  1. Linux命令——uname

    简介 uname用于输出系统信息. uname参数 -a :所有系统相关的资讯,包括底下的数据都会被列出来:-s :系统核心名称-r :核心的版本-m :本系统的硬件名称,例如 i686 或 x86_ ...

  2. python3使用WSGI启动服务

    WSGI是Web Server Gateway Interface的简称.它不是服务器,python模块,框架,API和任何种类的软件.它仅仅是一个服务器和应用间的接口规范. from wsgiref ...

  3. [POJ2083] Fracal

    Description A fractal is an object or quantity that displays self-similarity, in a somewhat technica ...

  4. 在linux下crontab不执行原因排查

    一.开启cron日志 #检查是否已经开启 cron sudo service cron status #cron start/running, process 23719 # 重启服务 cron su ...

  5. C#锐利体验2读书笔记

    匿名方法,迭代,匿名方法允许我们以一种“内联”的方法来编写方法代码;匿名方法是直接与委托实例化相关联的,使委托实例化更加直观方便.匿名方法的几个相关问题--参数列表,--返回值,--外部变量. add ...

  6. Linux cp/rm/mv 强制覆盖

    一.Linux下的cp/rm/mv强制覆盖 (一).反斜杠(\)临时取消别名 [root@fz ~]# \cp filename new/filename [root@fz ~]# (二).unali ...

  7. 基金名称中的ABC是什么意思,我们该如何选择?

    作者:牛大 | 公众号:定投五分钟 大家好,我是牛大.每天五分钟,投资你自己:坚持基金定投,终会财富自由! 大家经常会看到基金名称后面有字母ABC,这个表示什么意思呢,以及我们该如何选择呢?今天牛大给 ...

  8. 洛谷 P1379 八数码难题 题解

    我个人感觉就是一道bfs的变形,还是对bfs掌握不好的人有一定难度. 本题思路: 大体上用bfs搜,用map来去重,在这里只需要一个队列,因为需要较少步数达到的状态一定在步数较多的状态之前入队列. # ...

  9. BZOJ 4764: 弹飞大爷 LCT

    思路并不难,主要是细节需要注意一下. 在 lct 中,删边要写成:f[lson]=0,lson=0 (因为删 x->y 时 y 不一定是左儿子,y 只是 x 的前驱) 然后 f[lson]=ls ...

  10. nexus 3.17.0 做为golang 的包管理工具

    nexus 3.17.0 新版本对于go 包管理的支持是基于go mod 的,同时我们也需要一个athens server 然后在nexus 中配置proxy 类型的repo 参考配置 来自官方的配置 ...