Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 50092.doc
Скачиваний:
17
Добавлен:
30.04.2022
Размер:
4.95 Mб
Скачать

5.3. Построение эскизов

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

#include "stdafx.h"

#include <afxdllx.h>

#include "resource.h"

#include "math.h"

#include <libtool.h>

#include <ldefin2d.h>

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

#define PIE 3.1415926535

class two_d_project

{//Прототип функции, позволяющей строить разметные линии

void LinearSize(double px1,double py1, double px2, double py2,int style, int type,int set,double posx,double posy);

//Прототип функции, позволяющей задать шероховатость поверхностей

void DrawRough(double an,double xpos,double ypos,TCHAR ch[]);

public:

//Построение эскиза

void outline();

}*two_d;

// Специальная структура используемая в течении инициализации DLL

static AFX_EXTENSION_MODULE StepDLL = { NULL, NULL };

// Стандартная точка входа

// Инициализация и завершение DLL

extern "C" int APIENTRY

DllMain( HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved )

{UNREFERENCED_PARAMETER( lpReserved );

if ( dwReason == DLL_PROCESS_ATTACH )

{ TRACE0( "DLL Initializing!" );

if ( !AfxInitExtensionModule( StepDLL, hInstance ) )

return 0;

new CDynLinkLibrary( StepDLL );

}

else if ( dwReason == DLL_PROCESS_DETACH )

{ TRACE0( "DLL Terminating!" );

AfxTermExtensionModule( StepDLL );

}

return 1;

}

// Задать идентификатор ресурсов

unsigned int WINAPI LIBRARYID()

{

return IDR_LIBID;

}

// Получить идентификаторы инструментальных и компактных панелей

int WINAPI LibToolBarId( int barType,

// Тип запрашиваемой панелей (0 - компактная панель, 1 - простая

// инструментальная панель )

int index ) // Индекс панели

{

if ( !barType )

return !index ? COMPACT_BAR1 : -1;

else return -1;

}

// Головная функция библиотеки

void WINAPI LIBRARYENTRY( unsigned int comm )

{

if ( ksGetCurrentDocument( 1 ) ) // Получить активный 2D документ

{

switch ( comm )

{

case 1 : two_d->outline(); break;

}

}

else

Message( "Документ не активизирован или\nне является листом/фрагментом" );

}

//Построение эскиза шпильки

void two_d_project::outline()

{

Mtr( 0, 0, 0, 1 ); // Матрица преобразования координат ( 30 по оси OX, 20 по оси OY, маштаб 1:2 )

//Построение контура втулки

LineSeg (0.0,1.6,1.6,0.0,1);

LineSeg (1.6,0,35,0.0,1);

LineSeg (35.0,0,35.0,7,1);

LineSeg (1.6,7.0,35,7.0,1);

LineSeg (1.6,7.0,0.0,5.4,1);

LineSeg (0.0,1.6,0.0,5.4,1);

// Штриховка квадрата

Hatch( 0,

// Стиль штриховки ( 0 - металл, 1 - неметалл, 2 - дерево, 3 –

// камень естественный, 4 - керамика, 5 - бетон, 6 - стекло, 7 –

// жидкость, 8 - естественный грунт, 9 - насыпной грунт, 10 –

// камень искусственный, 11 - железобетон, 12 - напряженный

// железобетон, 13 - дерево в продольном сечении, 14 - песок )

45, // Угол штриховки

2, // Шаг штриховки

0,

// Ширина полосы штриховки ( 0 - штриховать всю область )

0, 0 ); // Базовая точка

//Контур для штриховки

LineSeg (0.0,1.6,1.6,0.0,1);

LineSeg (1.6,0,35,0.0,1);

LineSeg (35.0,0,35.0,7,1);

LineSeg (1.6,7.0,35,7.0,1);

LineSeg (1.6,7.0,0.0,5.4,1);

LineSeg (0.0,1.6,0.0,5.4,1);

reference rHatch = EndObj();

DeleteMtr();

//Вызов Функций по нанесению линейных размеров

two_d->LinearSize(0,1.6,35,1.6,0,1,0,0,-30);

two_d->LinearSize(33.4,0,33.4,7,1,2,1,20,0);

two_d->LinearSize(0,1.6,1.6,0,0,2,0,0,-10);

//Вызов Функций по указанию заданной шероховатости поверхности

two_d->DrawRough(90,17.5,7,_T("3.2"));

two_d->DrawRough(180,0,-27,_T("3.2"));

two_d->DrawRough(0,35,-20,_T("3.2"));

}

//Функция по нанесению линейных размеров

void two_d_project::LinearSize(double px1,double py1, double px2, double py2,int style, int type,int set,double posx,double posy)

{

// Структура параметров линейного размера

LDimParam parLDim;

memset( &parLDim, 0, sizeof( parLDim ) );

// Параметры изображения размера

// Положение текста ( 0 - автоматическое размещение текста,

// > 0 - на указанное расстояние в направлении от первой точки //ко второй,

// < 0 - на указанное расстояние в направлении от второй точки к //первой )

parLDim.dPar.textPos = 0;

// Параметр отрисовки текста ( 0 - в центре, 1 - textPos //относительно 1 точки,

// 2 - textPos относительно 2 точки, 3 - общая размерная линия )

parLDim.dPar.textBase = 0;

// Признак отрисовки первой выносной линии ( 0 - включена, 1 –

// выключена )

parLDim.dPar.pl1 = 0;

// Признак отрисовки второй выносной линии ( 0 - включена, 1 -

// выключена )

parLDim.dPar.pl2 = 0;

// Тип стрелки у первой выносной линии ( 0 - стрелки нет, 1 –

// внутри, 2 - снаружи, 3 - засечка, 4 - точка )

parLDim.dPar.pt1 = type;

// Тип стрелки у второй выносной линии ( 0 - стрелки нет, 1 –

// внутри, 2 - снаружи, 3 - засечка, 4 - точка )

parLDim.dPar.pt2 = type;

// Наличие выносной полки ( 0 - нет выносной полки, -1 - полка

// направлена влево,

// 1 - полка направлена вправо, 2 - полка направлена вверх, 3 –

// полка направлена вниз )

parLDim.dPar.shelfDir = 0;

// Угол наклона ножки выносной полки

parLDim.dPar.ang = 0;

// Длина ножки выносной полки

parLDim.dPar.length = 0;

// Параметры размерной надписи

// Cтиль текста размера, ( 0 - стиль по умолчанию )

parLDim.tPar.style = 0;

// Номер условного значка перед номиналом ( 0 - нет значка, 1 –

// диаметр, 2 - квадрат,

// 3 - радиус, > 3 - номер значка из шрифта Symbol type A )

parLDim.tPar.sign = style;

// Признаки размерной надписи ( набор битовых полей, 0 - ручное

// задание )

// Должны быть строки PREFIX, номинал ставится auto ( ставить не

// нужно ), TOLERANCE, отклонения

// ставятся auto ( ставить не нужно ), UNIT, SUFFIX ( 4 строки )

parLDim.tPar.bitFlag = _AUTONOMINAL ;

//parLDim.tPar.bitFlag = _AUTONOMINAL|_UNIT;

parLDim.tPar.pText = CreateArray( CHAR_STR_ARR, 0 );

// Динамический массив строк

// Привязка линейного размера

// Признак ориентации размерной линии ( 0 - горизонтально, 1 –

// вертикально,

// 2 - параллельно отрезку, соединяющему точки привязки, 3 – по

// dx, dy,

// 4 - параллельно отрезку с выносными линиями по dx, dy.

parLDim.sPar.ps = set;

// Координаты первой точки привязки

parLDim.sPar.x1 = px1;

parLDim.sPar.y1 = py1;

// Координаты второй точки привязки

parLDim.sPar.x2 = px2;

parLDim.sPar.y2 = py2;

// Вектор, определяющий положение размерной линии

parLDim.sPar.dy = posy;

parLDim.sPar.dx = posx;

// Признак, указывающий, от какой точки откладывать dx, dy

// ( 1 - от первой точки, 2 - от второй точки )

parLDim.sPar.basePoint = 1;

// Создание линейного размера

reference rLinDimension = LinDimension( &parLDim );

GetObjParam( rLinDimension, // Указатель на граф. объект

&parLDim, // Указатель на структуру параметров

sizeof( parLDim ), // Размер структуры параметров

ALLPARAM ); // Тип считывания параметров

}//Функция по указанию заданной шероховатости поверхности

void two_d_project::DrawRough(double an,double xpos,double ypos,TCHAR ch[])

{// Структура параметров обозначения шероховатости с полкой

RoughParam parRougham;

memset( &parRougham, 0, sizeof( parRougham ) );

// Параметры выносной полки

// Направление полки параллельно оси X ( 0 - нет выносной полки,

// -1 - полка направлена влево, 1 - полка направлена вправо,

// 2 - полка направлена вверх, 3 - полка направлена вниз )

parRougham.shPar.psh = 0;

// Угол наклона размерной линии

parRougham.shPar.ang = 130;

// Длина ножки

parRougham.shPar.length = 20;

// Параметры знака шероховатости

// Тип шероховатости ( 0 - вид обработки не устанавливается,

// 1 - обработка удалением слоя материала,

// 2 - обработка без удаления слоя материала )

parRougham.rPar.type = 0;

// 1 - шероховатость по контуру

parRougham.rPar.around = 0;

// Координаты точки привязкиопараметры первого отрезка

parRougham.rPar.x = xpos;

parRougham.rPar.y = ypos;

// Угол наклона оси значка шероховатости с осью X

parRougham.rPar.ang = an;

// Количество строк в тексте над знаком ( параметры шер-ти по

// ГОСТ 2789-73 )

parRougham.rPar.cText0 = 0;

// Количество строк в тексте над полкой ( вид обработки и

// дополнительные указания )

parRougham.rPar.cText1 = 1;

// Количество строк в тексте под полкой ( базовая длина по ГОСТ

// 2789-73 )

parRougham.rPar.cText2 = 0;

// Количество строк в тексте под полкой ( условное обозначение

// направления неровностей )

// ( не более одной строки )

parRougham.rPar.cText3 = 0;

// Режим, когда тексты задаются массивом модельных строк текста

// Стиль текста ( 0 - то стиль умолчательный,

// INDICATIN_TEXT_LINE_ARR - массив TEXT_LINE_ARR )

parRougham.rPar.style = INDICATIN_TEXT_LINE_ARR;

// Структура параметров строки текста

TextLineParam parTextLine;

// Номер стиля строки текста

parTextLine.style = 0;

// Массив неопределенной длины компонент строки текста

parTextLine.pTextItem = CreateArray( TEXT_ITEM_ARR, 0 );

// Структура параметров шрифта компоненты строки текста

TextItemFontT parItemFont;

memset( &parItemFont, 0, sizeof( parItemFont ) );

// Структура параметров компоненты строки текста

TextItemParamT parTextItem;

// SPECIAL_SYMBOL, FONT_SYMBOL, FRACTION_TYPE, SUM_TYPE или 0

parTextItem.tip = 0;

// Параметры шрифта компоненты строки текста

parTextItem.font = parItemFont;

// Номер спецсимвола, символа из произвольного фонта или тип

// отрисовки дроби или выражения типа суммы или 0

parTextItem.iSNumb = 0;

// Массив неопределенной длины строк текста шероховатости

// Различают 4 разных текста для шероховатости ( строки лежат в

// следующей последовательности )

// 1. текст над знаком ( параметры шер-ти по ГОСТ 2789-73 )

// 2. текст над полкой ( вид обр-ки и доп, указания )

// 3. текст под полкой ( базовая длина по ГОСТ 2789-73 )

// 4. текст под полкой ( усл.обозн.направления неровностей )

// Если cText0 = 0 или cText1 = 0 или cText2 = 0 или cText3 = 0,

// то соответствующий текст в обозначении шероховатости

// отсутствует

parRougham.rPar.pText = CreateArray( TEXT_LINE_ARR, 0 );

// Режим, когда тексты задаются массивом строк символов

// Стиль текста ( 0 - то стиль умолчательный, INDICATIN_TEXT_LINE_ARR - массив TEXT_LINE_ARR )

parRougham.rPar.style = 0;

// Массив неопределенной длины строк текста шероховатости

// Различают 4 разных текста для шероховатости ( строки лежат в

// следующей последовательности )

// 1. текст над знаком ( параметры шер-ти по ГОСТ 2789-73 )

// 2. текст над полкой ( вид обр-ки и доп, указания )

// 3. текст под полкой ( базовая длина по ГОСТ 2789-73 )

// 4. текст под полкой ( усл.обозн.направления неровностей )

// Если cText0 = 0 или cText1 = 0 или cText2 = 0 или cText3 = 0,

// то соответствующий текст в обозначении шероховатости

// отсутствует

parRougham.rPar.pText = CreateArray( CHAR_STR_ARR_T, 0 );

// Заполнение массива строк текста шероховатости

AddArrayItem( parRougham.rPar.pText, -1, ch, 4 );

// Создание шероховатости

reference rRough = Rough( &parRougham );

// Режим, когда тексты задаются массивом строк символов

// Удалить динамический массив строк текста

DeleteArray( parRougham.rPar.pText );

}

Результат работы прикладной библиотеки показан на рисунке 30.

Рис. 30. Построение эскиза шпильки