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


Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
ExportToDXF с помощью API, Помогите пожалуйста!
 
В T-FLEX есть функции Импорта/Экспорта. Я пишу программу на SharpDevelop. Нужно Экспортировать из GRB в DXF.
Подскажите как это сделать с помощью ExportToDXF. Если можно в примере!
 
Как-то приблизительно вот так

using System;
using TFlex;
using TFlex.Model;
using TFlex.Model.Model2D;
using System.Windows.Forms;
using System.IO;


namespace NewMacroNamespace
{
public class NewMacroClass
{
public static void NewMacro()
{

SaveFileDialog dialog = new SaveFileDialog ();
dialog.Filter = "DXF files |*.dxf";
if(dialog.ShowDialog() != DialogResult.OK)
return;

Document doc=TFlex.Application.ActiveDocument;
ExportToDXF exp = doc.ExportToDXF;
exp.Export(dialog.FileName);
//...
}

}
}
 
Спасибо!
Код работает как Макрос. А вот вопрос, можно ли это использовать в моей программе? К примеру, открываю файл GRB и экспортирую его в DXF, не запуская при этом T-FLEX. Я подключил библиотеки TFlexAPI.dll и *** .dll. Что-то еще нужно? И можно ли открыть DXF формат с помощью библиотек T-FLEX?
 
На предыдущий вопрос я сам нашел ответ. Все работает.
Теперь другая проблема! Как импортировать DXF файл с помощью API?
 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using TFlex;
using TFlex.Model;
using TFlex.Model.Model2D;
using Application = TFlex.Application;

namespace TFlexXMLExport
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
TFlex.Application.InitSession(new ApplicationSessionSetup { Enable3D = true, EnableMacros = true, ReadOnly = false });
OpenFileDialog opf = new OpenFileDialog();
opf.Filter = "GRB files |*.grb";
if (opf.ShowDialog() != DialogResult.OK)
return;

var document = TFlex.Application.OpenDocument(@opf.FileName);

SaveFileDialog dialog = new SaveFileDialog();
dialog.Filter = "DXF files |*.dxf";
if (dialog.ShowDialog() != DialogResult.OK)
return;

ExportToDXF exp = document.ExportToDXF;
exp.Export(dialog.FileName);
MessageBox.Show("OK");
}

}
}
Изменено: petrick - 10.11.2011 08:52:00
 
До этого я допетрил)
А как импортировать DXF файл в программе. То есть получается та же функция в T-Flex - Импорт. Мне нужно взять DXF и сохранить его в GRB (или сначала открыть). Это возможно?
Заранее, Спасибо!
 
А замена
ExportToDXF--->ImportFromACAD
Export--->Import
SaveFileDialog--->OpenFileDialog
не петрится?
 
OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "DXF files |*.dxf";
if (dialog.ShowDialog() != DialogResult.OK)
return;
var document = TFlex.Application.OpenDocument(dialog.FileName);
MessageBox.Show("OK");

SaveFileDialog dialog1 = new SaveFileDialog ();
dialog1.Filter = "GRB files (*.grb)|*.grb";
if(dialog1.ShowDialog() != DialogResult.OK)
return;
ImportFromACAD imp = new ImportFromACAD(document);
imp.Import(dialog1.FileName);// выдает ошибку в этой строке (В экземпляре объекта не задана ссылка на объект). А без этой строки не сохраняет.
MessageBox.Show("OK");
 
~~:-
"SaveFileDialog dialog1 = new SaveFileDialog ();
dialog1.Filter = "GRB files (*.grb)|*.grb";
if(dialog1.ShowDialog() != DialogResult.OK)
return;
- это файл в который будет сохраняться результат импортирования. Для импортирования нужно использовать не его, а автогадовский файл

ImportFromACAD imp = new ImportFromACAD(document);
- это зачем? Просто ImportFromACAD imp = document.ImportFromACAD;

imp.Import(dialog1.FileName);// выдает ошибку в этой строке (В экземпляре объекта не задана ссылка на объект). А без этой строки не сохраняет.
- вместо "dialog1.FileName" должно быть указано имя dxf файла (OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "DXF files |*.dxf";
if (dialog.ShowDialog() != DialogResult.OK)
return;
---вот этот самый dialog.FileName-----------
MessageBox.Show("OK");
"
 
Да ну, как же!
"ImportFromACAD imp = document.ImportFromACAD;"
:nono:
("TFlex.Model.Document" не содержит определение для "ImportFromACAD". Не удалось найти метод расширения "ImportFromACAD", принимающий первый аргумент типа "TFlex.Model.Document" (пропущено использование директивы или ссылка на сборку ))

Немного не понял твои комментарии! :idontnow:
Приведи тот код который ты имел ввиду!?
 
Цитата из справки: "Иерархия классов
TFlex::Model::ImportFromACAD
".
Т. е. в "TFlex.Model.Document" определения для "ImportFromACAD" действительно нет :) надо отдельно написать "using TFlex.Model;" и есть шанс, что все заработает как по волшебству.

А на счет комментариев - уж как сумел :nono:

P/s/ а на брудершафт мы не пили, так что тыкать в меня необязательно ;) , а код лучше выкладывайте свой
 
Хорошо как скажете)))"на брудершафт мы не пили". Не привык на Вы, на Ты как-то проще! Тыкать не собирался. Извините, если оскорбил тем самым!
 
Так вот по существу - не работает! Подскажите, может где-то ошибка?:idontnow:
Импорт в конце кода.
X
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using TFlex;
using TFlex.Model;
using TFlex.Model.Model2D;
using System.IO;

namespace API2
{
///
/// Description of MainForm.
///

public partial class MainForm : Form
{
public Document doc;
public Point clickPoint;
TFlex.Model.Model2D.FreeNode FNod;
public MainForm()
{
//Укажите Вашу версию T-FLEX CAD либо T-FLEX Viewer
string version = "T-FLEX CAD 3D 11.0\\Rus";
//string version = "T-FLEX Viewer 11.0\\Rus";

//Метод определяющий директорию, в которую установлен T-FLEX CAD
APILoader.Initialize(version);

//Метод, инициализирующий API
APILoader.InitializeTFlexCADAPI();

//Инициализация компонентов windows-формы
InitializeComponent();
}
//Открыть документ T-Flex CAD
void Button1Click(object sender, EventArgs e)
{
//Показать диалог открытия документа T-FLEX CAD
OpenFileDialog openFileDlg = new OpenFileDialog();
openFileDlg.Title = "Open Document";
openFileDlg.Filter = "T-FLEX CAD Document (*.grb)|*.grb";
openFileDlg.FilterIndex = 1;
if (openFileDlg.ShowDialog() == DialogResult.OK)
{
doc = TFlex.Application.OpenDocument(openFileDlg.FileName);
//Отобразить документ T-FLEX CAD в элементе типа control1
tfcontrol.Document = doc;
//Показать построения (команда "Скрыть построения" в false)
tfcontrol.HideConstructions = false;
}
}

void Button2Click(object sender, EventArgs e)
{
//Закрыть документ
ClosingDocument();

//Создать новый документ
doc = TFlex.Application.NewDocument();

//Отобразить документ T-FLEX CAD в элементе типа control1
tfcontrol.Document = doc;

//Показать построения (команда "Скрыть построения" в false)
tfcontrol.HideConstructions = false;
}

private void ClosingDocument()
{
if (doc != null)
{
//Закрыть документ
doc.Close();

//Обнулить ссылку на документ
doc = null;
}
}

void MainFormFormClosed(object sender, FormClosedEventArgs e)
{
//Закрыть документ
ClosingDocument();

//Деинициализация API
APILoader.Terminate();
}

void Button4Click(object sender, EventArgs e)
{
Close();
}

//Экспорт из GRB в DXF
void Button5Click(object sender, EventArgs e)
{
SaveFileDialog dialog = new SaveFileDialog ();
dialog.Filter = "DXF files (*.dxf)|*.dxf";
if(dialog.ShowDialog() != DialogResult.OK)
return;
doc.Activate();
ExportToDXF exp = doc.ExportToDXF;
exp.Export(dialog.FileName);
}

// Импорт
void Button6Click(object sender, EventArgs e)
{
OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "DXF files |*.dxf";
if (dialog.ShowDialog() != DialogResult.OK)
return;
var document = TFlex.Application.OpenDocument(dialog.FileName);
MessageBox.Show("OK");

SaveFileDialog dialog1 = new SaveFileDialog ();
dialog1.Filter = "GRB files (*.dxf)|*.dxf";
if(dialog1.ShowDialog() != DialogResult.OK)
return;
ImportFromACAD imp = new ImportFromACAD(document);
imp.Import(dialog.FileName);// в этом месте выдает "В экземпляре объекта не задана ссылка на объект"
MessageBox.Show("OK");
}

}
}

а если как вы пишете:
ImportFromACAD imp = document.ImportFromACAD;
imp.Import(dialog.FileName);
MessageBox.Show("OK");
то вообще не компилируется (ошибку уже описывал выше)

дело в том, что классу Document не доступно свойство ImportFromACAD (доступно только ImportedOperations ,ImportVariables). Так вроде!?

Если не прав - просветите пожалуйста!
 
dialog.FileName – это файл который нужно импортировать
dialog1.FileName – файл в который происходит импорт

А вы пытаетесь открыть файл автокада после этого его же импортировать в... :( :idontnow: ?

Еще одна цитата из справки:
"ImportFromACAD::Import Метод
bool Import(String* fileName);"

и зачем вам "new ImportFromACAD"?

А свой вариант перед тем как запостить я пусть и в редакторе макросов, но оттестировал.
Может и вам сначала потренироваться в нем, разобраться с синтаксисом и параметрами, так сказать, на месте?
Страницы: 1