/// Пример итерации по мебельной модели, постренной на основе элементов модели TFlex
/// "document" - Документ, в котором хранится мебельная модель
private void Iterator(TFlex.Model.Document document)
{
/// Класс для реинтерпретации объектов TFlex в объекты мебельной модели
/*TFlex.Furniture.Model.Model*/var model = new TFlex.Furniture.Model.Model(document);
IteratorModel(model);
/// Итерация по оснвоной модели
/// Пример итерации по наполнениям ящиков. Каждый ящик это тоже мебельное изделие с панелями, кромками и креплениями
foreach (/*TFlex.Furniture.Model.Drawer*/var drawer in Model.Drawers)
{
/// Документ мог быть удалён или перемещён в другую папку
/*TFlex.Furniture.Model.DrawerModel*/var drawerModel = drawer.GetDrawerModel();
if (drawerModel == null)
continue;
/// Пример получения различных характеристик ящика
/*string*/var drawerType = drawer.DrawerType;
// Тип ящика
/*TFlex.Furniture.Model.Detail*/var facade = drawer.Detail;
// Фасад ящика
/*double*/ var thickness = drawer.Thickness;
// Толщина фасада
/*double*/ var depth = drawer.Depth;
/// Глубина ящика без учёта толщины фасада
IteratorModel(drawerModel);
/// Итерация по модели ящика
}
}
/// Пример итерации по мебельной модели, постренной на основе элементов модели TFlex. В том числе итерация по модели ящика
private void IteratorModel(TFlex.Furniture.Model.Model model)
{
/// Итерация по панелям
foreach (/*TFlex.Furniture.Model.Detail*/var detail in model.Details)
{
/// Документ, в котором панель. Каждая панель - это уникальное изделие, то есть уникальный документ
TFlex.Furniture.Model.DetailModel detailModel = detail.GetDetailModel();
/// Документ мог быть удалён или перемещён в другую папку
if (detailModel == null)
continue;
/// Пример вычисления пильных размеров
double sawx, sawy;
detailModel.CalcSawDims(out sawx, out sawy);
double area = sawx * sawy * 1.0e-6;
/// Пример получения различных характеристик детали
/*string*/
var material = detail.Material;
/// Материал
/*string*/
var nomenclature = detail.Nomenclature;
/// Название детали
/*string*/
var type = detail.Type;
/// Тип прикладной детали
/*string*/
var face = detail.FaceMaterial;
/// Материал лицевой пласти
/*string*/
var back = detail.BackMaterial;
/// Материал нелицевой пласти
/*double*/
var thickness = detail.Thickness;
/// Толщина
/*string*/
var number = detail.Number;
/// Строковое представление номера детали
/// Пример итерации по кромкам
foreach (Model.Edge edge in detailModel.Edges)
{
/// Пример получения различных характеристик кромки
/*string*/
var edgematerial = edge.Material;
// Материал
/*double*/
var length = edge.CalcLength();
// Длина кромки в метрах
// Способы обработки кромки на концах
/*TFlex.Furniture.Data.EdgeEndMethod*/
var right = edge.Right;
/*TFlex.Furniture.Data.EdgeEndMethod*/
var left = edge.Left;
/*uint*/
var order = edge.Order;
// Порядок обработки кромок
}
/// Расширение информации о деталях с помощью данных для спецификации.
/// В данные для спецификации можно добавлять информацию о покрытиях панелей, дополнительных обработках(типа фрезерования)
/// Пример получения и итерации по данным спецификации. Тут нужно читать документацию по TFLEX API.NET
/*TFlex.Model.Model2D.Fragment.FileUserData*/
var data = detail.Fragment.GetUserBomData(false);
if (data == null)
continue;
foreach (/*TFlex.Model.Model2D.Fragment.FileUserData.RecordUserData*/var record in data.Records)
{
}
/// Пример итерации по всем стыкам детали. Например, может понадобиться итерация по всем креплениям детали.
/// Вообще можно итерировать сразу по всем креплениям модели. Смотри пример кода ниже.
var joints = detail.Joints.FindAllJoints();
foreach (/*TFlex.Furniture.Model.Joint*/var joint in joints)
{
/*string*/
var scheme = joint.Scheme;
/// Имя прикладной схемы стыка
/// Пример итерации по всем креплениям детали
var fixities = joint.FindAllFixities();
foreach (/*TFlex.Furniture.Model.Fixity*/var fixity in fixities)
{
/// Пример получения различных характеристик крепления
/*string*/
var fixityMatrial = fixity.Material;
// Материал крепления
/*string*/
var fixityNomenclature = fixity.Nomenclature;
// Обозначение матреиала крепления
}
}
}
/// Итерация по всем креплениям
foreach (/*TFlex.Furniture.Model.Fixity*/var fixity in model.Fixity)
{
/// Пример получения различных характеристик крепления
/*string*/
var fixityMaterial = fixity.Material;
// Материал крепления
/*string*/
var fixityNomenclature = fixity.Nomenclature;
// Обозначение матреиала крепления
/// В большинстве случаев крепления являются комплектами.
/// Каждая комплектующая из комплекта представлена записью в данных для спецификации в файле модели комплекта.
/// Можно добавлять свои поля в записи.
/// В TFlex-мебель в записях используются поля для хранения информации о названии материала комплектующего и его количестве.
/// Ниже приводится код, как в TFlex-мебель выполняется расчет расхода материалов по комплектующим.
/*TFlex.Model.Model2D.Fragment.FileUserData*/
var data = fixity.Fragment.GetUserBomData(false);
if (data == null)
continue;
/// Итерация по комплектующим. Комплектующими могут быть как детали, так и материалы(клей) и оценка трудоёмкости(для подсчета стоимости монтажа)
foreach (/*TFlex.Model.Model2D.Fragment.FileUserData.RecordUserData*/var record in data.Records)
{
String articul = record.Denotation;
/// Код изделия или комплекта
if (string.Equals(articul, "КОМПЛЕКТ", StringComparison.OrdinalIgnoreCase))
continue;
String name = record.Name;
// Имя комплектующей
/// Крепление не является комплектом, а состоит из одной детали
if (string.IsNullOrEmpty(articul) || name == fixityMaterial)
continue;
String unititem = DrawingsControl.GetUserBOMData(record, "Единицы измерения");
// Единица измерения комплектующей
double fixcount;
string countstr;
String countitem = DrawingsControl.GetUserBOMData(record, "Количество фурнитуры");
// Количество комплектующих в комплекте
if (countitem != null)
{
countstr = countitem != "" ? countitem : record.Amount;
}
else
countstr = record.Amount;
// Данные берутся из поля "Количество" (стандартный набор полей в любой записи)
/// Переводим количество комплектующего в цифровую форму
try
{
fixcount = double.Parse(countstr, new System.Globalization.NumberFormatInfo() { NumberDecimalSeparator = "." });
}
catch
{
fixcount = 0;
}
}
}
foreach (/*TFlex.Furniture.Model.Drawer*/var drawer in Model.Drawers)
{
DrawerModel drawermodel = drawer.GetDrawerModel();
if (drawermodel != null)
{
}
}
}
[свернуть]