2

I'm new to Open Inventor 3D Graphics API and I just want to draw a line between given to 3-D coordinates. Let's say the first point is 0,0,0 and the second is 1,1,1. The documentation and examples of this API are really awful and can't get it out right. I'm using Visual Studio.

Nicol Bolas
  • 449,505
  • 63
  • 781
  • 982
mkocabas
  • 703
  • 6
  • 19

3 Answers3

4

If you just need to set the base color (what Open Inventor & OpenGL call diffuse color), which is usually the case for line geometry, then you can set it directly in the SoVertexProperty node.

For example, to make the line in the previous example 'red', add this line:

vprop->orderedRGBA = 0xff0000ff; // By default applies to all vertices

or, more conveniently:

vprop->orderedRGBA = SbColor(1,0,0).getPackedValue();

If you need more control over the appearance of the geometry, add an SoMaterial node to the scene graph before the geometry node.

mike
  • 186
  • 3
3

Assuming you're just asking about creating the line shape - just store the coordinates in an SoVertexProperty node, set that node in an SoLineSet node, then add the line set to your scene graph. Open Inventor will assume that you want to use all the coordinates given, so that's all you need to do. For just two coordinates it may be easiest to use the set1Value method, but you can also set the coordinates from an array. You didn't say which language you're using, so I'll show the code in C++ (C# and Java would be essentially the same except for language syntax differences):

SoVertexProperty* vprop = new SoVertexProperty();
  vprop->vertex.set1Value( 0, 0,0,0 );  // Set first vertex to be 0,0,0
  vprop->vertex.set1Value( 1, 1,1,1 );  // Set second vertex to be 1,1,1

SoLineSet* line = new SoLineSet();
  line->vertexProperty = vprop;

sceneGraph->addChild( line );
mike
  • 186
  • 3
3

Line thickness is specified by creating an SoDrawStyle property node and adding it to the scene graph before/above the geometry node. Like this:

SoDrawStyle* style = new SoDrawStyle();
style->lineWidth = 3;  // "pixels" but see OpenGL docs
parent->addChild( style );
mike
  • 186
  • 3