Цитата |
---|
Diso пишет:
Если есть "нечестные" модели |
Тело макроса например такое.
//Составим функцию FindVar поиска переменной по имени
private static Variable FindVar(Document doc,string name)
{
foreach(Variable var in doc.Variables)
if (var.Name == name) return var;
return null;
}
public static void Подсчет_масс()
{
Document doc = TFlex.Application.ActiveDocument;
double mass = 0;
double massDet = 0;
string massStr ="";
doc.BeginChanges("Деталировка");
foreach (Fragment Frag in doc.Fragments)
{
Document FRdoc = Frag.OpenPart();
Variable Vmass = FindVar(FRdoc,"$Масса");
if (Vmass != null)
{
massStr = Vmass.TextValue.Replace(".",",");
if (massStr!="")
{
massDet = Convert.ToDouble(massStr);
Variable VArr = FindVar(FRdoc,"ArDet");
if (VArr != null) massDet = massDet*VArr.RealValue;
mass = mass + massDet;
}
FRdoc.Close();
}
Variable vari = FindVar(doc,"$Масса");
vari.Expression = String.Concat("\"", mass.ToString(), "\"");
doc.EndChanges();
}
Здесь переменная фрагмента "ArDet" необходима если использовались массивы фрагмента. Можно просто подсчитать количество в массиве и проставить во внешней переменной. Обратите внимание фрагмент открывается в режиме деталировки, т.е. все параметрические фрагменты будут работать верно.