Search Results for

    Show / Hide Table of Contents

    Curve Manipulations

    This example provides information on joining curves, projecting a line on a surface, splitting wires, and intersect and trimming curves.

    Run the Add-In and go to the Modeling browser tab. The easiest way to see the different bodies is to make them visible one at a time.

    Solution

    1. Create a Part object to contain the bodies and add it to the station

      Part p = new Part();
      p.Name = "My_Curve_Manipulations";
      station.GraphicComponents.Add(p);
      
    2. Join the curves

      • Create two lines (wires)

        Body wire1 = Body.CreateLine(new Vector3(0.0, 0.0, 0.0), new Vector3(0.5, 0.5, 0.5));
        wire1.Name = "Wire1";
        p.Bodies.Add(wire1);
        Body wire2 = Body.CreateLine(new Vector3(0.0, 0.0, 0.0), new Vector3(-0.5, 0.5, 0.5));
        wire2.Name = "Wire2";
        p.Bodies.Add(wire2);
        
      • Create a Wire array with the wires that should be joined

        Wire[] wires = new Wire[2] { wire1.Shells[0].Wires[0], wire2.Shells[0].Wires[0] };
        Body[] wireUnion = Body.JoinCurves(wires);
        foreach (Body b in wireUnion)
        {
            b.Name = "Wire Array";
            p.Bodies.Add(b);
        }
        
    3. Project wire on the surface of the cylinder along the X-axis

      • Use CreateSolidCylinder(Matrix4, double, double)

        Matrix4 origin = new Matrix4(new Vector3(Axis.X), 0.0);
        Body cylinder = Body.CreateSolidCylinder(origin, 0.2, 1);
        cylinder.Name = "Cylinder";
        p.Bodies.Add(cylinder);
        
      • Create a wire array containing the first wire, and a body array containing the cylinder.

        Wire[] wires2 = new Wire[1] { wire1.Shells[0].Wires[0] };
        Body[] bodies = new Body[1] { cylinder };
        
      • Project curve along X-axis

        Body[] projection = Body.ProjectCurve(wires2, bodies, Vector3.XVector);
        foreach (Body b in projection)
        {
            b.Name = "Wire1 projected on the cylinders surface along x-axis";
            p.Bodies.Add(b);
        }
        
    4. Create a semicircle shaped wire

      • Create a circle

        Body circle = Body.CreateCircle(new Matrix4(Vector3.XVector, 0.0), 0.5);
        circle.Name = "Circle";
        p.Bodies.Add(circle);
        
      • Create a line to intersect the circle with.

        Body line = Body.CreateLine(new Vector3(0.5, 0.0, 0.0), new Vector3(-0.5, 0.0, 0.0));
        line.Name = "Line";
        p.Bodies.Add(line);
        
      • Join the circle and the line

        Wire[] ws = new Wire[2] { circle.Shells[0].Wires[0], line.Shells[0].Wires[0] };
        Body[] union = Body.JoinCurves(ws);
        
      • Get the wire of the union

        Wire unionWire = union[0].Shells[0].Wires[0];
        
      • Get the section to trim

        Vector3 sectionSelectionPoint = new Vector3(0.0, -0.5, 0.0);
        Vector3 firstTrimPoint = new Vector3(-0.5, 0.0, 0.0);
        Vector3 secondTrimPoint = new Vector3(0.5, 0.0, 0.0);
        
      • Trim points to array

        Vector3[] testPoints = new Vector3[2] { firstTrimPoint, secondTrimPoint };
        CurveSection trimSection = unionWire.GetSection(sectionSelectionPoint, testPoints);
        Body[] trimmedCircle = Body.TrimCurve(unionWire, trimSection);
        foreach (Body b in trimmedCircle)
        {
            b.Name = "Semicircle from cirle and line";
            p.Bodies.Add(b);
        }
        

    Example

    This example provides information on joining curves, projecting a line on a surface, splitting wires, and intersect and trimming curves.

    Project.UndoContext.BeginUndoStep("BodyCurveManipulations");
    try
    {
        Station station = Station.ActiveStation;
    
        // Create a part to contain the bodies.
        Part p = new Part();
        p.Name = "My_Curve_Manipulations";
        station.GraphicComponents.Add(p);
    
        // Joined curves.
        // Create two lines (wires).
        Body wire1 = Body.CreateLine(new Vector3(0.0, 0.0, 0.0), new Vector3(0.5, 0.5, 0.5));
        wire1.Name = "Wire1";
        p.Bodies.Add(wire1);
        Body wire2 = Body.CreateLine(new Vector3(0.0, 0.0, 0.0), new Vector3(-0.5, 0.5, 0.5));
        wire2.Name = "Wire2";
        p.Bodies.Add(wire2);
    
        // Create a wire array with the wires that should be joined.
        Wire[] wires = new Wire[2] { wire1.Shells[0].Wires[0], wire2.Shells[0].Wires[0] };
        Body[] wireUnion = Body.JoinCurves(wires);
        foreach (Body b in wireUnion)
        {
            b.Name = "Wire Array";
            p.Bodies.Add(b);
        }
    
        // Create solid cylinder.
        Matrix4 origin = new Matrix4(new Vector3(Axis.X), 0.0);
        Body cylinder = Body.CreateSolidCylinder(origin, 0.2, 1);
        cylinder.Name = "Cylinder";
        p.Bodies.Add(cylinder);
    
        // Create a wire array containing the first wire, 
        // and a body array containing the cylinder.
        Wire[] wires2 = new Wire[1] { wire1.Shells[0].Wires[0] };
        Body[] bodies = new Body[1] { cylinder };
    
        // Project wire1 on the surface of the cylinder along the X-axis.
        Body[] projection = Body.ProjectCurve(wires2, bodies, Vector3.XVector);
        foreach (Body b in projection)
        {
            b.Name = "Wire1 projected on the cylinders surface along x-axis";
            p.Bodies.Add(b);
        }
    
        // Split wire1 in half.                            
        Body[] splitCurves = Body.SplitCurve(wire1.Shells[0].Wires[0], new Vector3(0.25, 0.25, 0.25));
        foreach (Body b in splitCurves)
        {
            b.Name = "Wire1 split in half";
            p.Bodies.Add(b);
        }
    
        // Create a semicircle shaped wire.
        // Create a circle.
        Body circle = Body.CreateCircle(new Matrix4(Vector3.XVector, 0.0), 0.5);
        circle.Name = "Circle";
        p.Bodies.Add(circle);
    
        // Create a line to intersect the circle with.
        Body line = Body.CreateLine(new Vector3(0.5, 0.0, 0.0), new Vector3(-0.5, 0.0, 0.0));
        line.Name = "Line";
        p.Bodies.Add(line);
    
        // Join the circle and the line.
        Wire[] ws = new Wire[2] { circle.Shells[0].Wires[0], line.Shells[0].Wires[0] };
        Body[] union = Body.JoinCurves(ws);
    
        // Get the wire of the union.
        Wire unionWire = union[0].Shells[0].Wires[0];
    
        // Define points to select the section of the wire for trimming.  
        Vector3 sectionSelectionPoint = new Vector3(0.0, -0.5, 0.0);
        Vector3 firstTrimPoint = new Vector3(-0.5, 0.0, 0.0);
        Vector3 secondTrimPoint = new Vector3(0.5, 0.0, 0.0);
    
        // Trim points to array.
        Vector3[] testPoints = new Vector3[2] { firstTrimPoint, secondTrimPoint };
        CurveSection trimSection = unionWire.GetSection(sectionSelectionPoint, testPoints);
        Body[] trimmedCircle = Body.TrimCurve(unionWire, trimSection);
        foreach (Body b in trimmedCircle)
        {
            b.Name = "Semicircle from cirle and line";
            p.Bodies.Add(b);
        }
    }
    catch
    {
        Project.UndoContext.CancelUndoStep(CancelUndoStepType.Rollback);
        throw;
    }
    finally
    {
        Project.UndoContext.EndUndoStep();
    }
    

    Required Namespaces

    ABB.Robotics.RobotStudio

    ABB.Robotics.RobotStudio.Stations

    ABB.Robotics.Math

    See Also

    • Creating Solids
    • Extrude
    In this article
    Back to top Copyright © 2026 ABB Robotics