IfcAxis2Placement3D定义了三维空间中物体的位置和方向,由三部分组成:

The attribute Axis defines the Z direction, RefDirection the X direction. The Y direction is derived.

注:Y轴方向由X轴和Z轴方向通过外积计算获得。

当Axis和RefDirection未定义时,X轴为P[1] ,默认值 [1.,0.,0.]。Y轴为P[2],默认值为[0.,1.,0.]。Z轴为P[3] ,默认值为[0.,0.,1.]。

属性定义

# Attribute Type Cardinality Description C
2 Axis IfcDirection [0:1] The exact direction of the local Z Axis. X
3 RefDirection IfcDirection [0:1] The direction used to determine the direction of the local X Axis. If necessary an adjustment is made to maintain orthogonality to the Axis direction. If Axis and/or RefDirection is omitted, these directions are taken from the geometric coordinate system. X
  P
:=IfcBuildAxes(Axis, RefDirection)
IfcDirection L[3:3] The normalized directions of the placement X Axis (P[1]) and the placement Y Axis (P[2]) and the placement Z Axis (P[3]). X
Rule Description
LocationIs3D The dimensionality of the placement location shall be 3.
AxisIs3D The Axis when given should only reference a three-dimensional IfcDirection.
RefDirIs3D The RefDirection when given should only reference a three-dimensional IfcDirection.
AxisToRefDirPosition The Axis and RefDirection shall not be parallel or anti-parallel.
AxisAndRefDirProvision Either both, Axis and RefDirection are not given and therefore defaulted, or both shall be given.
继承关系:

属性

# Attribute Type Cardinality Description C
IfcRepresentationItem
  LayerAssignment IfcPresentationLayerAssignment
@AssignedItems
S[0:1] Assignment of the representation item to a single or multiple layer(s). The LayerAssignments can override a LayerAssignments of the IfcRepresentation it is used within the list of Items. X
  StyledByItem IfcStyledItem
@Item
S[0:1] Reference to the IfcStyledItem that provides presentation information to the representation, e.g. a curve style, including colour and thickness to a geometric curve. X
IfcGeometricRepresentationItem
IfcPlacement
1 Location IfcCartesianPoint [1:1] The geometric position of a reference point, such as the center of a circle, of the item to be located. X
  Dim
:=Location.Dim
IfcDimensionCount [1:1] The space dimensionality of this class, derived from the dimensionality of the location. X
IfcAxis2Placement3D
2 Axis IfcDirection [0:1] The exact direction of the local Z Axis. X
3 RefDirection IfcDirection [0:1] The direction used to determine the direction of the local X Axis. If necessary an adjustment is made to maintain orthogonality to the Axis direction. If Axis and/or RefDirection is omitted, these directions are taken from the geometric coordinate system. X
  P
:=IfcBuildAxes(Axis, RefDirection)
IfcDirection L[3:3] The normalized directions of the placement X Axis (P[1]) and the placement Y Axis (P[2]) and the placement Z Axis (P[3]). X
 
ENTITY IfcAxis2Placement3D
SUBTYPE OF (IfcPlacement);
Axis : OPTIONAL IfcDirection;
RefDirection : OPTIONAL IfcDirection;
DERIVE
P : LIST [:] OF IfcDirection := IfcBuildAxes(Axis, RefDirection);
WHERE
LocationIs3D : SELF\IfcPlacement.Location.Dim = ;
AxisIs3D : (NOT (EXISTS (Axis))) OR (Axis.Dim = );
RefDirIs3D : (NOT (EXISTS (RefDirection))) OR (RefDirection.Dim = );
AxisToRefDirPosition : (NOT (EXISTS (Axis))) OR (NOT (EXISTS (RefDirection))) OR (IfcCrossProduct(Axis,RefDirection).Magnitude > 0.0);
AxisAndRefDirProvision : NOT ((EXISTS (Axis)) XOR (EXISTS (RefDirection)));
END_ENTITY;
DATA;
#= IFCORGANIZATION($,'Autodesk Revit 2015 (CHS)',$,$,$);
#= IFCAPPLICATION(#,'','Autodesk Revit 2015 (CHS)','Revit');
#= IFCCARTESIANPOINT((.,.,.));
#= IFCCARTESIANPOINT((.,.));
#= IFCDIRECTION((.,.,.));
#= IFCDIRECTION((-.,.,.));
#= IFCDIRECTION((.,.,.));
#= IFCDIRECTION((.,-.,.));
#= IFCDIRECTION((.,.,.));
#= IFCDIRECTION((.,.,-.));
#= IFCDIRECTION((.,.));
#= IFCDIRECTION((-.,.));
#= IFCDIRECTION((.,.));
#= IFCDIRECTION((.,-.)); #= IFCAXIS2PLACEMENT3D(#,$,$);
#= IFCAXIS2PLACEMENT3D(#,$,$);
#= IFCLOCALPLACEMENT($,#);
#= IFCLOCALPLACEMENT(#,#); #= IFCAXIS2PLACEMENT3D(#,$,$);
#= IFCLOCALPLACEMENT(#,#); #= IFCCARTESIANTRANSFORMATIONOPERATOR3D($,$,#,.,$);
#= IFCSHAPEREPRESENTATION(#,'Body','SweptSolid',(#));
#= IFCAXIS2PLACEMENT3D(#,$,$);
#= IFCREPRESENTATIONMAP(#,#); #= IFCMAPPEDITEM(#,#);
#= IFCSHAPEREPRESENTATION(#,'Body','MappedRepresentation',(#));
#= IFCPRODUCTDEFINITIONSHAPE($,$,(#)); #= IFCCARTESIANPOINT((1325.86888709244,31631.0676658748,.));
#= IFCAXIS2PLACEMENT3D(#,$,$);
#= IFCLOCALPLACEMENT(#,#);
#= IFCCOLUMN('2ILfSTle57UhpKxVJ8Mj7L',#,'\X2\7EFC5408697C\X0\-\X2\6DF751DD571F77E95F6267F1\X0\:450 x 600 mm:365232',$,'450 x 600 mm',#,#,'');

计算构件y轴方向

# = IfcDirection((0.,.,.));   //z轴
# = IfcDirection((.,.,.)); //x轴
# = IfcAxis2Placement3D($,#,#); //叉积计算出y轴 (0 ,1, 0)
# = IfcLocalPlacement($,#);
# = IfcDirection((.,.,.)); //z轴
# = IfcDirection((.,.,.)); //x轴
# = IfcAxis2Placement3D($,#,#); //叉积计算出y轴(1, 0, -1)
# = IfcLocalPlacement(#,#); //矩阵相乘(注意顺序)结果:x轴(0,0,1)y轴(1,0,0)z轴(0,1,0)

向量叉积计算

#include <iostream>

using namespace std;

struct Vec {
double x;
double y;
double z;
}; Vec ThreeCross(const Vec& a, const Vec& b)
{
Vec C;
C.x = a.y * b.z - a.z * b.y;
C.y = a.z * b.x - a.x * b.z;
C.z = a.x * b.y - a.y * b.x;
return C;
} int main()
{
Vec v1;
v1.x = ;
v1.y = ;
v1.z = ; Vec v2;
v2.x = ;
v2.y = ;
v2.z = ; Vec v3 = ThreeCross(v1,v2); cout << v3.x << " " << v3.y << " " << v3.z << endl; system("pause");
return ;
}

向量叉积计算公式:

a=(X1,Y1,Z1),b=(X2,Y2,Z2),
a×b=(Y1Z2 - Y2Z1,Z1X2 - Z2X1,X1Y2 - X2Y1)
V1(1,2,3)

V2(4,5,6)

V1 * V2=(12-15,12-6,5-8)=(-3,6,-3)

参考:https://blog.csdn.net/liyazhen2011/article/details/82347074

IfcAxis2Placement3D IFC构件的位置和方向的更多相关文章

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

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

  2. IFC构件位置数据与revit模型中对应构件位置数据对比

    IFC构件位置数据与revit模型中对应构件位置数据对比

  3. iOS使用位置和方向服务(来自苹果apple官方)

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   本文章来自苹果官方文档,特此声明--------禚 Core Location框架为定位用户当前位置和方向(Headin ...

  4. Unity 中动态修改碰撞框(位置,大小,方向)

    在Unity中,玩家处于不同的状态,要求的碰撞框的 位置/大小/方向 会有所改变,怎么动态的修改碰撞框呢? 下面是Capsure Collider(胶囊体)的修改: CapsuleCollider.d ...

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

    不规则形状的Ifc构件顶点坐标获取 今天有人问我,ifc构件的顶点坐标怎么获取,自己前年的时候写过类似的程序,但有点记不清了,最近一直用C++解析ifc,慎重起见,还是重新再写一次,java版本的获取 ...

  6. IFC构件位置信息—ObjectPlacement

    在IFC标准中,采用相对坐标系对构件定位.如柱(IfcColumn)的定位信息(局部坐标系及参考坐标系)由ObjectPlacement描述.ObjectPlacement由两部分组成: (1)Pla ...

  7. ios的位置和方向(来自苹果官方文档,仅供简单参考)

    取得用户的当前位置 Core Location框架使您可以定位设备的当前位置,并将这个信息应用到程序中.该框架利用设备内置的硬件,在已有信号的基础上通过三角测量得到固定位置,然后将它报告给您的代码.在 ...

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

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

  9. ifc构件加载到树形控件中

    void IfcTreeWidget::setParentCheckState(QTreeWidgetItem *item) { if(!item) return; ; int childCount ...

随机推荐

  1. 电池管理系统(BMS)

    概述 电池管理系统(BMS)为一套保护动力电池使用安全的控制系统,时刻监控电池的使用状态,通过必要措施缓解电池组的不一致性,为新能源车辆的使用安全提供保障. 经纬恒润在控制系统开发方面拥有雄厚的实力和 ...

  2. JavaScript(ES6之前)数组方法总结

    一.数组的创建 1.使用 Array 构造函数 var arr1 = new Array(); // 创建一个空数组 var arr2 = new Array(20); // 创建一个包含20项的数组 ...

  3. ES6中let、const和var的区别

    一.let 1.基本用法 ES6 新增了let命令,用来声明变量. let 的用法类似于 var,但所声明的变量只在 let 命令所在的代码块内有效(一个“{}”相当于一个代码块) { let a = ...

  4. Goodbye Microservices: From 100s of problem children to 1 superstar

    https://segment.com/blog/goodbye-microservices/ Unless you’ve been living under a rock, you probably ...

  5. 使用jQuery快速高效制作网页交互特效第一章JavaScript基础

    JavaScript 一.JavaScript概念: JavaScript面向对象事件驱动具有安全性的脚本语言,面向对象 JavaScript特点: 1.解释性语言,边运行边解释 2.和HTML页面实 ...

  6. jq 字符串转数组

    一般我们在添加关键词时  会添加几组关键词     上传时怎么取值呢 取值时用以下格式 就能取到值 var FTag = "" //AAA,BBB if (FTag1 != &qu ...

  7. CH5101 LCIS(最长公共上升子序列) 题解

    每日一题 day16 打卡 Analysis 设F[i,j]表示A[1..i]与B[1..j]并且以B[j]结尾的两段最长公共上升子序列,那么我们可以发现这样的转移 (1)A[i]==B[j]时 F[ ...

  8. 081_使用 awk 编写的 wc 程序

    #!/bin/bash#自定义变量 chars 变量存储字符个数,自定义变量 words 变量存储单词个数#awk 内置变量 NR 存储行数#length()为 awk 内置函数,用来统计每行的字符数 ...

  9. Mina整体体系结构分析

    mina在应用程序中处于什么样的地位? mina屏蔽了一些网络通信细节对socket进行封装,并且基于NIO非阻塞框架,可以帮助我们快速开发网络通信,常常用于用户游戏开发,中间件等服务端应用程序.

  10. luogu P1382 楼房

    二次联通门 : luogu P1382 楼房 /* luogu P1382 楼房 线段树 + 扫描线 + 离散化 正解貌似是堆... MMP...二段式线段树各种错误... 离散化一下横坐标 扫描线扫 ...