⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 visdrawdoc.cpp

📁 参数化车间设备资源绘制程序
💻 CPP
字号:
// VisDrawDoc.cpp :  CVisDrawDoc 类的实现
//

#include "stdafx.h"
#include "VisDraw.h"

#include "VisDrawDoc.h"
#include "VisDrawView.h"
#include "RightView.h"
#include "figureobj.h"

#include "DistancePage.h"
#include "ShebeiDlg.h"
#include "yunxingDlg.h"
#include "gongshiDlg.h"
#include "PropertySheetWithLogoDlg.h"
#include ".\visdrawdoc.h"
#include "techcourse.h"
//#include "Dlgbar.h"
//#include "OLEContainItem.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CVisDrawDoc

IMPLEMENT_DYNCREATE(CVisDrawDoc, CDocument)

BEGIN_MESSAGE_MAP(CVisDrawDoc, CDocument)
	ON_COMMAND(ID_FILE_SEND_MAIL, OnFileSendMail)
	ON_UPDATE_COMMAND_UI(ID_FILE_SEND_MAIL, OnUpdateFileSendMail)
	ON_COMMAND(ID_VIEW_JUDGEDISTANCE, OnViewJudgedistance)
	ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE, OnUpdateEditPaste)
	ON_UPDATE_COMMAND_UI(ID_EDIT_CUT, OnUpdateEditCut)
	ON_LBN_SELCHANGE(IDC_LIST2, &CVisDrawDoc::OnLbnSelchangeList2)
	ON_COMMAND(ID_BACK_COLOR, &CVisDrawDoc::OnBackColor)
END_MESSAGE_MAP()


// CVisDrawDoc 构造/析构

CVisDrawDoc::CVisDrawDoc()
{
	//EnableCompoundFile();

	// TODO: 在此添加一次性构造代码
	//设定文档大小
	m_size.SetSize(1970,2880);
    m_paperColor=RGB(255,255,255);  //设定文档背景颜色
	//设定映射模式
	m_GridDistance = 100;
	m_SelectDistance = 6;
m_nMapMode = MM_TEXT;
   //m_nMapMode=MM_TEXT;   //设定映射模式
// ComputePageSize();   //设定文档大小
   m_string_techview= "";
   m_string_rightview="kjkj";
   m_strLanguage=_T("在X(数量)个工位上,Y(加工方法),Z(加工特征),保持Q(加工要求),P(加工尺寸和精度)");
}

CVisDrawDoc::~CVisDrawDoc()
{
	POSITION pos=m_objects.GetHeadPosition();
	while(pos !=NULL)
		delete m_objects.GetNext(pos);
}

BOOL CVisDrawDoc::OnNewDocument()
{
	if (!CDocument::OnNewDocument())
		return FALSE;

	// TODO: 在此添加重新初始化代码
	// (SDI 文档将重用该文档)

	return TRUE;
}




// CVisDrawDoc 序列化

void CVisDrawDoc::Serialize(CArchive& ar)
{
	if (ar.IsStoring())     //保存数据
	{
		// TODO: 在此添加存储代码
		ar<<m_paperColor;        //保存文档成员变量
		m_objects.Serialize(ar);  //保存图元对象
		//ar<<m_Dlgbar->m_EditStrGB;
		ar<<m_strLanguage;
	}
	else                          //读数据
	{
		// TODO: 在此添加加载代码
		ar>>m_paperColor;        //读文档成员变量
	   m_objects.Serialize(ar);  //读图元对象
	  // 	ar>>m_Dlgbar.m_EditStrGB;
	   ar>>m_strLanguage;
	}
	//m_VisDrawObList.Serialize(ar);
}


// CVisDrawDoc 诊断

#ifdef _DEBUG
void CVisDrawDoc::AssertValid() const
{
	CDocument::AssertValid();
}

void CVisDrawDoc::Dump(CDumpContext& dc) const
{
	CDocument::Dump(dc);
}
#endif //_DEBUG


// CVisDrawDoc 命令
void CVisDrawDoc::Draw(CDC* pDC, CVisDrawView* pView)
{
	POSITION pos = m_objects.GetHeadPosition();
	POSITION pos1= m_obj.GetHeadPosition();
	while (pos != NULL)
	{
		CFigureObj* pObj = m_objects.GetNext(pos);
		pObj->Draw(pView, pDC);
		if (pView->IsSelected(pObj))
			pObj->DrawTracker(pView, pDC, CFigureObj::selected);
	}
	while (pos1 != NULL)
	{
		CTextObj* pObj1 = m_obj.GetNext(pos);
		pObj1->Draw(pView, pDC);
		//if (pView->IsSelected(pObj))
			//pObj->DrawTracker(pView, pDC, CFigureObj::selected);
	}

	/*DrawDibRealize(m_hDD,pDC->GetSafeHdc(),TRUE);
	DrawDibDraw(m_hDD,pDC->GetSafeHdc(),0,0,m_pBMIH->biWidth,m_pBMIH->biHeight,
		m_pBMIH,NULL,0,0,m_pBMIH->biWidth,m_pBMIH->biHeight,DDF_BACKGROUNDPAL);*/

}

void CVisDrawDoc::Add(CFigureObj* pObj)
{
	m_objects.AddTail(pObj);
	pObj->m_pDocument = this;
	SetModifiedFlag();
}
void CVisDrawDoc::Addtext(CTextObj* pObj)
{
	m_obj.AddTail(pObj);
		pObj->m_pDocument=this;
    SetModifiedFlag();

}

void CVisDrawDoc::Remove(CFigureObj* pObj)
{
	// Find and remove from document
	POSITION pos = m_objects.Find(pObj);
	if (pos != NULL)
		m_objects.RemoveAt(pos);
	// set document modified flag
	SetModifiedFlag();

	// call remove for each view so that the view can remove from m_selection
//	pos = GetFirstViewPosition();
//	while (pos != NULL)
//		((CVisDrawView*)GetNextView(pos))->Remove(pObj);
}


void CVisDrawDoc::Removetext(CTextObj* ptObj)
{
	// Find and remove from document
	POSITION pos = m_obj.Find(ptObj);
	if (pos != NULL)
		m_obj.RemoveAt(pos);
	// set document modified flag
	SetModifiedFlag();
}



void CVisDrawDoc::ComputePageSize()
{
	CSize new_size(850, 1100);  // 8.5" x 11" default

	CPrintDialog dlg(FALSE);
	if (AfxGetApp()->GetPrinterDeviceDefaults(&dlg.m_pd))
	{
		// GetPrinterDC returns a HDC so attach it
		CDC dc;
		HDC hDC= dlg.CreatePrinterDC();
		ASSERT(hDC != NULL);
		dc.Attach(hDC);

		// Get the size of the page in loenglish
		new_size.cx = MulDiv(dc.GetDeviceCaps(HORZSIZE), 1000, 254);
		new_size.cy = MulDiv(dc.GetDeviceCaps(VERTSIZE), 1000, 254);
	}

	// if size changed then iterate over views and reset
/*	if (new_size != m_size)
	{
		m_size = new_size;
		POSITION pos = GetFirstViewPosition();
		while (pos != NULL)
			((CVisDrawView*)GetNextView(pos))->SetPageSize(m_size);
	}*/
}

// point 为逻辑坐标
CFigureObj* CVisDrawDoc::ObjectAt(CVisDrawView* pView,const CPoint& point)
{
	//拾取矩形
	CRect rect(point, CSize(1, 1));

	//遍历对象指针链表
	POSITION pos = m_objects.GetTailPosition();
	while (pos != NULL)
	{
		CFigureObj* pObj = m_objects.GetPrev(pos);

		//如果鼠标落在图元对象边界矩形内
		if (pObj->Intersects(pView, rect))

			//判断图元是否被拾取
			if(pObj->IsSelected(pView, point)) return pObj;
	}

	return NULL;
}
CTextObj* CVisDrawDoc::ObjAt(CVisDrawView* pView,const CPoint& point)
{
	//拾取矩形
	CRect rect(point, CSize(1, 1));

	//遍历对象指针链表
	POSITION pos = m_obj.GetTailPosition();
	while (pos != NULL)
	{
		CTextObj* pObj = m_obj.GetPrev(pos);

		//如果鼠标落在图元对象边界矩形内
		if (pObj->Intersects(pView, rect))

			//判断图元是否被拾取
			if(pObj->IsSelected(pView, point)) return pObj;
	}

	return NULL;

}




void CVisDrawDoc::OnViewJudgedistance()
{
	// TODO: 在此添加命令处理程序代码
	CPropertySheetWithLogoDlg dlg("识别精度");

	CDistancePage  FirstPage;
	dlg.SetLogoText("VisDraw");
	dlg.AddPage(&FirstPage);

	FirstPage.m_Distance = m_SelectDistance;

	int nResponse = (int)dlg.DoModal();
if (nResponse == IDOK)
	{
		m_SelectDistance = FirstPage.m_Distance;

		UpdateAllViews(NULL);

	}
	else if (nResponse == IDCANCEL)
	{
		
		return;
	}
}

void CVisDrawDoc::OnUpdateEditPaste(CCmdUI *pCmdUI)
{
	// TODO: 在此添加命令更新用户界面处理程序代码
	//pCmdUI->Enable(::IsClipboardFormatAvailable());
}

void CVisDrawDoc::OnUpdateEditCut(CCmdUI *pCmdUI)
{
	// TODO: 在此添加命令更新用户界面处理程序代码
	//pCmdUI->Enable(!m_selection.IsEmpty());
}

//BOOL CVisDrawDoc::OnOpenDocument(LPCTSTR lpszPathName)
//{
//	if (!CDocument::OnOpenDocument(lpszPathName))
//		return FALSE;
//
//	// TODO:  在此添加您专用的创建代码
//	/*CFile f;
//    CFileException e;
//	TCHAR message[256];
//	if(!f.Open(lpszPathName,CFile::modeRead,&e))
//	{
//		e.GetErrorMessage(message,256);
//		AfxMessageBox(message);
//		return FALSE;
//	}
//	SizeOfFile=(UINT)(f.GetLength());
//	pFileData=new char[SizeOfFile];
//	if(!pFileData)
//	{
//		f.Close();
//		AfxMessageBox("无法分配足够内存");
//    return FALSE;
//	}
//	f.Read(pFileData,SizeOfFile);
//	f.Close();
//
//	m_pBMFH=(BITMAPFILEHEADER*)pFileData;
//	if((pFileData[0] !='V')||(pFileData[1] !='D'))
//	{
//    AfxMessageBox("无法识别格式");
//    return FALSE;
//	}
//	 m_pBMIH=(BITMAPINFOHEADER*)(pFileData+sizeof(BITMAPFILEHEADER));
//	 if(m_pBMIH->biSize !=sizeof(BITMAPINFOHEADER))
//	 {
//		 AfxMessageBox("无法识别格式");
//        return FALSE;
//      
//	 }
//	 m_hDD = DrawDibOpen();
//	 open_doc =TRUE;*/
//
//
//	return TRUE;
//}

//void CVisDrawDoc::OnCloseDocument()
//{
//	// TODO: 在此添加专用代码和/或调用基类
//	/*if(m_hDD)
//	{
//DrawDibClose(m_hDD);
//m_hDD=0;
//	}
//	if(pFileData)
//	{
//		delete[] pFileData;
//		pFileData = NULL;
//	}*/
//
//	CDocument::OnCloseDocument();
//}

//CSize CVisDrawDoc::GetImageSize(void)
//{
//	return CSize(m_pBMIH->biWidth,m_pBMIH->biHeight);
//}

bool CVisDrawDoc::GetStringFromRightView(CString m_string1)
{
if((m_string_stream=m_string1)!="")
    return 1;
	return 0;
}

bool CVisDrawDoc::SetStringToTechView(CString m_string2)
{
	//CTechCourse* m_techCourse;
	m_string_techview=m_string2;
	//IAtlStringMgr* pMgr;
//	 CString str;
//LPTSTR p = str.GetBuffer( 10 );


	//if(m_string_techview)
	//	str.CopyChars(str.GetBuffer(),m_string_techview,20);
	m_string_rightview=m_string_techview;
	//if(m_string_rightview != "")
	//	m_techCourse->GetRightViewString();
   
   /* char* pszSrc= NULL;
    pszSrc= new char(12);
    if(pszSrc)
        pszSrc= "Hello world!";
    printf_s("%s\n", str);

    str.CopyChars(str.GetBuffer(), pszSrc, 12);
    printf_s("%s\n", str);*/





	UpdateAllViews(NULL);
	return 1;
}

void CVisDrawDoc::GetStringRightview(CString m_string3)
{
	m_string3=m_string_rightview;

//	CRightView* Rightview;
//	//if(Rightview->m_gongxu !="")
//	m_string_rightview=Rightview->m_gongxu;
//	//UpdateAllViews(NULL);
//
}

void CVisDrawDoc::OnLbnSelchangeList2()
{
	// TODO: 在此添加控件通知处理程序代码

}

void CVisDrawDoc::OnBackColor()
{
	// TODO: 在此添加命令处理程序代码
	//CVisDrawDoc* pDoc = GetDocument();

		//CPaintDC dc;
		CColorDialog clrDlg;

		if(clrDlg.DoModal()==IDOK)
		{
			m_paperColor=clrDlg.GetColor();
		//	dc.d(m_cuurentColor);
			//SetModifiedFlag();
			SetModifiedFlag();
	UpdateAllViews(NULL);
		}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -