CyPhy2CAD_CSharp.DataRep.StructuralInterfaceConstraint.MatchStructuralInterfaceDatums C# (CSharp) Méthode

MatchStructuralInterfaceDatums() public static méthode

public static MatchStructuralInterfaceDatums ( DataRep a, DataRep b, DataRep.Datum>.List constraintPairs, CyPhyCOMInterfaces Traceability ) : bool
a DataRep
b DataRep
constraintPairs DataRep.Datum>.List
Traceability CyPhyCOMInterfaces
Résultat bool
        public static bool MatchStructuralInterfaceDatums(DataRep.StructuralInterfaceConstraint a,
                                                          DataRep.StructuralInterfaceConstraint b,
                                                          List<Tuple<DataRep.Datum, DataRep.Datum>> constraintPairs,
                                                          CyPhyCOMInterfaces.IMgaTraceability Traceability)
        {
            string apath = a.CyPhyImpl.Path, bpath = b.CyPhyImpl.Path;

            // Means no error
            bool result = false;

            if (!DataRep.StructuralInterfaceConstraint.MatchSIType(a.InterfaceDefinition, b.InterfaceDefinition))         //if (!MatchSIType(a.InterfaceDefinition, b.InterfaceDefinition))
            {
                Logger.Instance.AddLogMessage("Mismatched Type attribute on connected StructuralInterfaces. Interface 1: ["
                    + a.CyPhyImpl.ToHyperLink(Traceability) + "] (" + a.InterfaceDefinition + "). Interface 2: [" + b.CyPhyImpl.ToHyperLink(Traceability) + "] (" + b.InterfaceDefinition + ")", Severity.Error);
                return true;
            }

            List<string> adatumnames = a.DatumList.Keys.ToList();
            List<string> bdatumnames = b.DatumList.Keys.ToList();

            if (adatumnames.Count() != bdatumnames.Count())
            {
                Logger.Instance.AddLogMessage("Connected StructuralInterfaces have different number of datum ports: ["
                    + a.CyPhyImpl.ToHyperLink(Traceability) + ", " + b.CyPhyImpl.ToHyperLink(Traceability) + "]", Severity.Error);
                return true;
            }

            if (adatumnames.Count() > 1 && bdatumnames.Count() > 1)
            {
                foreach (KeyValuePair<string, DataRep.Datum> adatum in a.DatumList)
                {
                    if (b.DatumList.ContainsKey(adatum.Key))
                    {
                        DataRep.DatumType a_type = adatum.Value.Type;
                        DataRep.DatumType b_type = b.DatumList[adatum.Key].Type;
                        if (a_type != b_type)
                        {
                            Logger.Instance.AddLogMessage("Matching datum ports are different type ["
                                + a.CyPhyImpl.ToHyperLink(Traceability) + "," + b.CyPhyImpl.ToHyperLink(Traceability) + "]", Severity.Error);
                            result = true;
                            continue;
                        }
                        else
                        {
                            if (a_type == DataRep.DatumType.Surface)
                            {
                                if (adatum.Value.Alignment != b.DatumList[adatum.Key].Alignment)
                                {
                                    Logger.Instance.AddLogMessage("Matching Surface datum ports have different Alignment attributes ["
                                        + a.CyPhyImpl.ToHyperLink(Traceability) + "," + b.CyPhyImpl.ToHyperLink(Traceability) + "]", Severity.Error);
                                    result = true;
                                    continue;
                                }
                            }

                            var atumple = new Tuple<DataRep.Datum, DataRep.Datum>(adatum.Value, b.DatumList[adatum.Key]);
                            constraintPairs.Add(atumple);
                        }

                        adatumnames.Remove(adatum.Key);
                        bdatumnames.Remove(adatum.Key);
                    }

                }

                if (adatumnames.Any() || bdatumnames.Any())
                {
                    Logger.Instance.AddLogMessage(String.Format("Connected connectors contain unmatched named feature ports. Port names must match inside connectors. Connectors are: {0} ({1}) and {2} ({3}).",
                        a.CyPhyImpl.ToHyperLink(Traceability), String.Join(",", adatumnames.ToArray()), b.CyPhyImpl.ToHyperLink(Traceability), String.Join(",", bdatumnames)), Severity.Error);
                    return true;
                }
            }
            else
            {
                var atuple = new Tuple<DataRep.Datum, DataRep.Datum>(a.DatumList.Values.First(), b.DatumList.Values.First());
                constraintPairs.Add(atuple);
            }
            return result;
        }