mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-23 14:26:30 +00:00
IfcCartesianTransformationOperator3DnonUniform (untested)
This commit is contained in:
@@ -185,6 +185,7 @@ bool IfcGeom::CgalKernel::convert(const IfcSchema::IfcCartesianTransformationOpe
|
|||||||
axis1.cartesian(1), scale*axis2.cartesian(1), axis3.cartesian(1), origin.cartesian(1),
|
axis1.cartesian(1), scale*axis2.cartesian(1), axis3.cartesian(1), origin.cartesian(1),
|
||||||
axis1.cartesian(2), axis2.cartesian(2), scale*axis3.cartesian(2), origin.cartesian(2));
|
axis1.cartesian(2), axis2.cartesian(2), scale*axis3.cartesian(2), origin.cartesian(2));
|
||||||
|
|
||||||
|
// std::cout << std::endl;
|
||||||
// for (int i = 0; i < 3; ++i) {
|
// for (int i = 0; i < 3; ++i) {
|
||||||
// for (int j = 0; j < 4; ++j) {
|
// for (int j = 0; j < 4; ++j) {
|
||||||
// std::cout << trsf.cartesian(i, j) << " ";
|
// std::cout << trsf.cartesian(i, j) << " ";
|
||||||
@@ -195,6 +196,35 @@ bool IfcGeom::CgalKernel::convert(const IfcSchema::IfcCartesianTransformationOpe
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool IfcGeom::CgalKernel::convert(const IfcSchema::IfcCartesianTransformationOperator3DnonUniform* l, cgal_placement_t& gtrsf) {
|
||||||
|
// IN_CACHE(IfcCartesianTransformationOperator3DnonUniform,l,gp_GTrsf,gtrsf)
|
||||||
|
cgal_point_t origin;
|
||||||
|
IfcGeom::CgalKernel::convert(l->LocalOrigin(),origin);
|
||||||
|
cgal_direction_t axis1 (1.,0.,0.);
|
||||||
|
cgal_direction_t axis2 (0.,1.,0.);
|
||||||
|
cgal_direction_t axis3 (0.,0.,1.);
|
||||||
|
if ( l->hasAxis1() ) IfcGeom::CgalKernel::convert(l->Axis1(),axis1);
|
||||||
|
if ( l->hasAxis2() ) IfcGeom::CgalKernel::convert(l->Axis2(),axis2);
|
||||||
|
if ( l->hasAxis3() ) IfcGeom::CgalKernel::convert(l->Axis3(),axis3);
|
||||||
|
const double scale1 = l->hasScale() ? l->Scale() : 1.0f;
|
||||||
|
const double scale2 = l->hasScale2() ? l->Scale2() : scale1;
|
||||||
|
const double scale3 = l->hasScale3() ? l->Scale3() : scale1;
|
||||||
|
|
||||||
|
// TODO: Untested
|
||||||
|
gtrsf = Kernel::Aff_transformation_3(scale1*axis1.cartesian(0), axis2.cartesian(0), axis3.cartesian(0), origin.cartesian(0),
|
||||||
|
axis1.cartesian(1), scale2*axis2.cartesian(1), axis3.cartesian(1), origin.cartesian(1),
|
||||||
|
axis1.cartesian(2), axis2.cartesian(2), scale3*axis3.cartesian(2), origin.cartesian(2));
|
||||||
|
|
||||||
|
// for (int i = 0; i < 3; ++i) {
|
||||||
|
// for (int j = 0; j < 4; ++j) {
|
||||||
|
// std::cout << trsf.cartesian(i, j) << " ";
|
||||||
|
// } std::cout << std::endl;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// CACHE(IfcCartesianTransformationOperator3DnonUniform,l,gtrsf)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void IfcGeom::CgalKernel::remove_duplicate_points_from_loop(cgal_wire_t& polygon, bool closed, double tol) {
|
void IfcGeom::CgalKernel::remove_duplicate_points_from_loop(cgal_wire_t& polygon, bool closed, double tol) {
|
||||||
if (tol <= 0.) tol = getValue(GV_PRECISION);
|
if (tol <= 0.) tol = getValue(GV_PRECISION);
|
||||||
tol *= tol;
|
tol *= tol;
|
||||||
|
|||||||
@@ -72,3 +72,4 @@ CLASS(IfcAxis2Placement2D,cgal_placement_t);
|
|||||||
CLASS(IfcAxis2Placement3D,cgal_placement_t);
|
CLASS(IfcAxis2Placement3D,cgal_placement_t);
|
||||||
CLASS(IfcObjectPlacement,cgal_placement_t);
|
CLASS(IfcObjectPlacement,cgal_placement_t);
|
||||||
CLASS(IfcCartesianTransformationOperator3D,cgal_placement_t);
|
CLASS(IfcCartesianTransformationOperator3D,cgal_placement_t);
|
||||||
|
CLASS(IfcCartesianTransformationOperator3DnonUniform,cgal_placement_t);
|
||||||
|
|||||||
@@ -36,8 +36,9 @@ bool IfcGeom::CgalKernel::convert(const IfcSchema::IfcMappedItem* l, ConversionR
|
|||||||
cgal_placement_t gtrsf;
|
cgal_placement_t gtrsf;
|
||||||
IfcSchema::IfcCartesianTransformationOperator* transform = l->MappingTarget();
|
IfcSchema::IfcCartesianTransformationOperator* transform = l->MappingTarget();
|
||||||
if ( transform->is(IfcSchema::Type::IfcCartesianTransformationOperator3DnonUniform) ) {
|
if ( transform->is(IfcSchema::Type::IfcCartesianTransformationOperator3DnonUniform) ) {
|
||||||
|
IfcGeom::CgalKernel::convert((IfcSchema::IfcCartesianTransformationOperator3DnonUniform*)transform,gtrsf);
|
||||||
Logger::Message(Logger::LOG_ERROR, "Unsupported MappingTarget:", transform->entity);
|
Logger::Message(Logger::LOG_ERROR, "Unsupported MappingTarget:", transform->entity);
|
||||||
// IfcGeom::CgalKernel::convert((IfcSchema::IfcCartesianTransformationOperator3DnonUniform*)transform,gtrsf);
|
return false;
|
||||||
} else if ( transform->is(IfcSchema::Type::IfcCartesianTransformationOperator2DnonUniform) ) {
|
} else if ( transform->is(IfcSchema::Type::IfcCartesianTransformationOperator2DnonUniform) ) {
|
||||||
Logger::Message(Logger::LOG_ERROR, "Unsupported MappingTarget:", transform->entity);
|
Logger::Message(Logger::LOG_ERROR, "Unsupported MappingTarget:", transform->entity);
|
||||||
return false;
|
return false;
|
||||||
@@ -45,6 +46,8 @@ bool IfcGeom::CgalKernel::convert(const IfcSchema::IfcMappedItem* l, ConversionR
|
|||||||
cgal_placement_t trsf;
|
cgal_placement_t trsf;
|
||||||
IfcGeom::CgalKernel::convert((IfcSchema::IfcCartesianTransformationOperator3D*)transform,trsf);
|
IfcGeom::CgalKernel::convert((IfcSchema::IfcCartesianTransformationOperator3D*)transform,trsf);
|
||||||
gtrsf = trsf;
|
gtrsf = trsf;
|
||||||
|
// Logger::Message(Logger::LOG_ERROR, "Unsupported MappingTarget:", transform->entity);
|
||||||
|
// return false;
|
||||||
} else if ( transform->is(IfcSchema::Type::IfcCartesianTransformationOperator2D) ) {
|
} else if ( transform->is(IfcSchema::Type::IfcCartesianTransformationOperator2D) ) {
|
||||||
cgal_placement_t trsf_2d;
|
cgal_placement_t trsf_2d;
|
||||||
Logger::Message(Logger::LOG_ERROR, "Unsupported MappingTarget:", transform->entity);
|
Logger::Message(Logger::LOG_ERROR, "Unsupported MappingTarget:", transform->entity);
|
||||||
@@ -61,9 +64,17 @@ bool IfcGeom::CgalKernel::convert(const IfcSchema::IfcMappedItem* l, ConversionR
|
|||||||
IfcGeom::CgalKernel::convert((IfcSchema::IfcAxis2Placement2D*)placement,trsf_2d);
|
IfcGeom::CgalKernel::convert((IfcSchema::IfcAxis2Placement2D*)placement,trsf_2d);
|
||||||
trsf = trsf_2d;
|
trsf = trsf_2d;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Check
|
// TODO: Check
|
||||||
gtrsf = trsf * gtrsf;
|
gtrsf = trsf * gtrsf;
|
||||||
|
|
||||||
|
// std::cout << std::endl;
|
||||||
|
// for (int i = 0; i < 3; ++i) {
|
||||||
|
// for (int j = 0; j < 4; ++j) {
|
||||||
|
// std::cout << gtrsf.cartesian(i, j) << " ";
|
||||||
|
// } std::cout << std::endl;
|
||||||
|
// }
|
||||||
|
|
||||||
const IfcGeom::SurfaceStyle* mapped_item_style = get_style(l);
|
const IfcGeom::SurfaceStyle* mapped_item_style = get_style(l);
|
||||||
|
|
||||||
const size_t previous_size = shapes.size();
|
const size_t previous_size = shapes.size();
|
||||||
|
|||||||
Reference in New Issue
Block a user