Мне кажется что я использую не самый простой способ, но как смог так и сделал ...так и запускается и рисуется... (ток пока не знаю как тип линии и толщину и стиль шрифта...)
Код | //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //---------------------- Процедура рисования линии -------------------------- //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- void line(int x1,int y1,int x2,int y2) { int Bounds[2] = {0,2}; A = VarArrayCreate(Bounds,1, varDouble); B = VarArrayCreate(Bounds,1, varDouble);
A.PutElement(x1,0);//координаты точек A.PutElement(y1,1); A.PutElement(0,2);
B.PutElement(x2,0); B.PutElement(y2,1); B.PutElement(0,2);
AcadBlock.OleFunction("AddLine",A,B); } ... ... ... void blok (int x,int y,int b) { int Bounds[2] = {0,2}; A = VarArrayCreate(Bounds,1, varDouble);
A.PutElement(20,0); A.PutElement(5,1); A.PutElement(0,2);
bbb = ActiveDoc.OleFunction("Import","C:\\formats\\blocks\\block_3.dxf",A,1); block = AcadBlock.OleFunction("InsertBlock",A,"3",1,1,1,0);
A.PutElement(x,0); A.PutElement(y,1); A.PutElement(0,2);
if (b==1)//если надо вставить блок block_1.dxf { bbb = ActiveDoc.OleFunction("Import","C:\\formats\\blocks\\block_1.dxf",A,1); block = AcadBlock.OleFunction("InsertBlock",A,"11",1,1,1,0); } if (b==2)//если надо вставить блок block_2.dxf { bbb = ActiveDoc.OleFunction("Import","C:\\formats\\blocks\\block_2.dxf",A,1); block = AcadBlock.OleFunction("InsertBlock",A,"2",1,1,1,0); }
} ... ... ... //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //------------------ Поиск АвтоКада в дочерних окнах ------------------------ //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- BOOL CALLBACK EnumChildWnd( HWND hwnd, LPARAM lParam) {
char wintext[256];
GetWindowText(hwnd, wintext, 256); hwnd=_hwnd;
zagolovok=wintext; a=zagolovok.LastDelimiter("\\"); zagolovok.Delete(1,a);
_zag();
return TRUE; } //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //------------------- Поиск АвтоКада в главных окнах ------------------------ //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- BOOL CALLBACK EnumWindowsWnd(HWND hwnd, LPARAM lParam) { char wintext[256];
GetWindowText(hwnd, wintext, 256); hwnd=_hwnd;
zagolovok=wintext;
a=zagolovok.LastDelimiter("["); b=zagolovok.LastDelimiter("]");
zagolovok.Delete(b,1); zagolovok.Delete(1,a);
a=zagolovok.LastDelimiter("\\"); if (a!=0)zagolovok.Delete(1,a);
zag();
EnumChildWindows(hwnd, (WNDENUMPROC)&EnumChildWnd,0);
return TRUE; } ... ... ... ShellExecute (NULL,"open",adrfor.c_str(),NULL,NULL,SW_HIDE);//SW_MAXIMIZE); EnumWindows((WNDENUMPROC)&EnumWindowsWnd, 0); ... ... ... AppCad=Variant::GetActiveObject("AutoCad.Application"); ActiveDoc=AppCad.OlePropertyGet("ActiveDocument"); AcadLayouts=ActiveDoc.OlePropertyGet("Layouts");
AcadLayout=AcadLayouts.OleFunction("Item","Лист 1"); //встаём на 1-ый лист ActiveDoc.OlePropertySet("ActiveLayout",AcadLayout); AcadBlock=AcadLayout.OlePropertyGet("Block");
//------- Чертим рамку -----------
//===== пока так ======== но надо ещё толщину линии определить !!!!! line (20,5,20,yy-5); line (20,yy-5,xx-5,yy-5); line (xx-5,yy-5,xx-5,5); line (xx-5,5,20,5); //=======================
blok (xx-5,5,1); if (yy>=287)// 85 + 120 { blok (20,yy-5,4); //**********************************************************************8 } else { blok (20,yy-5,5); }
|
Посмотрите и скажите мне пожалуйста ГДЕ тут я не прав и может знаете КАК лучше сделать.. |