Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

surface of the cylinder #55

Open
GoTryCatch opened this issue Nov 19, 2021 · 0 comments
Open

surface of the cylinder #55

GoTryCatch opened this issue Nov 19, 2021 · 0 comments

Comments

@GoTryCatch
Copy link

GoTryCatch commented Nov 19, 2021

Friends, I broke my brain. How do I draw the surface of the cylinder (like in picture 1)?
I only succeed (Figure 2). The code is simple, but I don’t understand what doesn’t work. Maybe there are working examples of how to do this for IFC4 C # ?

static void Main(string[] args)
        {
            var db = new DatabaseIfc(ModelView.Ifc4DesignTransfer);
            var site = new IfcSite(db, "Simple Site");
            var project = new IfcProject(site, "Simple Project", IfcUnitAssignment.Length.Metre) { };
            var building = new IfcBuilding(site, "Simple Building") { };
            var buildingStorey = new IfcBuildingStorey(building, "Simple Storey", 0);
            var material = new IfcMaterial(db, "Steel");
            var relAssMaterial = new IfcRelAssociatesMaterial(material);
            var geometricRepresentationContext = new IfcGeometricRepresentationContext(3, new IfcAxis2Placement3D(new IfcCartesianPoint(db, 0, 0, 0)));
            
            IfcCircleProfileDef circle = new IfcCircleProfileDef(db, "Cone", 40);                                             
            IfcExtrudedAreaSolid extrudedAreaSolid = new IfcExtrudedAreaSolid(circle, new IfcAxis2Placement3D(new IfcCartesianPoint(db, 0, 0, 0 )), new IfcDirection(db, 0, 0, 1), 20);
            IfcSurfaceOfLinearExtrusion surfaceLinearExtrusion = new IfcSurfaceOfLinearExtrusion(extrudedAreaSolid.SweptArea, new IfcAxis2Placement3D(new IfcCartesianPoint(db, 0, 0, 0)), 20);

            // boundaries
            IfcEllipse arc1 = new IfcEllipse(new IfcAxis2Placement3D(new IfcCartesianPoint(db, 0, 0, 0)), 40, 40);
            IfcTrimmedCurve trimmedArc1 = new IfcTrimmedCurve(arc1, new IfcTrimmingSelect(new IfcCartesianPoint(db, 40,0, 0)), new IfcTrimmingSelect(new IfcCartesianPoint(db, -40, 0, 0)), true, IfcTrimmingPreference.CARTESIAN);
            IfcLine line1 = new IfcLine(new IfcCartesianPoint(db, -40,0,0), new IfcVector(new IfcDirection(db, 0, 0, 1), 0));
            IfcTrimmedCurve trimmedLine1 = new IfcTrimmedCurve(line1, new IfcTrimmingSelect(0), new IfcTrimmingSelect(20), true, IfcTrimmingPreference.PARAMETER);
            IfcEllipse arc2 = new IfcEllipse(new IfcAxis2Placement3D(new IfcCartesianPoint(db, 0, 0, 20)), 40, 40);
            IfcTrimmedCurve trimmedArc2 = new IfcTrimmedCurve(arc2, new IfcTrimmingSelect(new IfcCartesianPoint(db, -40, 0, 20)), new IfcTrimmingSelect(new IfcCartesianPoint(db, 40, 0, 20)), false, IfcTrimmingPreference.CARTESIAN);
            IfcLine line2 = new IfcLine(new IfcCartesianPoint(db, 40, 0, 20), new IfcVector(new IfcDirection(db, 0, 0, -1), 0));
            IfcTrimmedCurve trimmedLine2 = new IfcTrimmedCurve(line2, new IfcTrimmingSelect(0), new IfcTrimmingSelect(20), true, IfcTrimmingPreference.PARAMETER);
            var segments = new List<IfcCompositeCurveSegment>();
            segments.Add(new IfcCompositeCurveSegment(IfcTransitionCode.CONTINUOUS, true, trimmedArc1));
            segments.Add(new IfcCompositeCurveSegment(IfcTransitionCode.CONTINUOUS, true, trimmedLine1));
            segments.Add(new IfcCompositeCurveSegment(IfcTransitionCode.CONTINUOUS, true, trimmedArc2));
            segments.Add(new IfcCompositeCurveSegment(IfcTransitionCode.CONTINUOUS, true, trimmedLine2));
            IfcCompositeCurve finalCurve = new IfcCompositeCurve(segments);

            List<IfcFaceBound> bounds = new List<IfcFaceBound>();
            IfcEdgeCurve edgeCurve  = new IfcEdgeCurve(new IfcVertexPoint(new IfcCartesianPoint(db, 0, 0, 0)), 
                                                     new IfcVertexPoint(new IfcCartesianPoint(db, 0, 0, 0)),
                                                     finalCurve,       
                                                     true);

            bounds.Add(new IfcFaceBound(new IfcEdgeLoop(new IfcOrientedEdge(edgeCurve, true)), true));

            IfcFaceSurface faceSurface = new IfcFaceSurface(bounds, surfaceLinearExtrusion, true);
            var brep = new IfcFacetedBrep(new IfcClosedShell(new List<IfcFace> { faceSurface }));
            IfcProductDefinitionShape rep = new IfcProductDefinitionShape(new List<IfcShapeRepresentation>() { new IfcShapeRepresentation(brep),new IfcShapeRepresentation(finalCurve) });
            IfcBuildingElementProxy buildingElementProxy = new IfcBuildingElementProxy(buildingStorey, new IfcLocalPlacement(new IfcAxis2Placement3D(new IfcCartesianPoint(db, 0, 0, 0))), rep);

            db.WriteFile("C:\\testoBrep.ifc");static void Main(string[] args);
}

1
2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant