[cgma-dev] r3903 - cgm/trunk/itaps

sjackson at cae.wisc.edu sjackson at cae.wisc.edu
Fri May 14 14:34:53 CDT 2010


Author: sjackson
Date: 2010-05-14 14:34:52 -0500 (Fri, 14 May 2010)
New Revision: 3903

Modified:
   cgm/trunk/itaps/iGeom_CGMA.cc
Log:
Workaround to allow iGeom to export .step and .iges files

Background: 

The import and export functions of the AcisQueryEngine accept optional
log file names, and will, for some file formats,  always write a default 
log file if no name is provided.  AcisQueryEngine misuses strcpy as follows:

char* log_filename = NULL;
if( {no user-provided log name} )
    strcpy( log_filename, "default_logfile" ); // writes to null pointer

This means that importing or exporting .step or .iges files from iGeom 
results in a segfault.  This checkin works around this problem for exporting
files only.  (Fixing .step/.iges import would require changing iGeom to use 
GeometryQueryTool::import_solid_model() instead of the simpler 
GeometryQueryTool::read_geometry_file() currently used.)

Fixing the bugs in AcisQueryEngine would be more appropriate than this
workaround, however:
* This is the only way to fix CGM when built against Cubit 10, and 
* AcisQueryEngine may see an overhaul when CGM is upgraded for Cubit 12.



Modified: cgm/trunk/itaps/iGeom_CGMA.cc
===================================================================
--- cgm/trunk/itaps/iGeom_CGMA.cc	2010-05-14 16:41:09 UTC (rev 3902)
+++ cgm/trunk/itaps/iGeom_CGMA.cc	2010-05-14 19:34:52 UTC (rev 3903)
@@ -501,12 +501,24 @@
       ERROR(iBase_FAILURE, "Unknown geometry file extension and no file type.");
   }
   
+  /** 
+   * Work around AcisQueryEngine log file handling bug:
+   * If the export format is iges or step, be sure the log file name is not null
+   */
+  const char* logfile_name = NULL;
+  if( file_type == "IGES" ){
+    logfile_name = "igeom_iges_export.log";
+  }
+  else if( file_type == "STEP" ){
+    logfile_name = "igeom_step_export.log";
+  }
+
     // process options (none right now...)
   DLIList<RefEntity*> bodies;
   int num_ents_exported;
   CubitString cubit_version(" (iGeom)");
   CubitStatus status = gqt->export_solid_model(bodies, name, file_type.c_str(),
-                                               num_ents_exported, cubit_version);
+                                               num_ents_exported, cubit_version, logfile_name );
   if (CUBIT_SUCCESS != status) 
     ERROR(iBase_FAILURE, "Trouble saving geometry file.");
 























More information about the cgma-dev mailing list