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


Поиск  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
Полезные макросы
 
Давайте разместим в данном разделе макросы, которые будут полезны как с практической точки зрения, так и для изучения системы.
 
Вот пример макроса, создающего сетку точек параболоида. Скопирован из другой ветки:

using System;
using TFlex;
using TFlex.Model;
using TFlex.Model.Model2D;
using TFlex.Model.Model3D;

namespace NewMacroNamespace
{
public class NewMacroClass
{
//Пример создания сетки точек параболоида
public static void Create3DNodes()
{
Document document = TFlex.Application.ActiveDocument;
document.BeginChanges("Создание 3D узлов параболоида");

//Узел полюса
CoordinateNode3D node = new CoordinateNode3D(document);
node.X = 0; node.Y = 0; node.Z = 0;
for(int j = 1; j < 10; j++)
{
double x = j * 20;
double y = 0;
double z = x * x / 200; //Коэффициент, чтобы было "красиво"

//Создаём точки с этими координатами по кругу, через 20 градусов
for(int i = 0; i < 18; i++)
{
double angle = Math.PI * (i * 20) / 180;
CoordinateNode3D node1 = new CoordinateNode3D(document);
node1.X = x * Math.Sin(angle);
node1.Y = x * Math.Cos(angle);
node1.Z = z;
}
}
document.EndChanges();
}
}
}
 
Этот макрос мне прислали разработчики - очень полезный макрос: запускает внешнее приложение с передачей в него заданного параметра. Применение - информационно-графические 3D и 2D каталоги.


using System;
using System.Windows.Forms;
using TFlex;
using TFlex.Model;
using TFlex.Model.Model2D;
using System.Diagnostics;
using System.ComponentModel;

namespace NewMacroNamespace
{
public class NewMacroClass
{
//Функция устанавливает значение переменной
private static bool SetVarValue(Document doc,string varname,double value)
{
foreach(Variable var in doc.Variables)
{
if(var.Name == varname)
{
var.Expression = value.ToString();
return true;
}
}
return false;
}

//Функция возвращает значение переменной
private static string GetVarValue(Document doc,string varname)
{
foreach(Variable var in doc.Variables)
{
if(var.Name == varname)
{
return var.Expression;
}
}
return "";
}

public static void StartProgram()
{
//Здесь для примера запускается IE
//можно запустить любую программу с передачей аргумента
//например

Document doc = TFlex.Application.ActiveDocument;
Process.Start("IExplore.exe", GetVarValue(doc,"$t"));

//Process.Start("IExplore.exe", "www.tflex.ru");
//doc.BeginChanges("Пуск");
//SetVarValue(TFlex.Application.ActiveDocument,"A",50);
//doc.EndChanges();

}
}
}
 
Предыдущий макрос не компилируется. Версия учебная.
Так и должно быть?
 
Нужно в папку "Ссылки" добавить строчку:
System.Windows.Forms
Для этого кликнуть правой в эту папочку и выбрать "Добавить". Ввести эту строку.
Вообще-то, для того, чтобы работать с макросами, полезно что-то понимать в C# или VB, а также в .NET.
Иначе будут трудности.
Сейчас есть много книжек, в том числе и для начинающих.
Хотя, возможно, проблема и в чём то другом.
 
Спасибо. Проблема была в этом.
 
Пример макроса подсчета масс из значения переменной $Масса фрагментов.
Полезна если сборка 2D или в 3D используются упрощенные модели масса которых заранее известна.
Привожу только тело макроса.

//Составим функцию 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" необходима если использовались массивы фрагмента. Можно просто подсчитать количество в массиве и проставить во внешней переменной. Обратите внимание фрагмент открывается в режиме деталировки, т.е. все параметрические фрагменты будут работать верно.
 
Коды для макроса автонумерации.(*.rar)

Инструкция:
1. Создать новый документ в T-Flex CAD.
2. В окне Сервис>Редактор макросов создать 3 модуля, в которые скопировать (т.е. заменить) текст из 3-х файлов прилагаемого архива.
3. Добавить ссылку System.Windows.Forms
4. Войти в окно Проект>Обработчики событий и напротив View Activated установить "макрос".
5. Скомпилировать (Ctrl+F7).
6. Сохранить документ в папку С:\Program Files\T-FLEX\T-FLEX CAD 11\Program\Macros\
7. Перезагрузить T-Flex.

Коды компилируются и в T-Flex 9, но 9-ка чаще "падает" (если оставить T-Flex 9 "без движения" минуты на 3...).

P.S. Все же лучше, чтоб подобный макрос (от разработчиков) был включен в стандартную комплектацию T-Flex CAD.
Изменено: Brom25 - 31.07.2009 20:29:27
Кто ищет - тот всегда найдет!
Страницы: 1