Подскажите, пжалста, можно ли с помощью макроса программно вставить в сборку 3D-фрагмент из DOCs (важно!)? Почитал хэлп по API, нашел только методы, которые вставляют фрагменты по пути к файлу, т.е. фрагменты с диска.
07.09.2007 11:29:55
попробуйте посмотреть API Docs
|
|
|
|
15.01.2008 20:04:27
Сформулируйте более подробно задачу
|
|
|
|
16.01.2008 21:41:40
Все это у Вас в одном файле ?
|
|
|
|
16.01.2008 21:56:33
На самом деле можно обойтись и без макросов. Я как-то делал автонумерацию и получение количества страниц всего документа, вот только работало это плохо. При редактировании страниц, не происходило динамического пересчета документа(эту проблему я затронул в теме
В форматках(прототипах) создайте вещественную переменную напр. list и назначте на нее функцию GETV("APAGE", 0), потом введите эту переменную в графу "Лист" вместо $list и вуаля... Для получения количества всех листов нужно воспользоваться функцией GETV("APAGES", 0).
Кто ищет - тот всегда найдет!
|
|
|
|
17.01.2008 20:09:35
Ой, то есть через редактор переменных )
Кто ищет - тот всегда найдет!
|
|
|
|
18.01.2008 21:27:59
В T-Flex существует один очень интересный инструмент, позволяющий автоматически нумеровать, например, строки спецификции, производить сравнение в строках по заданному признаку и если они одинаковы производить их «суммирование»… Инструмент довольно сложный, но это лучшее, что я могу Вам предложить как альтернативу макросам. Рассмотрите внимательно как сделана форматка Х\T-FLEX\T-FLEX CAD 9\Program\Прототипы\Спецификации\Спецификация форма 1 ГОСТ 2.106-96.grb, либо запустить Сервис>Спецификация>Новая. Если Вы сумеете переделать этот инструмент под себя, думаю, окажетесь «На коне». Сам только 1,5 недели назад изучать начал, но пришел в некоторый восторг! Желаю успехов!
Кто ищет - тот всегда найдет!
|
|
|
|
20.03.2008 00:19:39
Пытаюсь переменным фрагмента через API присваивать константные значения, либо ссылки на переменные сборочного чертежа – не выходит.
Часть кода программы:
Здесь fr.GetFragmentDocument(false) – получить документ фрагмента с подстановкой значений переменных фрагмента; fr.SetDefaultVariableValues() - установить значения переменных фрагмента из документа фрагмента. Выполнение любого из этих методов не приводит к установке значений переменных фрагмента к изначальным (установленным в файле фрагмента). Попытка присвоить переменной фрагмента явное значение (var.Expression = "\"Иванов\"";) так же не увенчалась успехом При компиляции сообщений об ошибках нет. Может быть кто-то знает, что я делаю не так?
Кто ищет - тот всегда найдет!
|
|||
|
|
20.03.2008 11:16:28
Я знаю, что не так. Вы меняете (пытаетесь менять) внуренние переменные документа фрагмента. А нужно менять переменные ЭКЗЕМПЛЯРА фрагмента в сборочном документе. Это нужно делать примерно так:
using System; using TFlex; using TFlex.Model; using TFlex.Model.Model2D; namespace NewMacroNamespace { public class NewMacroClass { public static void NewMacro() { Document doc = Application.ActiveDocument; foreach(Fragment fr in doc.Fragments) { doc.BeginChanges("Проверка"); fr.SetDefaultVariableValues(); FragmentVariableValues vars = fr.VariableValues; foreach(FragmentVariableValue var in vars) { if(var.Name == "d") { var.RealValue = 30; } if(var.Name == "$pole") { var.TextValue = "Иванов"; } } } doc.EndChanges(); } } } |
|
|
|
20.03.2008 23:20:41
TFUser.
ОГРОМНОЕ ВАМ ЧЕЛОВЕЧЕСКОЕ СПАСИБО! У меня даже получилось подставить значением переменной фрагмента переменную сборки
Кто ищет - тот всегда найдет!
|
|
|
|
02.04.2008 23:21:06
Помогите пожалуйста разобраться как работать с абстрактными классами. Мне нужно получить доступ к текстам (ParagraphText, MultilineText, LineText). Пробовал конструкцию:
foreach(ParagraphText p_txt in document.Texts) { } но она работает лишь в том случае, если в документе нет текстов отличных от ParagraphText. Пробовал также такую конструкцию(для простоты выбрал LineText): foreach(Text txt in document.Texts)//класс Text – абстрактный класс if (txt.SubType==TextType.LineText) { txt.Angle = 83;// Angle - свойство определенное для LineText } система выдает ошибку. Я понимаю, что в блоке нужно каким-то образом переопределить txt для работы с LineText, а вот как – не знаю. Помогите пожалуйста.
Кто ищет - тот всегда найдет!
|
|
|
|
03.04.2008 11:21:12
Нашееел!!!
Нужно делать так: foreach(Text txt in document.Texts) if (txt.SubType==TextType.LineText) { LineText L_txt = txt as LineText; L_txt.Angle = 83; } И в общем дело не в абстрактных классах.
Кто ищет - тот всегда найдет!
|
||||
|
|
|||