Официальный форум российского программного комплекса T-FLEX PLM


Поиск  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
Разбиение 2D-страниц на документы определенного типа
 
Добрый день!

T-FLEX 12
Есть файл в котором несколько 2D-страниц разных форматок, например:
Страница 1 - <Форматки>Конструкторский чертеж. Первый лист. ГОСТ 2.104-68.GRB
Страница 2 - <Форматки>Конструкторский чертеж. Последующие листы. ГОСТ 2.104-68.GRB
Страница 3 - <Форматки>Спецификация. Первый лист. ГОСТ 2.106-96 Ф1.grb
Страница 4 - <Форматки>Спецификация. Последующие листы. ГОСТ 2.106-96 Ф1a.grb
Страница 5 - <Форматки>Перечень элементов. ГОСТ 2.701-84.grb

Задача: сохранить документы определенного типа в pdf. Каждый тип документа в отдельный файл pdf.
Например,
Страницы 1, 2 - в 1.pdf
Страницы 3, 4 - в 2.pdf
Страница 5 - в 3.pdf

Как определить, что страница 1 связана со страницей 2, страница 3 связана со страницей 4?
 
Ирина, специальных средств для определения связей страниц по форматкам нет в API.
T-FLEX CAD 17.1.6.0
 
Ирина, в коде макроса прописать соответствие имен фрагментов находящихся на странице. Вначале найти все фрагменты из указанного вами перечня. Затем определить на каких страницах они находятся, и уже поочередно экспортировать с указанием нужных страниц.
 
vite, Спасибо!
В последней версии тоже нет?
 
Цитата
vite написал:
Ирина, специальных средств для определения связей страниц по форматкам нет в API.
Но можно дать осмысленные имена, к примеру:
- Чертёж
- Спецификация
- Перечень

И по именам формировать пдф-ки, т.е. все страницы начинающиеся на "Чертёж*" в один файл и так далее.
 
Цитата
Ирина написал:
В последней версии тоже нет?
в текущей версии для определения связей, поддерживается специальный метод Tflex.Application.GetDocumentExternalFileLinks, который извлекает ссылки на все вложенные фрагменты. Если фрагмент также содержит ссылки на другие фрагменты, то это подсборка. Таким образом вы можете точно определить, где сборочная единица а где детали.
T-FLEX CAD 17.1.6.0
 
Цитата
Анатолий Ледяев написал:
Ирина, в коде макроса прописать соответствие имен фрагментов находящихся на странице. Вначале найти все фрагменты из указанного вами перечня. Затем определить на каких страницах они находятся, и уже поочередно экспортировать с указанием нужных страниц.
Анатолий, например, пользователь работает со спецификацией, добавил объекты, автоматически создалась еще одна страница.
Макрос сможет отследить, что создалась еще одна страница? Или каждый раз нужно будет запускать макрос?
Интересно, конечно, программно отслеживать, без дополнительных макросов и действий пользователя.
 
Цитата
Sila Musli написал:
Цитата
vite написал:
Ирина , специальных средств для определения связей страниц по форматкам нет в API.
Но можно дать осмысленные имена, к примеру:
- Чертёж
- Спецификация
- Перечень

И по именам формировать пдф-ки, т.е. все страницы начинающиеся на "Чертёж*" в один файл и так далее.
Боюсь, что пользователя не заставить давать осмысленные имена, для него это лишняя работа.
 
Цитата
vite написал:
Цитата
Ирина написал:
В последней версии тоже нет?
в текущей версии для определения связей, поддерживается специальный метод Tflex.Application.GetDocumentExternalFileLinks , который извлекает ссылки на все вложенные фрагменты. Если фрагмент также содержит ссылки на другие фрагменты, то это подсборка. Таким образом вы можете точно определить, где сборочная единица а где детали.
В 12 версии также есть метод GetDocumentExternalFileLinks. Даже если точно узнаем, что это подсборка, программно не получается понять какие именно страницы относятся к одному типу документа.
Есть свойство Page.FragmentForNewPageFileLink, которое вроде логично, но оно может указывать на страницу не принадлежащую нужному типу документа. Например, последующая страница спецификации может указывать на первую перечня элементов.
Придется что-то придумывать...
 
Цитата
Ирина написал:
Боюсь, что пользователя не заставить давать осмысленные имена, для него это лишняя работа.
Это должно решаться на уровне предприятия.

А вот вставленная форматка по сути сразу делает любой чертёж сборкой.
 
Цитата
Sila Musli написал:
Цитата
Ирина написал:
Боюсь, что пользователя не заставить давать осмысленные имена, для него это лишняя работа.
Это должно решаться на уровне предприятия.

А вот вставленная форматка по сути сразу делает любой чертёж сборкой.
Пользователь может ошибиться в описании, на него нельзя полагаться.
А если в файле многолистовые сборочные чертежи + монтажный + другие.
 
Цитата
Ирина написал:
Цитата
Анатолий Ледяев написал:
Ирина , в коде макроса прописать соответствие имен фрагментов находящихся на странице. Вначале найти все фрагменты из указанного вами перечня. Затем определить на каких страницах они находятся, и уже поочередно экспортировать с указанием нужных страниц.
Анатолий, например, пользователь работает со спецификацией, добавил объекты, автоматически создалась еще одна страница.
Макрос сможет отследить, что создалась еще одна страница? Или каждый раз нужно будет запускать макрос?
Интересно, конечно, программно отслеживать, без дополнительных макросов и действий пользователя.
Я делал макрос по экспорту в PDF. Выполнялся он из окна "Макросы", т.е. для получения pdf, после того как добавили новые детали в сборку в любом случае необходимо запускать макрос, чтобы сами pdf обновить. У вас изменилась спецификация и добавились новые страницы, необходимо данный макрос запустить и он сформирует pdf файлы, в соответствии с вашими требованиями. Главное всё правильно прописать в коде.
1. Найти необходимые фрагменты.
2. Определить на каких страницах они находятся
3. Сгруппировать
4. Экспортировать группы в pdf.
 
Ирина,
using TFlex;
using TFlex.Model;
using TFlex.Model.Model2D;
using System.Collections.Generic;

namespace NewMacroNamespace
{
public class NewMacroClass
{
public static void СохранениеСтраниц()
{
Document документ = TFlex.Application.ActiveDocument; //создаем объект для работы с текущим документом
string ПутьКДокументу = документ.FilePath; //считываем полный путь к документу включая название

List<Page> страницыЧертеж = new List<Page>();
List<Page> страницыСпецификация = new List<Page>();
List<Page> страницыПереченьЭлементов = new List<Page>();

foreach(Fragment фрагмент in документ.GetFragments())
{
switch (фрагмент.FilePath)
{
case "<Форматки>Конструкторский чертеж. Первый лист. ГОСТ 2.104-68.GRB":
case "<Форматки>Конструкторский чертеж. Последующие листы. ГОСТ 2.104-68.GRB":
страницыЧертеж.Add(фрагмент.Page);
break;
case "<Форматки>Спецификация. Первый лист. ГОСТ 2.106-96 Ф1.grb":
case "<Форматки>Спецификация. Последующие листы. ГОСТ 2.106-96 Ф1a.grb":
страницыСпецификация.Add(фрагмент.Page);
break;
case "<Форматки>Перечень элементов. ГОСТ 2.701-84.grb":
страницыПереченьЭлементов.Add(фрагмент.Page);
break;
}
}
if (страницыЧертеж.Count != 0)
{
ExportToPDF экспортВPDFЧертеж = new ExportToPDF(документ);
экспортВPDFЧертеж.ExportPages = страницыЧертеж;
экспортВPDFЧертеж.Export(ПутьКДокументу + "\\1.pdf");
}
if (страницыСпецификация.Count != 0)
{
ExportToPDF экспортВPDFСпецификации = new ExportToPDF(документ);
экспортВPDFСпецификации.ExportPages = страницыСпецификация;
экспортВPDFСпецификации.Export(ПутьКДокументу + "\\2.pdf");
}
if (страницыПереченьЭлементов.Count != 0)
{
ExportToPDF экспортВPDFПереченьЭлементов = new ExportToPDF(документ);
экспортВPDFПереченьЭлементов.ExportPages = страницыПереченьЭлементов;
экспортВPDFПереченьЭлементов.Export(ПутьКДокументу + "\\3.pdf");
}
}

}
}
 
Цитата
Анатолий Ледяев написал:
Ирина,
using TFlex;
using TFlex.Model;
using TFlex.Model.Model2D;
using System.Collections.Generic;
}
Спасибо! Как один из вариантов.
Страницы: 1