Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сохранение документа AutoCAD [D7, WinXP]


Михаил ©   (2012-12-24 20:25:00) 

Здравствуйте уважаемые мастера!!!

Есть OLE объект:
AcadApp: OleVariant;
...
AcadApp := GetActiveOleObject('AutoCAD.Application');

Нужна такая команда, которой можно сохранить текущий документ, при этом чтоб он (документ) остался текущим.

Т.е. нужен след. алгоритм
1. Открыт документ Чертеж1.dwg
2. Сохранить документ Чертеж1.dwg как D:\test.dwg
3. Появляется файл D:\test.dwg
4. В автокаде активным остается Чертеж1.dwg

.........
Что я пробовал:
1. Есть команда СОХРАНИТЬКАК, она же _SAVEAS. Делает то что надо, но после ее выполнения в автокаде открывается сохраненный документ, а тот который был открыт закрывается.

2. Есть команда -ПБЛОК. Она сохраняет не все листы открытого чертежа, а только тот кусок чертежа, который текущий.

Помогите пожалуйста...


Михаил   (2012-12-31 10:52:00) [1]


> А AutoCAD блокирует открытый файл?
>
> Если нет, то Save и копировать.

В посте номер 2 я написал, что тек. документ должен остаться несохраненным


Будь проще, Люк   (2012-12-30 21:38:00) [2]

А AutoCAD блокирует открытый файл?

Если нет, то Save и копировать.


Михаил   (2012-12-30 20:42:00) [3]


> Копируем Чертеж1.dwg в D:\test.dwg
> Открываем в автокаде Чертеж1.dwg
>
>

Пользователь не должен ничего заметить. Он должен работать себе спокойно. А тут бах и чертеж закрылся и открылся. И место где он что то чертил уже будет сброшено ну и вообще все. Это не вариант.


Будь проще, Люк   (2012-12-30 19:54:00) [4]

Копируем Чертеж1.dwg в D:\test.dwg
Открываем в автокаде Чертеж1.dwg


Dimka Maslov   (2012-12-27 13:28:00) [5]

При помощи .NET можно через сохранение базы данных чертежа. Но в Automation другая объектная модель и объект Database метода SaveAs не имеет.


Михаил   (2012-12-26 15:25:00) [6]

Блин. А нельзя все таки как то сразу экспортировать файл в DWG ?
Потому-что открытие нового автокада и пересохранение экспортированного DXF в DWG это очень медленно, особенно если файлы от 5 МБ и больше...


Михаил   (2012-12-25 14:40:00) [7]


> Dimka Maslov ©   (25.12.12 11:10) [4]


Спасибо! Отлично работает. Правда размер файла в формате dxf примерно в 4 раза больше, чем исходный файл в формате dwg.
Ну как вариант можно создать свой объект AcadApp в невидимом режиме, загрузить в него dxf и выполнить команду SAVEAS в формате dwg. Как то через одно место получается правда((


Dimka Maslov   (2012-12-25 11:10:00) [8]

Вот пример, он всё делает как надо, но такой подход позволяет сохранить документ в dxf

procedure TForm3.Button2Click(Sender: TObject);
var
 Unk: IUnknown;
 Disp: IDispatch;
 App, Doc, Sel: Variant;
 Cls: TGUID;
begin
 Cls := ProgIDToClassID('AutoCAD.Application');
 if not Succeeded(GetActiveObject(Cls, nil, Unk)) then
   raise Exception.Create('Cannot connect to AutoCAD.Application');
 Unk.QueryInterface(IDispatch, Disp);
 App := Disp;
 try
   Doc := App.ActiveDocument;
   try
     Sel := Doc.SelectionSets.Add('_TEMP_' + IntToStr(GetTickCount));
     try
       Doc.Export('d:\111', 'dxf', Sel);
     finally
       Sel := Unassigned;
     end;
   finally
     Doc := Unassigned;
   end;
 finally
   App := Unassigned;
 end;
end;


Думаю потом можно отдельно открыть dxf и пересохранить в dwg...


Dimka Maslov   (2012-12-25 09:41:00) [9]

Мне кажется, что на специализированных форумах по автокаду знающих предмет вопроса куда как больши и подобные задачи они решали. В любом случае можно посоветовать смотреть в сторону такого действа как EXPORT


Михаил   (2012-12-25 05:06:00) [10]


> Dimka Maslov ©   (24.12.12 23:55) [1]


Нужно чтобы текущий документ остался не сохраненным. Т.е. нужно текущий документ сохранить в другой файл, а текущий файл чтобы остался как есть.


Dimka Maslov   (2012-12-24 23:55:00) [11]

1. Делаем команду QSAVE
2. Получаем имя активного документа
3. Переименовываем во что хотим.


Наверх

Титульная страница Поиск, карта сайта Написать письмо