private void getSavedGroups() { Docs docRaw = Docs.getDoc(Decl.TSMATCHINFO_RAW, create_if_notexist: false); elements.Clear(); int cnt = docRaw.Body.iEOL(); for (int i = docRaw.i0; i <= cnt; i++) { string guid = docRaw.Body.Strng(i, 1); string mat = docRaw.Body.Strng(i, 2); string mat_type = docRaw.Body.Strng(i, 3); string prf = docRaw.Body.Strng(i, 4); double lng = docRaw.Body.Double(i, 5); double weight = docRaw.Body.Double(i, 6); double vol = docRaw.Body.Double(i, 7); Elm elm = new Elm(guid, mat, mat_type, prf, lng, weight, vol); elements.Add(elm); } if (elements.Count != elementsCount) { Msg.F("TSmatchINFO.xlsx inconsystent", name, elementsCount, elements.Count); //11/4 GetSavedReport(doRead: true); } docReport = Docs.getDoc(Decl.TSMATCHINFO_REPORT); getGroups(); int gr_n = docReport.i0; foreach (var gr in elmGroups) { string grPrice = docReport.Body.Strng(gr_n, Decl.REPORT_SUPL_PRICE); gr.totalPrice = Lib.ToDouble(grPrice); gr.SupplierName = docReport.Body.Strng(gr_n, Decl.REPORT_SUPPLIER); gr.CompSetName = docReport.Body.Strng(gr_n, Decl.REPORT_COMPSET); gr_n++; } }
private double getPrice(Elm elm, DPar.DPar csDP, string priceStr) { double price = Lib.ToDouble(priceStr); foreach (var sec in csDP.dpar) { if (!sec.Key.ToString().Contains("UNIT_")) { continue; } switch (sec.Key) { case SType.UNIT_Weight: // kg -> tonn return(elm.weight / 1000 * price); case SType.UNIT_Vol: // mm3 -> m3 return(elm.volume / 1000 / 1000 / 1000 * price); case SType.UNIT_Length: return(elm.length * price); case SType.UNIT_Qty: return(price); } } return(0); }
public ElmAttSet(Ifc ifc_elm) { guid = ifc_elm.guid; mat = ifc_elm.material; mat_type = ifc_elm.type_material; prf = ifc_elm.profile; length = Lib.ToDouble(ifc_elm.length); weight = Lib.ToDouble(ifc_elm.weight); volume = Lib.ToDouble(ifc_elm.volume); price = Lib.ToDouble(ifc_elm.price); }
private static List <ElmAttributes.ElmAttSet> MergeIfcToElmAttSet(List <IfcManager.Core.IfcManager.IfcElement> elements) { foreach (var ifc_elm in elements) { string guid = ifc_elm.guid; if (!ElmAttSet.ElmAttSet.Elements.ContainsKey(guid)) { ElmAttSet.ElmAttSet new_elm = new ElmAttSet.ElmAttSet(ifc_elm); // new_elm = new ElmAttSet.ElmAttSet(ifcElemOrg); } else { ElmAttributes.ElmAttSet elm = null; ElmAttSet.ElmAttSet.Elements.TryGetValue(guid, out elm); if (!String.IsNullOrEmpty(ifc_elm.material)) { elm.mat = ifc_elm.material; } if (!String.IsNullOrEmpty(ifc_elm.type_material)) { elm.mat_type = ifc_elm.type_material; } if (!String.IsNullOrEmpty(ifc_elm.profile)) { elm.prf = ifc_elm.profile; } if (!String.IsNullOrEmpty(ifc_elm.length)) { elm.length = Lib.ToDouble(ifc_elm.length); } if (!String.IsNullOrEmpty(ifc_elm.weight)) { elm.weight = Lib.ToDouble(ifc_elm.weight); } if (!String.IsNullOrEmpty(ifc_elm.volume)) { elm.volume = Lib.ToDouble(ifc_elm.volume); } if (!String.IsNullOrEmpty(ifc_elm.price)) { elm.price = Lib.ToDouble(ifc_elm.price); } } } return(ElmAttSet.ElmAttSet.Elements.Values.ToList()); }
private List <KeyValuePair <IntPtr, string> > findProperty(String strPropertyName) { IntPtr iEntitiesCount; string propertyType = string.Empty; var propertyInstances = new List <KeyValuePair <IntPtr, string> >(); ifcProp2IfcPropType.TryGetValue(strPropertyName, out propertyType); if (!string.IsNullOrEmpty(propertyType)) { IntPtr properties = getAggregator(propertyType, out iEntitiesCount); foreach (IntPtr iPropertyInstance in findEntity(properties, iEntitiesCount)) { String strName = getAttrValueAsString(iPropertyInstance, "Name"); if (strPropertyName.Equals(strName)) { string propValueType = string.Empty; ifcProp2IfcPropValueType.TryGetValue(strPropertyName, out propValueType); if (!string.IsNullOrEmpty(propValueType)) { string propValue = getAttrValueAsString(iPropertyInstance, propValueType); if (strPropertyName.Equals("Profile")) { propertyInstances.Add(new KeyValuePair <IntPtr, string>(iPropertyInstance, propValue)); } else { double x = Lib.ToDouble(propValue); if (x != 0.0) { propertyInstances.Add(new KeyValuePair <IntPtr, string>(iPropertyInstance, propValue)); } } } } } } return(propertyInstances); }
/// <summary> /// getPrice(gr, csDP, priceStr) - return price made from priceStr in price-list as set in csDP price type /// </summary> /// <param name="group">element group to be priced</param> /// <param name="csDP">CompSet Dictionary of Parameters</param> /// <param name="priceStr">price string in price-list</param> /// <returns>double price value, converted from priceStr, group of elemetsa, and pricing type</returns> private double getPrice(Group.Group group, DPar.DPar csDP, string priceStr) { double price = Lib.ToDouble(priceStr); foreach (var sec in csDP.dpar) { if (!sec.Key.ToString().Contains("UNIT_")) continue; switch (sec.Key) { case SType.UNIT_Weight: // kg -> tonn if (group.totalWeight == 0) return group.totalVolume * 7850; return group.totalWeight / 1000 * price; case SType.UNIT_Vol: // NO mm3 -> m3 return group.totalVolume * price; // return group.totalVolume / 1000 / 1000 / 1000 * price; case SType.UNIT_Length: return group.totalLength * price; case SType.UNIT_Qty: return price; } } return 0; }
string PrfNormStr(string mark) { string type = string.Empty; pars = Lib.GetParsStr(Profile); switch (mark) { case "I": if (PrfSub("Б", "b%", "", out type)) goto OK_I; if (PrfSub("Б", "б%", "", out type)) goto OK_I; if (PrfSub("К", "k%A", "А", out type)) goto OK_I; if (PrfSub("К", "k%", "", out type)) goto OK_I; if (PrfSub("Ш", "h%", "", out type)) goto OK_I; if (PrfSub("Ш", "ш%", "", out type)) goto OK_I; if (PrfSub("Д", "d%A", "А", out type)) goto OK_I; if (PrfSub("У", "y%A", "А", out type)) goto OK_I; if (PrfSub("М", "м%", "", out type)) goto OK_I; if (PrfSub("С", "с%", "", out type)) goto OK_I; OK_I: mark += pars[0] + type; if (type == "" && pars.Count != 1 || Regex.IsMatch(type, @"\d") && pars.Count != 2) error(pars); break; case "[": if (PrfSub("[", "aY", "аУ", out type)) goto OK_U; if (PrfSub("[", "y", "У", out type)) goto OK_U; if (PrfSub("[", "ap", "аП", out type)) goto OK_U; if (PrfSub("[", "p", "П", out type)) goto OK_U; if (PrfSub("[", "e", "Э", out type)) goto OK_U; if (PrfSub("[", "l", "Л", out type)) goto OK_U; if (PrfSub("[", "ca", "Cа", out type)) goto OK_U; if (PrfSub("[", "cb", "Cб", out type)) goto OK_U; if (PrfSub("[", "c", "C", out type)) goto OK_U; OK_U: mark += pars[0] + type; if (pars.Count != 1) error(pars); break; case "L": if (pars.Count == 2) mark += pars[0] + "x" + pars[1]; if (pars.Count == 3) mark += pars[0] + "x" + pars[1] + "x" + pars[2]; if (pars.Count != 2 && pars.Count != 3) error(pars); break; case "—": if (pars.Count == 1) mark += pars[0]; if (pars.Count == 2) { double p0 = Lib.ToDouble(pars[0]); double p1 = Lib.ToDouble(pars[1]); if (p0 < p1) mark += pars[0] + "x" + pars[1]; else mark += pars[1] + "x" + pars[0]; } break; case "Гн.[]": case "Гн.": if (pars.Count == 2) mark = "Гн." + pars[0] + "x" + pars[1].Replace(".0", ""); if (pars.Count == 3) { if(pars[0] == pars[1]) mark = "Гн." + pars[0] + "x" + pars[2].Replace(".0", ""); else mark = "Гн.[]" + pars[0] + "x" + pars[1] + "x" + pars[2].Replace(".0", ""); } if (pars.Count != 2 && pars.Count != 3) error(pars); break; case "TK": case "TP": if(pars.Count >= 2) mark += pars[0] + "x" + pars[1]; if (pars.Count == 3) mark += "x" + pars[2]; if (pars.Count != 2 && pars.Count != 3) error(pars); break; case "IFC_BREP": if(pars.Count == 1) mark += "-" + pars[0]; if (pars.Count > 1) error(pars); break; default: error(pars); break; } return mark; }
public Parameter(string str, ParType _type) : this(str) { ptype = _type; if (ptype == ParType.Integer) par = Lib.ToInt((string)par); if (ptype == ParType.Double) par = Lib.ToDouble((string)par); }