コード例 #1
0
void lucScalarFieldCrossSection_DrawCrossSection( void* drawingObject, lucDatabase* database, Bool backFacing)
{
   lucScalarFieldCrossSection* self = (lucScalarFieldCrossSection*)drawingObject;

   /* Sample the 2d cross-section */
   lucCrossSection_SampleField(self, backFacing);

   /* Calibrate Colour Map */
   if (self->colourMap)
      lucColourMap_CalibrateFromFieldVariable(self->colourMap, self->fieldVariable);

   if (self->context->rank == 0)
   {
      int d;
      int count = self->resolutionA * self->resolutionB;
      lucDatabase_AddGridVertices(database, count, self->resolutionB, &self->vertices[0][0][0]);
      lucDatabase_AddValues(database, count, lucGridType, lucColourValueData, self->colourMap, &self->values[0][0][0]);

      /* Flip normal if back facing */
      if (backFacing)
         for (d=0; d<3; d++)
            self->normal[d] = 0 - self->normal[d];

      /* Add a single normal value */
      lucDatabase_AddNormal(database, lucGridType, self->normal);
   }

   /* Free memory */
   lucCrossSection_FreeSampleData(self);

   /* Start new geometry section - when used with multiple sections */
   lucDatabase_OutputGeometry(database, self->id);
}
コード例 #2
0
void lucMeshSampler_DrawSlice(lucMeshSampler* self, lucDatabase* database)
{
   /* Corners */
   float corners[6] = {self->min[0], self->min[1], self->min[2],
                       self->max[0], self->max[1], self->max[2]};

   /* Sample the 2d cross-section */
   lucMeshCrossSection_Sample(self, False);

   if (self->rank == 0 && database)
   {
      /* Write slice values on root processor */
      lucDatabase_AddVolumeSlice(database, self->elementRes[I_AXIS]+1, self->elementRes[J_AXIS]+1, corners, self->colourMap, &self->values[0][0][0]);
   }

   lucCrossSection_FreeSampleData(self);

   /* Start new geometry section - when used with multiple sections */
   lucDatabase_OutputGeometry(database, self->id);
}
コード例 #3
0
void _lucIsosurface_Draw( void* drawingObject, lucDatabase* database, void* _context )
{
   lucIsosurface*           self          = (lucIsosurface*)drawingObject;

   /* Calibrate Colour Map */
   if (self->colourMap)
   {
      if (self->colourField )
         lucColourMap_CalibrateFromFieldVariable( self->colourMap, self->colourField );
      else
         /* Colour based on isovalue */
         lucColourMap_CalibrateFromFieldVariable( self->colourMap, self->isosurfaceField );
   }

   /* Export triangles, separating walls and surface into two geometry objects */
   /* Export surface triangles */
   _lucIsosurface_Write(self, database, False);

   /* Start new geometry section */
   lucDatabase_OutputGeometry(database, self->id);

   /* Export wall triangles */
   _lucIsosurface_Write(self, database, True);
}