/// <summary> /// Compare intersection events. /// </summary> /// <param name="eventA">The first intersection event to compare.</param> /// <param name="eventB">The second intersection event to compare.</param> /// <param name="relativePointTolerance">The comparison tolerance. If RhinoMath.UnsetValue, then RhinoMath.SqrtEpsilon is used.</param> /// <param name="log">If not null and false is returned, then a description of the error is appended to log.</param> /// <returns></returns> public static bool CompareEquivalent(IntersectionEvent eventA, IntersectionEvent eventB, double relativePointTolerance, Rhino.FileIO.TextLog log) { // compare to match if (relativePointTolerance == RhinoMath.UnsetValue) { relativePointTolerance = RhinoMath.SqrtEpsilon; } bool rc = true; if (eventA.m_type != eventB.m_type) { if (log != null) { log.Print("Event types mismatch."); } rc = false; } else { for (int ei = 0; ei < 2; ei++) { if (ei == 1 && eventA.m_type != 4) // ON_X_EVENT::TYPE::csx_overlap { continue; } Point3d AActual = (ei == 0) ? eventA.m_A0 : eventA.m_A1; Point3d BActual = (ei == 0) ? eventA.m_B0 : eventA.m_B1; Point3d AExp = (ei == 0) ? eventB.m_A0 : eventB.m_A1; Point3d BExp = (ei == 0) ? eventB.m_B0 : eventB.m_B1; double sz = AExp.MaximumCoordinate; double dist = AActual.DistanceTo(AExp); if (dist > relativePointTolerance * (1 + sz)) { if (log != null) { log.Print("Event mismatch. Distance between expected and actual m_A{0} was {1}.\n", ei * 2, dist); } rc = false; } dist = BActual.DistanceTo(BExp); if (dist > relativePointTolerance * (1 + sz)) { if (log != null) { log.Print("Event mismatch. Distance between expected and actual m_B{0} was {1}.\n", ei * 2, dist); } rc = false; } } } return(rc); }
// Returns: True if .3dm file was successfully read into a File3dmModel class. static bool ReadFileHelper(string filename, bool verboseTextDump, bool chunkDump, Rhino.FileIO.TextLog dump) { if (chunkDump) { return(Dump3dmFileHelper(filename, dump)); } dump.Print("\nOpenNURBS Archive File: {0}\n", filename); // open file containing opennurbs archive Rhino.FileIO.File3dm model = Rhino.FileIO.File3dm.Read(filename); if (model == null) { dump.Print(" Unable to open file.\n"); return(false); } dump.PopIndent(); dump.PopIndent(); dump.PopIndent(); dump.PopIndent(); dump.PopIndent(); dump.PopIndent(); dump.PopIndent(); dump.PushIndent(); // print diagnostic dump.Print("Successfully read.\n"); // see if everything is in good shape if (model.IsValid(dump)) { dump.Print("Model is valid.\n"); } else { dump.Print("Model is not valid.\n"); } // create a text dump of the model if (verboseTextDump) { dump.PushIndent(); model.DumpToTextLog(dump); dump.PopIndent(); } // destroy this model model.Dispose(); dump.PopIndent(); return(true); }
/// <summary> /// </summary> /// <param name="filename">full name of file</param> /// <param name="dump"></param> /// <returns></returns> static bool Dump3dmFileHelper(string filename, Rhino.FileIO.TextLog dump) { dump.Print("====== FILENAME: {0}\n", filename); using (Rhino.FileIO.BinaryArchiveFile file = new Rhino.FileIO.BinaryArchiveFile(filename, Rhino.FileIO.BinaryArchiveMode.Read3dm)) { if (!file.Open()) { dump.Print("**ERROR** Unable to open file.\n"); return(false); } int version; string comment_block; if (!file.Reader.Read3dmStartSection(out version, out comment_block)) { dump.Print("**ERROR** Read3dmStartSection() failed\n"); return(false); } dump.Print("====== VERSION: {0}\n", version); dump.Print("====== COMMENT BLOCK:\n"); dump.Print(comment_block); dump.Print("====== CHUNKS:\n"); while (!file.Reader.AtEnd()) { uint typecode = file.Reader.Dump3dmChunk(dump); if (typecode == 0) { break; } if (typecode == Rhino.FileIO.File3dmTypeCodes.TCODE_ENDOFFILE) { break; } } dump.Print("====== FINISHED: {0}\n", filename); file.Close(); return(true); } }