Сохранить в dxf-файле группу примитивов

Автор Тема: Сохранить в dxf-файле группу примитивов  (Прочитано 3491 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн sash-2007Автор темы

  • ADN OPEN
  • Сообщений: 21
  • Карма: -1
На чертеже есть разные примитивы , нужно выделить нужные и сохранить в dxf файле на C#
аналогично как в autoLisp (command "_dxfout" filename "_e" "_p" Nabor "" "" )
смотрел метод dxfout класса database , не понятно)

Знающие люди , подскажите пожалуйста как реализовать на С#  :)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
sash-2007
Приветствую на форуме!
Итак есть несколько вариантов для решения этой задачи.
Первый - командный метод:
Второй - с использованием Database.DxfOut
Третий - с использованием COM/ActiveX (AcadDocument.Export)
Я бы рекомендовал второй. С какого начнём?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн sash-2007Автор темы

  • ADN OPEN
  • Сообщений: 21
  • Карма: -1
Спасибо за приглашение ).

2 способ.   Очень интересно узнать  Database.DxfOut

Отмечено как Решение sash-2007 09-09-2016, 08:09:07

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Вот так выглядит использование второго способа:
Код - C# [Выбрать]
  1. using System;
  2. using System.Windows.Forms;
  3. using Autodesk.AutoCAD.Runtime;
  4. using Autodesk.AutoCAD.ApplicationServices;
  5. using AcAp = Autodesk.AutoCAD.ApplicationServices;
  6. using Autodesk.AutoCAD.DatabaseServices;
  7. using Autodesk.AutoCAD.Geometry;
  8. using Autodesk.AutoCAD.EditorInput;
  9. using Autodesk.AutoCAD.Windows;
  10.  
  11. [assembly: CommandClass(typeof(DXFOUT.Utils))]
  12.  
  13. namespace DXFOUT
  14. {
  15.   public class Utils
  16.   {
  17.     [CommandMethod("MYDXFOUT")]
  18.     public void MyDxfOut()
  19.     {
  20.       Document doc = AcAp.Application.DocumentManager.MdiActiveDocument;
  21.       if (doc == null) return;
  22.       Database db = doc.Database;
  23.       Editor ed = doc.Editor;
  24.       PromptSelectionOptions prOpts = new PromptSelectionOptions();
  25.       prOpts.MessageForAdding = "Выберите примитивы для экспорта в DXF: ";
  26.       PromptSelectionResult res = ed.GetSelection(prOpts);
  27.       if (res.Status != PromptStatus.OK || res.Value.Count == 0) return;
  28.       Autodesk.AutoCAD.Windows.SaveFileDialog dlg =
  29.         new Autodesk.AutoCAD.Windows.SaveFileDialog("Укажите имя dxf-файла", "", "dxf", "MyDxfOut",
  30.           Autodesk.AutoCAD.Windows.SaveFileDialog.SaveFileDialogFlags.NoUrls);
  31.       DialogResult ds = dlg.ShowDialog();
  32.       if (ds != DialogResult.OK) return;
  33.  
  34.       // Создаём новую базу и копируем туда выбранные примитивы
  35.       using (ObjectIdCollection objs = new ObjectIdCollection(res.Value.GetObjectIds())) {
  36.         using (Database tempDb = db.Wblock(objs, Point3d.Origin)) {
  37.           // Выполняем DXFOUT
  38.           // Тут можно играться параметрами: http://adn-cis.org/soxranenie-chertezha-v-dxf-formate.html
  39.           tempDb.DxfOut(dlg.Filename, 16, false);
  40.         }
  41.       }
  42.     }
  43.   }
  44. }
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн sash-2007Автор темы

  • ADN OPEN
  • Сообщений: 21
  • Карма: -1
Большое спасибо Александр, это то что нужно !!!