Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.08;
Скачать: CL | DM;

Вниз

Вставка изображения в AutoCad   Найти похожие ветки 

 
DimMih ©   (2005-08-15 11:54) [0]

Процедура рисует таблицу заданных размеров и записывает её в MetaFile. Когда вставляю MetaFile в AutoCad, размеры таблицы отличаются от заданных. Не могу понять почему так. Помогите разобраться


 
DimMih ©   (2005-08-15 13:27) [1]

"Спасибо за помощь....."


 
GLFox ©   (2005-08-15 13:47) [2]

Если работаешь через OLE и вставляешь при помощи метода Import, то проверь параметр ScaleFactor. Да и после вызова этого метода получаешь ссылку на BlockReference, размеры которого можешь подправить сам.


 
DimMih ©   (2005-08-15 15:14) [3]

Всё гораздо проще. Я работаю не через OLE. Процедура создаёт MetaFile, потом этот MetaFile я отправляю в буфер обмена, а в  AutoCad-е я вставляю "Специальной вставкой"


 
k2 ©   (2005-08-16 06:28) [4]

1)при вставке "специальной вставкой" выберите формат "растровое изображение", тогда сможете управлять масштабом через редактор свойств в том числе;
2)есть какие-то веские причины метафайл отправлять в буфер обмена и проч., если автокад нормально принимает метафайлы через вставка->wmf... ? в итоге получится ссылка на блок опять таки с масштабом;
3)если таки нужно вставлять через "специальную вставку" в формате изображение(метафайл): стандартный редактор свойств никаких данных о вставленном объекте не показывает
после вставки выберите объект,по правой кнопке в контекстном меню выберите "свойства" и установите нужный масштаб(или через olescale в командной строке).

За вставку первыми двумя методами то, што вставляемое изображение можно масштабировать в соответствующих единицах измерения:
средства->формат->единицы.
удачи
<offtopic>а расстраиваться што никто не отвечает не надо,все тоже самое вы могли и в справке прочитать,благо у автокада она хорошая русифицированная,
правда именно этот раздел у меня по-аглицки, но у меня достаточно старенькая</offtopic>


 
DimMih ©   (2005-08-16 10:21) [5]

Уважаемый k2, что касается первого пункта, то если я вставляю как растровое изображение, то при распечатке появляется фон, поэтому этот вариант не подходит.
Веских причин отпарвлять метафайл в буфер обмена нет. Дело в том, что "вставка->wmf" да и "специальная вставка->AutoCad Entities" работает, но изображение вставляется не в истинном размере. Смасштабировать его я могу, но мне нужно избежать ручного масштабирования, чтобы сэкономить время на вычисление коэффициента масштаба и собственно самой операции.


 
k2 ©   (2005-08-16 10:49) [6]

Уважаемый DimMih, было бы хорошо выложить пример wmf файла (небольшой), куда-нибудь на www.webfile.ru например и какие размеры должны быть, может што и найдем, умозрительно сложно рассуждать


 
DimMih ©   (2005-08-16 11:11) [7]

Файл найдёте по адресу http://www.webfile.ru/461367 Ширина таблицы должна быть 185mm


 
k2 ©   (2005-08-16 13:08) [8]

to DimMih ©   (16.08.05 11:11) [7]
К сожалению порадовать нечем, кроме как заниматься поиском коэффициента масштабирования никак решить не удалось, метафайлы искажаются :( Автодеск впрочем и не скрывает этого, и предлагает следующее решение:
"Для связывания и внедрения данных из других приложений через буфер обмена в рисунок AutoCAD используется команда ВСТСПЕЦ. При этом, если данные буфера обмена можно преобразовать в формат AutoCADто объекты вставляются в виде вхождений блоков. Для редактирования вставленных таким образом блоков следует расчленить их в местах вхождений на отдельные объекты. Во время преобразования графики, хранимой в буфере обмена, из формата метафайла Windows в формат AutoCAD может произойти некоторая потеря точности масштабирования. Для избежания этого недостатка объекты из буфера обмена следует сохранять в виде блока в отдельном рисунке (ПБЛОК), а затем вставлять их в AutoCAD с помощью команды ВСТАВИТЬ."
К сожалению у меня и таким образом ничего не вышло :(
ещё думаю стоит поспрошать на специализированных сайтах, автокад.ру, кто-то может добился
удачи


 
dimmih ©   (2005-08-16 13:36) [9]

Спасибо за информацию.  На автокад.ру пока тоже не дали ответа...
Я думаю эту тему можно закрыть.


 
k2 ©   (2005-08-17 08:04) [10]

Можно и закрыть :) хотя через оле это настолько легко решаемо:

...
uses
 comobj, AutoCAD_TLB;
...
procedure TForm1.Button1Click(Sender: TObject);
var
 acad: IAcadApplication;
 doc: IAcadDocument;
 ent: IAcadEntity;
 i: integer;
 p1, p2: OleVariant;
 dist, need_width, scale: Double;
begin
 need_width := 185;
 acad := GetActiveOleObject("AutoCAD.Application")as IAcadApplication;
 doc := acad.ActiveDocument;
 doc.Import("c:\specyfic.wmf", VarArrayCreate([0, 2], varDouble), 1);
 ent := doc.ModelSpace.Item(pred(doc.ModelSpace.Count));
 ent.GetBoundingBox(p1, p2);
 dist := p2[0] - p1[0];
 scale := need_width / dist;
 ent.ScaleEntity(p1, scale);
 acad.Update;
 {Memo1.Lines.Add(IntToStr(doc.ModelSpace.Count));
 for i := 0 to pred(doc.ModelSpace.Count) do begin
   Memo1.Lines.Add("***");
   Memo1.Lines.Add(doc.ModelSpace.Item(i).EntityName);
   ent := doc.ModelSpace.Item(i);
   ent.GetBoundingBox(p1, p2);
   Memo1.Lines.Add(IntToStr(p1[0])+""+IntToStr(p1[1]));
   Memo1.Lines.Add(IntToStr(p2[0])+""+IntToStr(p2[1]));
 end;  
 }
end;


в акаде создать кнопочку для вставки метафайлов через свою процедуру, подключить примерно так:
^C^C(startapp "c:/MyProjects/MyProgramName.exe")

расширить свою формочку: добавить диалог для выбора файла, добавить ввод параметра необходимой ширины объекта, соответственно переписать обработчик, вот и все


 
DimMih ©   (2005-08-18 11:18) [11]

Попробовал процедуру - вставка работает, но всё равно нужную ширину не выдаёт


 
k2 ©   (2005-08-18 11:42) [12]

ээ стрянно :((( я пробовала с вашим файлом все нормально было :(((( вообще не масштабируется или неточно?


 
DimMih ©   (2005-08-18 11:52) [13]

Масштабируется, но не точно....


 
k2 ©   (2005-08-18 12:32) [14]

в коэффициенте масштабирования тут ошибиться трудно, я проверяла с вашим файлом, а насколько неточно?

Ещё один вариант решения: если вид всех спецификаций один и тот же, было бы правильнее начертить точный шаблон в автокаде, а из вашей программы через оле заполнять вашими данными


 
DimMih ©   (2005-08-18 13:00) [15]

Не могу понять???? Вставлял разные файлы. В некоторых ширина была 183..185, что меня устраивало, а некоторые 164, 176... Только что дошло. Дело в том, что в некоторых спецификациях текст в поле "Примечание" выходит за границы таблицы => коорд. р2 принимает некорректное значение =>ширина 185 - это ширина вместе с текстом, выходящим за границы таблицы. Так что процедура работает правильно и коэффициент вычисл. тоже правильно....


 
k2 ©   (2005-08-18 13:10) [16]

ура :)
и все-таки последний предложенный вариант более предпочтителен, в том числе и тем, што шаблон в акаде будет точным, плюс будут соблюдены всякие требования вроде толщины линий или формата шрифта
вот теперь с чистой совестью можно тему закрыть :) удачи


 
DimMih ©   (2005-08-18 13:20) [17]

Спасибо за помощь. А теперь дело техники.



Страницы: 1 вся ветка

Текущий архив: 2006.10.08;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.062 c
4-1148709908
Delphi_is_cool
2006-05-27 10:05
2006.10.08
Ресурсы(RCDATA->BITMAP ?)


15-1158557887
Ega23
2006-09-18 09:38
2006.10.08
С Днём рождения! 18 сентября


3-1154815736
lexander
2006-08-06 02:08
2006.10.08
ADO + агрегирование (access)


15-1158236541
Ega23
2006-09-14 16:22
2006.10.08
С Днём рождения! 14 сентября


1-1155810465
GrBob
2006-08-17 14:27
2006.10.08
Variant и Int64