private bool FindMatchingDatums(CyPhy.CADDatum datum,
CyPhy.CADModel cadmodel,
Dictionary<string, DataRep.Datum> featuremap)
{
string cadmodel_id = cadmodel.ID;
string alignment = "ALIGN";
string orientation = "NONE";
if (datum.Kind == "Surface")
{
alignment = (datum as CyPhy.Surface).Attributes.Alignment.ToString();
if (alignment=="MATE")
Logger.Instance.AddLogMessage("MATE alignment is used on surface: " + datum.ToHyperLink() + ". This construct is obsolete, please set up the connection as ALIGN.", Severity.Warning);
}
CadDatumTraversal traversal = new CadDatumTraversal(datum,
cadmodel_id);
if (traversal.datumFound.Count > 0)
{
if (traversal.datumFound.Count > 1)
{
Logger.Instance.AddLogMessage("Connector datum connected to multiple datums in the same CADModel [" + datum.Path + "]", Severity.Error);
return true; // Error
}
// META-3232
/*
DataRep.Datum datumRep = new DataRep.Datum(traversal.datumFound.First().Attributes.DatumName,
datum.Kind,
this.ParentInstanceGUID, guide);
*/
bool guide = datum.Attributes.DefinitionNotes.Contains("GUIDE");
if (guide)
{
Logger.Instance.AddLogMessage("Datum is using old guide format. Please use the attribute 'IsGuide'. [" + datum.Path + "]", Severity.Error);
return true; // Error
}
guide |= datum.Attributes.IsGuide;
DataRep.Datum datumRep = new DataRep.Datum(traversal.datumFound.First(),
this.ParentInstanceGUID, guide);
if (datum.Kind == "Surface")
{
if (traversal.ReverseMap)
orientation = "SIDE_B";
else
orientation = "SIDE_A";
}
if (datum.Kind == "CoordinateSystem")
{
alignment = "CSYS";
}
datumRep.Alignment = alignment;
datumRep.Orientation = orientation;
if (!featuremap.ContainsKey(datum.Name))
{
featuremap[datum.Name] = datumRep;
}
}
return false;
}