![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вставка изображения в AutoCad [D6, WinXP]
DimMih © (2005-08-15 11:54:00)Процедура рисует таблицу заданных размеров и записывает её в MetaFile. Когда вставляю MetaFile в AutoCad, размеры таблицы отличаются от заданных. Не могу понять почему так. Помогите разобраться
DimMih (2005-08-18 13:20:00) [1]Спасибо за помощь. А теперь дело техники.
k2 (2005-08-18 13:10:00) [2]ура :)
и все-таки последний предложенный вариант более предпочтителен, в том числе и тем, што шаблон в акаде будет точным, плюс будут соблюдены всякие требования вроде толщины линий или формата шрифта
вот теперь с чистой совестью можно тему закрыть :) удачи
DimMih (2005-08-18 13:00:00) [3]Не могу понять???? Вставлял разные файлы. В некоторых ширина была 183..185, что меня устраивало, а некоторые 164, 176... Только что дошло. Дело в том, что в некоторых спецификациях текст в поле "Примечание" выходит за границы таблицы => коорд. р2 принимает некорректное значение =>ширина 185 - это ширина вместе с текстом, выходящим за границы таблицы. Так что процедура работает правильно и коэффициент вычисл. тоже правильно....
k2 (2005-08-18 12:32:00) [4]в коэффициенте масштабирования тут ошибиться трудно, я проверяла с вашим файлом, а насколько неточно?
Ещё один вариант решения: если вид всех спецификаций один и тот же, было бы правильнее начертить точный шаблон в автокаде, а из вашей программы через оле заполнять вашими данными
DimMih (2005-08-18 11:52:00) [5]Масштабируется, но не точно....
k2 (2005-08-18 11:42:00) [6]ээ стрянно :((( я пробовала с вашим файлом все нормально было :(((( вообще не масштабируется или неточно?
DimMih (2005-08-18 11:18:00) [7]Попробовал процедуру - вставка работает, но всё равно нужную ширину не выдаёт
k2 (2005-08-17 08:04:00) [8]Можно и закрыть :) хотя через оле это настолько легко решаемо:
...
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-16 13:36:00) [9]Спасибо за информацию. На автокад.ру пока тоже не дали ответа...
Я думаю эту тему можно закрыть.
k2 (2005-08-16 13:08:00) [10]to DimMih © (16.08.05 11:11) [7]
К сожалению порадовать нечем, кроме как заниматься поиском коэффициента масштабирования никак решить не удалось, метафайлы искажаются :( Автодеск впрочем и не скрывает этого, и предлагает следующее решение:
"Для связывания и внедрения данных из других приложений через буфер обмена в рисунок AutoCAD используется команда ВСТСПЕЦ. При этом, если данные буфера обмена можно преобразовать в формат AutoCADто объекты вставляются в виде вхождений блоков. Для редактирования вставленных таким образом блоков следует расчленить их в местах вхождений на отдельные объекты. Во время преобразования графики, хранимой в буфере обмена, из формата метафайла Windows в формат AutoCAD может произойти некоторая потеря точности масштабирования. Для избежания этого недостатка объекты из буфера обмена следует сохранять в виде блока в отдельном рисунке (ПБЛОК), а затем вставлять их в AutoCAD с помощью команды ВСТАВИТЬ."
К сожалению у меня и таким образом ничего не вышло :(
ещё думаю стоит поспрошать на специализированных сайтах, автокад.ру, кто-то может добился
удачи
DimMih (2005-08-16 11:11:00) [11]Файл найдёте по адресу http://www.webfile.ru/461367Ширина таблицы должна быть 185mm
k2 (2005-08-16 10:49:00) [12]Уважаемый DimMih, было бы хорошо выложить пример wmf файла (небольшой), куда-нибудь на www.webfile.ru например и какие размеры должны быть, может што и найдем, умозрительно сложно рассуждать
DimMih (2005-08-16 10:21:00) [13]Уважаемый k2, что касается первого пункта, то если я вставляю как растровое изображение, то при распечатке появляется фон, поэтому этот вариант не подходит.
Веских причин отпарвлять метафайл в буфер обмена нет. Дело в том, что "вставка->wmf" да и "специальная вставка->AutoCad Entities" работает, но изображение вставляется не в истинном размере. Смасштабировать его я могу, но мне нужно избежать ручного масштабирования, чтобы сэкономить время на вычисление коэффициента масштаба и собственно самой операции.
k2 (2005-08-16 06:28:00) [14]1)при вставке "специальной вставкой" выберите формат "растровое изображение", тогда сможете управлять масштабом через редактор свойств в том числе;
2)есть какие-то веские причины метафайл отправлять в буфер обмена и проч., если автокад нормально принимает метафайлы через вставка->wmf... ? в итоге получится ссылка на блок опять таки с масштабом;
3)если таки нужно вставлять через "специальную вставку" в формате изображение(метафайл): стандартный редактор свойств никаких данных о вставленном объекте не показывает
после вставки выберите объект,по правой кнопке в контекстном меню выберите "свойства" и установите нужный масштаб(или через olescale в командной строке).
За вставку первыми двумя методами то, што вставляемое изображение можно масштабировать в соответствующих единицах измерения:
средства->формат->единицы.
удачи
<offtopic>а расстраиваться што никто не отвечает не надо,все тоже самое вы могли и в справке прочитать,благо у автокада она хорошая русифицированная,
правда именно этот раздел у меня по-аглицки, но у меня достаточно старенькая</offtopic>
DimMih (2005-08-15 15:14:00) [15]Всё гораздо проще. Я работаю не через OLE. Процедура создаёт MetaFile, потом этот MetaFile я отправляю в буфер обмена, а в AutoCad-е я вставляю "Специальной вставкой"
GLFox (2005-08-15 13:47:00) [16]Если работаешь через OLE и вставляешь при помощи метода Import, то проверь параметр ScaleFactor. Да и после вызова этого метода получаешь ссылку на BlockReference, размеры которого можешь подправить сам.
DimMih (2005-08-15 13:27:00) [17]"Спасибо за помощь....."