ShapeItemInsertUsingNormals Method

Inserts a shape to the shape catalog using the shape geometry. Uses vertex normals to determine edge visibility. If the normal vectors of the vertices belonging to one geometrical location are close enough, the edge will be considered smooth and will be marked as hidden.

Namespace:  Tekla.Structures.Catalogs
Assembly:  Tekla.Structures.Catalogs (in Tekla.Structures.Catalogs.dll) Version: 2023.0.3
Syntax
public bool InsertUsingNormals()

Return Value

Type: Boolean
Returns true on success.
Examples
using System;
using Tekla.Structures.Catalogs;

public class Example()
{
  /* One edge inside the hole and one on the outer surface of the box will be hidden. */

     var vertices = new[]
     {
         /* The main cube vertices. Notice that all vertices are triplicated, because each is
            present on three different faces. Thus we get three different vertex normals for each physical
            corner too. */

         new Vector(   0.0,    0.0,    0.0 ), // 0
         new Vector( 500.0,    0.0,    0.0 ), // 1
         new Vector( 500.0,  500.0,    0.0 ), // 2
         new Vector(   0.0,  500.0,    0.0 ), // 3
         new Vector(   0.0,    0.0,  500.0 ), // 4
         new Vector( 500.0,    0.0,  500.0 ), // 5
         new Vector( 500.0,  500.0,  500.0 ), // 6
         new Vector(   0.0,  500.0,  500.0 ), // 7

         new Vector(   0.0,    0.0,    0.0 ), // 8
         new Vector( 500.0,    0.0,    0.0 ), // 9
         new Vector( 500.0,  500.0,    0.0 ), // 10
         new Vector(   0.0,  500.0,    0.0 ), // 11
         new Vector(   0.0,    0.0,  500.0 ), // 12
         new Vector( 500.0,    0.0,  500.0 ), // 13
         new Vector( 500.0,  500.0,  500.0 ), // 14
         new Vector(   0.0,  500.0,  500.0 ), // 15

         new Vector(   0.0,    0.0,    0.0 ), // 16
         new Vector( 500.0,    0.0,    0.0 ), // 17
         new Vector( 500.0,  500.0,    0.0 ), // 18
         new Vector(   0.0,  500.0,    0.0 ), // 19
         new Vector(   0.0,    0.0,  500.0 ), // 20
         new Vector( 500.0,    0.0,  500.0 ), // 21
         new Vector( 500.0,  500.0,  500.0 ), // 22
         new Vector(   0.0,  500.0,  500.0 ), // 23

         /* The hole corner vertices */

         new Vector( 100.0,  100.0,  0.0 ), // 24
         new Vector( 300.0,  100.0,  0.0 ), // 25
         new Vector( 300.0,  300.0,  0.0 ), // 26
         new Vector( 100.0,  300.0,  0.0 ), // 27

         new Vector( 100.0,  100.0, 500.0 ), // 28
         new Vector( 300.0,  100.0, 500.0 ), // 29
         new Vector( 300.0,  300.0, 500.0 ), // 30
         new Vector( 100.0,  300.0, 500.0 ), // 31

         new Vector( 100.0,  100.0,  0.0 ), // 32
         new Vector( 300.0,  100.0,  0.0 ), // 33
         new Vector( 300.0,  300.0,  0.0 ), // 34
         new Vector( 100.0,  300.0,  0.0 ), // 35

         new Vector( 100.0,  100.0, 500.0 ), // 36
         new Vector( 300.0,  100.0, 500.0 ), // 37
         new Vector( 300.0,  300.0, 500.0 ), // 38
         new Vector( 100.0,  300.0, 500.0 ), // 39
     };

     var outloop = new[]
     {
         new[] {  0,   3,   2,   1 },
         new[] {  8,   9,  13,  12 },
         new[] { 17,  18,  22,  21 },
         new[] { 10,  11,  15,  14 },
         new[] { 19,  16,  20,  23 },
         new[] {  4,   5,   6,   7 },

         new[] { 31, 28, 24, 27 },
         new[] { 30, 39, 35, 26 },
         new[] { 29, 38, 34, 25 },
         new[] { 36, 37, 33, 32 }
     };

     var innerLoop = new Dictionary{int, int[][]}
     {
         { 0, new[] { new[] {  24, 25, 26, 27 } } },
         { 5, new[] { new[] {  28, 31, 30, 29 } } },
     };

     var normals = new Vector[]
     {
         // Basic cube vertex normals

         new Vector( 0,  0, -1 ),
         new Vector( 0,  0, -1 ),
         new Vector( 0,  0, -1 ),
         new Vector( 0,  0, -1 ),

         new Vector( 0,  0,  1 ),
         new Vector( 0,  0,  1 ),
         new Vector( 0,  0,  1 ),
         new Vector( 0,  0,  1 ),

         new Vector( 0,  0, -1 ), // CHANGE THIS TO (0, -1, 0) FOR A VISIBLE EDGE
         new Vector( 0,  0, -1 ), // CHANGE THIS TO (0, -1, 0) FOR A VISIBLE EDGE
         new Vector( 0,  1,  0 ),
         new Vector( 0,  1,  0 ),

         new Vector( 0, -1,  0 ),
         new Vector( 0, -1,  0 ),
         new Vector( 0,  1,  0 ),
         new Vector( 0,  1,  0 ),

         new Vector(-1,  0,  0 ),
         new Vector( 1,  0,  0 ),
         new Vector( 1,  0,  0 ),
         new Vector(-1,  0,  0 ),

         new Vector(-1,  0,  0 ),
         new Vector( 1,  0,  0 ),
         new Vector( 1,  0,  0 ),
         new Vector(-1,  0,  0 ),

         // Hole vertex normals

         new Vector(-1,  0,  0 ), // 24
         new Vector( 1,  0,  0 ), // 25
         new Vector( 0,  1,  0 ), // 26
         new Vector(-1,  0,  0 ), // 27

         new Vector(-1,  0,  0 ), // 28
         new Vector( 1,  0,  0 ), // 29
         new Vector( 0,  1,  0 ), // 30
         new Vector(-1,  0,  0 ), // 31

         new Vector( 0, -1,  0 ), // 32
         new Vector( 0, -1,  0 ), // 33
         new Vector( 1,  0,  0 ), // 34
         new Vector(-1,  0,  0 ), // 35 CHANGE THIS TO (0, 1, 0) FOR A VISIBLE EDGE

         new Vector( 0, -1,  0 ), // 36
         new Vector( 0, -1,  0 ), // 37
         new Vector( 1,  0,  0 ), // 38
         new Vector(-1,  0,  0 ), // 39 CHANGE THIS TO (0, 1, 0) FOR A VISIBLE EDGE
     };

     var brep = new FacetedBrepWithNormals(vertices, outloop, innerLoop, normals);

     var shapeItem = new ShapeItem
     {
         Name = "CubeWithHoleTwoEdgesHidden",
         ShapeFacetedBrep = brep,
         UpAxis = ShapeUpAxis.Z_Axis
     };

     var retVal = shapeItem.InsertUsingNormals();

     var brep = new Brep()
     {
         StartPoint = new Point(0, 8000, 0),
         EndPoint = new Point(1000, 8000, 0),
         Profile = { ProfileString = "CubeWithHoleTwoEdgesHidden" },
     };

     brep.Insert();

     new Model().CommitChanges();
}
See Also
Was this helpful?
The feedback you give here is not visible to other users. We use your comments to improve the content.
Previous
Next