Files
envi-code/SourceCode/Code2026/Dimension/SymbDialog.cpp
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

8044 lines
207 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include "stdafx.h"
#include <fstream>
#include "AcDbObjectPtr.h"
#include "ADSGePointDir2d.h"
#include "PushMemVar.h"
#include "SymbDialog.h"
#include "SymbolStringList.h"
#include "globalFunc.h"
#include "PickEntSet.h"
#include "AecDbText.h"
#include "AecDbSymbCoord.h"
#include "AecDbSymbElevation.h"
#include "AecDbSymbDrawingIndex.h"
#include "AecDbDrawingName.h"
#include "AecDbSymbIndexPointer.h"
#include "AecDbSymbComposing.h"
#include "EntityEdJig.h"
#include "AecDbMText.h"
CString GetTextStyleName(TTextStyle ts);
double GetTextHeightByTs(TTextStyle ts);
AcDbObjectId InitTextStyle(const TCHAR *pszStyle, AcDbDatabase *pDb = NULL);
namespace
{
double CalcMTextLen(const CString &sText, const AcDbObjectId &styleId, double dHei, double dWid, int iWider)
{
if (sText.IsEmpty())
return 0.0;
AecXDbMText text;
text.SetHeight(dHei);
text.SetStyleId(styleId);
text.SetPageWidth(dWid);
text.SetText(sText);
text.SetAlignment(AcGiDraw::kLeft);
text.SetLocation(XPoint());
XPoint ptMin, ptMax;
text.GetExtents2d(ptMin, ptMax);
double dLen = (ptMax.x - ptMin.x);
CString sOneWider = _T("1"); // 测试一个字符的宽度
text.SetText(sOneWider);
text.GetExtents2d(ptMin, ptMax);
double dOneLen = (ptMax.x - ptMin.x);
XPoint ext = text.GetExtents();
return dLen + iWider * dOneLen;
}
void AddCutLineForIndexPointer(AecXDbSymbIndexPointer *pText)
{
ASSERT(pText != NULL);
ASSERT(!pText->IsIndexPointer());
AecXDbSymbIndexPointer *pEntClone = (AecXDbSymbIndexPointer *)pText->clone();
if (pText->upgradeOpen() == Acad::eOk)
{
pText->setVisibility(AcDb::kInvisible);
pText->downgradeOpen();
acedGetAcadDwgView()->Invalidate();
acedGetAcadDwgView()->UpdateWindow();
}
IndexPointerEdJig jig(pEntClone);
jig.SetKeyword(_T("`")); // 对话框中取字高、词
jig.InitCutLine();
jig.SetPrompt(_T("\n请给出其它剖切线位置<退出>: "));
jig.SetOperCode(IndexPointerEdJig::kMoreCuts);
BOOL bAdd = FALSE;
while (1)
{
int nRet = jig.DoIt();
if (nRet == RTNORM)
{// 继续添加剖切线
continue;
}
else if (nRet == RTCAN)
{ // 退出
break;
}
else
{ // 结束添加剖切线,
bAdd = TRUE;
break;
}
}
if (pText->upgradeOpen() == Acad::eOk)
{
if (bAdd)
{
CArray<XLine, XLine &> arCutLine;
pEntClone->GetCutLineAll(arCutLine);
arCutLine.RemoveAt(0);
pText->SetCutLine(arCutLine);
}
delete pEntClone;
pEntClone = NULL;
pText->setVisibility(AcDb::kVisible);
pText->downgradeOpen();
}
}
}
#pragma region CModelessDialog
#define INIT_MONITOR_PT 100
#define MONITOR_PT 101
#define MOVE_WAITER 102
#define AUTOFOCUS_TIMER 103
#define MODELESSDIALOG_EVENT_TIME 30
//extern const TCHAR * GetRegLocation();
int g_nInitAutoHideTime = 2000;
int g_nAutoHideTime = 100;
int g_nAnimateStepNum = 12;
/////////////////////////////////////////////////////////////////////////////
// CModelessDialog dialog
IMPLEMENT_DYNAMIC(CModelessDialog, CAcUiDialog)
CModelessDialog::CModelessDialog(UINT nIDTemplate, CWnd* pParent /*=NULL*/)
: CAcUiDialog(nIDTemplate, pParent), m_bModeless(TRUE), m_bAllowAutoHide(TRUE)
{
m_bChangeDocSwitch = FALSE;
m_bHide = FALSE;
m_bAutoHide = FALSE;
m_pMemDC = NULL;
m_pWndDC = NULL;
m_pBitmap = NULL;
m_nStepNum = 0;
m_nYStep = 0;
m_nCurStep = 0;
m_clrDraw = RGB(127, 127, 127);
}
BEGIN_MESSAGE_MAP(CModelessDialog, CAcUiDialog)
ON_WM_DESTROY()
ON_WM_CREATE()
ON_WM_CLOSE()
ON_MESSAGE(WM_ACAD_KEEPFOCUS, onAcadKeepFocus)
ON_WM_TIMER()
ON_WM_MOUSEMOVE()
ON_WM_NCLBUTTONDOWN()
ON_WM_CTLCOLOR()
ON_WM_NCPAINT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOL CModelessDialog::OnInitDialog()
{
CAcUiDialog::OnInitDialog();
m_wndToolTip.Create(this);
m_wndToolTip.Activate(true);
m_wndToolTip.SetMaxTipWidth(250);
m_wndToolTip.SetDelayTime(TTDT_AUTOPOP, 4 * m_wndToolTip.GetDelayTime(TTDT_AUTOPOP));
m_bThickFrame = (GetStyle() & WS_THICKFRAME) != 0;
ModifyStyle(WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX, 0, 0);
if (m_bModeless)
{
int x = 0, y = 0;
if (ReadReg(x, y))
{
CRect SubRect;
GetWindowRect(&SubRect);
MoveWindow(x, y, SubRect.Width(), SubRect.Height());
}
if (m_bAllowAutoHide)
{
}
#if ARX==15
if (g_Option::instance().g_bAutoFocus)
SetTimer(AUTOFOCUS_TIMER, 100, NULL);
#endif
}
else
{
ModifyStyle(WS_MINIMIZEBOX, 0);
CenterWindow();
}
return TRUE;
}
BOOL CModelessDialog::ReadReg(int &x, int &y)
{
//CRuntimeClass *pClassInfo = GetRuntimeClass();
//const char *pClassName = pClassInfo->m_lpszClassName;
//XString sRegLoc(512);
//sRegLoc << GetRegLocation() << _T("\\DialogPosition");
//CRegProperty regProp(sRegLoc, TString(pClassName));
//regProp.SetTopRootKey(HKEY_CURRENT_USER);
//if (!regProp.GetValue(_T("x"), x)) return FALSE;
//if (!regProp.GetValue(_T("y"), y)) return FALSE;
//if (!regProp.GetValue(_T("AutoHide"), m_bAutoHide)) return FALSE;
return TRUE;
}
void CModelessDialog::WriteReg(int x, int y)
{
//CRuntimeClass *pClassInfo = GetRuntimeClass();
//const char *pClassName = pClassInfo->m_lpszClassName;
//XString sRegLoc(512);
//sRegLoc << GetRegLocation() << _T("\\DialogPosition");
//CRegProperty regProp(sRegLoc, TString(pClassName));
//regProp.SetTopRootKey(HKEY_CURRENT_USER);
//regProp.SetValue(_T("x"), x);
//regProp.SetValue(_T("y"), y);
//regProp.SetValue(_T("AutoHide"), m_bAutoHide);
}
void CModelessDialog::OnDestroy()
{
if (m_bModeless) {
if (!IsIconic()) {
CRect rect;
GetWindowRect(&rect);
WriteReg(rect.TopLeft().x, rect.TopLeft().y);
}
}
/*
if(m_TimerID) {
KillTimer(m_TimerID);
}*/
CAcUiDialog::OnDestroy();
m_wndToolTip.DestroyWindow();
if (m_pMemDC != NULL)
{
delete m_pMemDC;
m_pMemDC = NULL;
}
if (m_pWndDC != NULL)
{
delete m_pWndDC;
m_pWndDC = NULL;
}
if (m_pBitmap != NULL)
{
delete m_pBitmap;
m_pBitmap = NULL;
}
if (m_bModeless && m_bChangeDocSwitch)
{
acDocManager->enableDocumentActivation();
m_bChangeDocSwitch = FALSE;
}
}
int CModelessDialog::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CAcUiDialog::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
#if (ARX>14)
if (m_bModeless && acDocManager->isDocumentActivationEnabled() &&
acDocManager->disableDocumentActivation() == Acad::eOk) {
m_bChangeDocSwitch = TRUE;
}
#endif
return 0;
}
void CModelessDialog::OnClose()
{
if (m_bModeless) {
//DestroyWindow();
CRect rect;
GetWindowRect(&rect);
WriteReg(rect.TopLeft().x, rect.TopLeft().y);
/*
if(m_bChangeDocSwitch) {
acDocManager->enableDocumentActivation();
m_bChangeDocSwitch=FALSE;
}*/
}
CAcUiDialog::OnClose();
}
LONG_PTR CModelessDialog::onAcadKeepFocus(UINT_PTR, LONG_PTR)
{
if (g_Option::instance().g_bAutoFocus)
{
POINT pt;
::GetCursorPos(&pt);
CRect rect;
GetWindowRect(&rect);
if (!(rect.PtInRect(pt)))
{
return FALSE;
}
else
return TRUE;
}
return TRUE;
}
void CModelessDialog::AnimateMoveWindow(int step)
{
CRect rectWindow;
GetWindowRect(rectWindow);
if (!m_bHide)//将要最小化
{
CRect rectClient;
GetClientRect(rectClient);
ClientToScreen(rectClient);
m_nCapHeight = rectClient.top - rectWindow.top;
m_nBorderHeight = rectWindow.bottom - rectClient.bottom;
m_nMaxHeight = rectWindow.Height();
m_nYStep = -rectClient.Height() / step;
}
else
{
if (step != 0)
m_nYStep = (m_nMaxHeight - m_nCapHeight - m_nBorderHeight) / step;
else
m_nYStep = 0;
}
if ((GetStyle() & WS_CHILD) != 0 && GetParent() != NULL)
GetParent()->ScreenToClient(rectWindow);
m_nStepNum = step;
if (m_nYStep > 0)
m_nCurStep = m_nStepNum;
else
m_nCurStep = 0;
if (m_nYStep != 0)
{
if (m_nYStep < 0)
{
m_pWndDC = new CWindowDC(this);
m_pMemDC = new CDC;
m_pMemDC->CreateCompatibleDC(m_pWndDC);
m_pBitmap = new CBitmap;
m_pBitmap->CreateCompatibleBitmap(m_pWndDC, rectWindow.Width(), rectWindow.Height());
m_pMemDC->SelectObject(m_pBitmap);
::SendMessage(GetSafeHwnd(), WM_PRINT, (WPARAM)m_pMemDC->m_hDC, (LPARAM)(PRF_CHILDREN | PRF_CLIENT | PRF_NONCLIENT | PRF_ERASEBKGND));
}
if (m_bThickFrame)
ModifyStyle(WS_THICKFRAME, 0, 0);
SetTimer(MOVE_WAITER, 1, NULL);//启动动画
}
else//直接移动
{
if (!m_bHide)//将要最小化
rectWindow.bottom = rectWindow.top + m_nCapHeight + m_nBorderHeight;
else
rectWindow.bottom = rectWindow.top + m_nMaxHeight;
if (m_bThickFrame)
ModifyStyle(WS_THICKFRAME, 0, 0);
MoveWindow(rectWindow);
if (m_bThickFrame)
ModifyStyle(0, WS_THICKFRAME, 0);
m_nStepNum = 0;
m_nCurStep = 0;
}
}
void CModelessDialog::MaxShow()
{
KillTimer(MOVE_WAITER);
CRect rect;
GetWindowRect(rect);
rect.bottom = rect.top + m_nMaxHeight;
if ((GetStyle() & WS_CHILD) != 0 && GetParent() != NULL)
GetParent()->ScreenToClient(rect);
MoveWindow(rect, TRUE);
if (m_pMemDC != NULL)
{
delete m_pMemDC;
m_pMemDC = NULL;
}
if (m_pWndDC != NULL)
{
delete m_pWndDC;
m_pWndDC = NULL;
}
if (m_pBitmap != NULL)
{
delete m_pBitmap;
m_pBitmap = NULL;
}
m_nStepNum = 0;
m_nCurStep = 0;
m_nYStep = 0;
m_bHide = FALSE;//进入最大状态
if (m_bThickFrame)
ModifyStyle(0, WS_THICKFRAME, 0);
RedrawWindow(NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE | RDW_UPDATENOW | RDW_ALLCHILDREN);
}
void CModelessDialog::OnTimer(UINT_PTR nIDEvent)
{
if (m_bAutoHide)
{
if (nIDEvent == INIT_MONITOR_PT)
{
KillTimer(INIT_MONITOR_PT);
SetTimer(MONITOR_PT, g_nAutoHideTime / 2, NULL);
}
else if (nIDEvent == MONITOR_PT)//check if mouse is still in hItem rect
{
POINT pt;
::GetCursorPos(&pt);
CRect rect;
GetWindowRect(&rect);
BOOL bPtIn = rect.PtInRect(pt);
if (m_nStepNum > 0)//正在缩放过程中
{
if ((bPtIn && m_nYStep < 0) ||//正在缩小,但点返回窗口
(!bPtIn && m_nYStep > 0))//正在放大,但点移出窗口
m_nYStep *= -1;//反向
}
else if (bPtIn == m_bHide)//当前没有在缩放过程中,并且动作事件发生
{
if (!bPtIn)
{
CWnd* pWnd = GetFocus();
if (pWnd == this || (pWnd != NULL && IsChild(pWnd)))//下拉列表
return;
}
static bool bWait = false;
if (bWait)//正在等待缩放,启动
{
bWait = false;//取消等待缩放状态
AnimateMoveWindow(g_nAnimateStepNum);
}
else
bWait = true;//进入等待缩放状态
}
}
else if (nIDEvent == MOVE_WAITER && m_nStepNum > 0)
{
if (m_nYStep < 0)//正在minimize
{
if (m_nCurStep < m_nStepNum)//动画继续
{
m_nCurStep++;
CRect rectWindow;
GetWindowRect(rectWindow);
if ((GetStyle() & WS_CHILD) != 0 && GetParent() != NULL)
GetParent()->ScreenToClient(rectWindow);
rectWindow.bottom += m_nYStep;
MoveWindow(rectWindow, TRUE);
m_pWndDC->BitBlt(0, m_nCapHeight, rectWindow.Width(), rectWindow.Height() - m_nCapHeight
, m_pMemDC, 0, m_nCapHeight + m_nMaxHeight - rectWindow.Height(), SRCCOPY);
CRect rect;
GetClientRect(rect);
ValidateRect(rect);
}
else//minimize over
{
KillTimer(MOVE_WAITER);
CRect rect;
GetWindowRect(rect);
rect.bottom = rect.top + m_nCapHeight + m_nBorderHeight;
if ((GetStyle() & WS_CHILD) != 0 && GetParent() != NULL)
GetParent()->ScreenToClient(rect);
MoveWindow(rect);
if (m_bThickFrame)
ModifyStyle(0, WS_THICKFRAME, 0);
m_nStepNum = 0;
m_nCurStep = 0;
m_bHide = TRUE;//进入最小状态
}
}
else if (m_nYStep > 0)//正在maximize
{
if (m_nCurStep > 0)//动画继续
{
m_nCurStep--;
CRect rectWindow;
GetWindowRect(rectWindow);
if ((GetStyle() & WS_CHILD) != 0 && GetParent() != NULL)
GetParent()->ScreenToClient(rectWindow);
rectWindow.bottom += m_nYStep;
MoveWindow(rectWindow, FALSE);
m_pWndDC->BitBlt(0, m_nCapHeight, rectWindow.Width(), rectWindow.Height() - m_nCapHeight
, m_pMemDC, 0, m_nMaxHeight - rectWindow.Height() + m_nCapHeight, SRCCOPY);
CRect rect;
GetClientRect(rect);
ValidateRect(rect);
}
else//Maximize over
MaxShow();
}
}
}
else
CAcUiDialog::OnTimer(nIDEvent);
}
void CModelessDialog::LockAutoHide()
{
if (m_bAutoHide)
{
m_bAutoHide = FALSE;
KillTimer(MONITOR_PT);
MSG msg;
while (::PeekMessage(&msg, m_hWnd, WM_TIMER, WM_TIMER, PM_REMOVE));
}
}
void CModelessDialog::UnlockAutoHide()
{
m_bAutoHide = TRUE;
SetTimer(INIT_MONITOR_PT, g_nInitAutoHideTime, NULL);
}
XPushAutoHide::XPushAutoHide(CModelessDialog *pDlg) :m_bAutoHide(FALSE)
{
m_pDialog = pDlg;
if (m_pDialog->m_bModeless)
{
m_bAutoHide = pDlg->m_bAutoHide;
if (m_bAutoHide)
m_pDialog->LockAutoHide();
}
}
XPushAutoHide::~XPushAutoHide()
{
if (m_pDialog->m_bModeless)
{
if (m_bAutoHide)
m_pDialog->UnlockAutoHide();
}
}
void CModelessDialog::OnNcLButtonDown(UINT nHitTest, CPoint point)
{
if (m_bHide || m_nStepNum > 0)
MaxShow();
CAcUiDialog::OnNcLButtonDown(nHitTest, point);
}
int CModelessDialog::MessageBox(LPCTSTR lpszText, LPCTSTR lpszCaption, UINT nType)
{
XPushAutoHide noAutoHide(this);
return CAcUiDialog::MessageBox(lpszText, lpszCaption, nType);
}
BOOL CModelessDialog::OnCommand(WPARAM wParam, LPARAM lParam)
{
XPushAutoHide *pAH = NULL;
UINT nID = LOWORD(wParam);
HWND hWndCtrl = (HWND)lParam;
int nCode = HIWORD(wParam);
CWnd *pWnd = FromHandle(hWndCtrl);
if (pWnd != NULL)//控件通知
{
//判断是否是下拉列表
//GetWindowLong(pWnd->GetSafeHwnd(),
//if(pWnd->IsKindOf(RUNTIME_CLASS(CComboBox)))
{
if (nCode == CBN_CLOSEUP)//关下拉列表
pAH = new XPushAutoHide(this);
}
}
BOOL bRet = CAcUiDialog::OnCommand(wParam, lParam);
if (pAH != NULL)
delete pAH;
return bRet;
}
BOOL CModelessDialog::PreTranslateMessage(MSG* pMsg)
{
if (m_bModeless && pMsg->message == WM_KEYDOWN)
{
CWnd *pWndPar = CWnd::FromHandle(pMsg->hwnd)->GetParent();
if (pMsg->hwnd == m_hWnd || pWndPar && pWndPar->m_hWnd == m_hWnd)
{
if (pMsg->wParam == VK_ESCAPE)
{
PostMessage(WM_CLOSE);
return TRUE;
}
else if (pMsg->wParam == VK_RETURN)//modified by whl on 050410
{
CWnd*pWnd = CWnd::FromHandle(pMsg->hwnd);
if (pWnd != NULL && pWnd->IsKindOf(RUNTIME_CLASS(CEdit)))
{
int iStyle = pWnd->GetStyle();
if ((iStyle & ES_WANTRETURN) != 0 &&
(iStyle & ES_MULTILINE) != 0)//允许多行Edit换行操作
return CAcUiDialog::PreTranslateMessage(pMsg);
}
return TRUE;
}
}
}
//if(pMsg->message==WM_SIZE&&m_bAutoHide)
//{
// if(!IsShowNormal())
// {
// if(pMsg->message==WM_SIZE)
// return TRUE;//自动缩放时不再发送WM_SIZE
// }
//}
if (pMsg->message >= WM_MOUSEFIRST && pMsg->message <= WM_MOUSELAST)
{
MSG msg;
::CopyMemory(&msg, pMsg, sizeof(MSG));
HWND hWndParent = ::GetParent(msg.hwnd);
while (hWndParent && hWndParent != m_hWnd)
{
msg.hwnd = hWndParent;
hWndParent = ::GetParent(hWndParent);
}
if (msg.hwnd)
m_wndToolTip.RelayEvent(&msg);
}
return CAcUiDialog::PreTranslateMessage(pMsg);
}
BOOL CModelessDialog::AddTip(UINT idControl)
{
HINSTANCE hInstance = NULL;
CWnd *pWnd = GetDlgItem(idControl);
if (!pWnd)
return FALSE;
int nRet;
CString strTip;
if (!hInstance)
nRet = strTip.LoadString(idControl);
else
{
TCHAR szTemp[1024] = _T("");
nRet = ::LoadString(hInstance, idControl, szTemp, 1023);
if (nRet)
strTip = szTemp;
}
if (nRet)
nRet = m_wndToolTip.AddTool(pWnd, strTip);
return (nRet != 0);
}
BOOL CModelessDialog::AddTip(UINT idControl, const TCHAR *str)
{
CWnd *pWnd = GetDlgItem(idControl);
if (!pWnd)
return FALSE;
return m_wndToolTip.AddTool(pWnd, str);
}
HBRUSH CModelessDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CAcUiDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if (pWnd->IsWindowEnabled())
{
CToolInfo toolInfo;
if (m_wndToolTip.GetToolInfo(toolInfo, pWnd))
//pDC->SetTextColor(RGB(0,0,255));
pDC->SetTextColor(RGB(0, 140, 235));
}
return hbr;
}
#pragma endregion
#pragma region CSectionDlg
CString CSectionDlg::m_strSectionNum = _T("1");
CString CSectionDlg::m_strStyle = GetTextStyleName(TS_SECTION); //默认剖切编号文字样式
CString CSectionDlg::m_strHeight = _T("5.0");
int CSectionDlg::m_bCheck = FALSE;
CString CSectionDlg::m_strDrawingNum = _T("1");
int CSectionDlg::m_iLocal = 0;
int CSectionDlg::m_iDirect = 0;
CString CSectionDlg::m_strDrawingHeight = _T("3.5");
CString CSectionDlg::m_strTextStyle = GetTextStyleName(TS_INDEXSCALE);//默认剖切图号文字样式
int CSectionDlg::m_nSectionMode = 1;
IMPLEMENT_DYNAMIC(CSectionDlg, CDialog)
CSectionDlg::CSectionDlg(CWnd *pParent)
:CModelessDialog(CSectionDlg::IDD, pParent)
{
m_bStyeChange = FALSE; //是否改变绘制剖切图号的样式,默认没有改变
}
CSectionDlg::~CSectionDlg(void)
{
}
BEGIN_MESSAGE_MAP(CSectionDlg, CModelessDialog)
ON_BN_CLICKED(IDC_RADIO1, OnBtnBlickA)
ON_BN_CLICKED(IDC_RADIO2, OnBtnBlickB)
ON_BN_CLICKED(IDC_RADIO3, OnBtnBlickC)
ON_BN_CLICKED(IDC_RADIO4, OnBtnBlickD)
ON_BN_CLICKED(IDC_CHK_DRAWING, OnBnClickDrawNum)
ON_BN_CLICKED(IDC_BTN_WORDHIGHT, OnBnClickedBtnWordhight)
ON_BN_CLICKED(IDC_BTN_DRAWINGHEIGHT, OnBnClickedBtnDrawingheight)
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText)
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText)
END_MESSAGE_MAP()
void CSectionDlg::DoDataExchange(CDataExchange* pDX)
{
CModelessDialog::DoDataExchange(pDX);
DDX_CBString(pDX, IDC_CMB_SECTIONNUM, m_strSectionNum);
if (pDX->m_bSaveAndValidate)
{
DDX_CBString(pDX, IDC_CMB_SECTIONTEXT, m_strStyle);
}
else
{
GetDlgItem(IDC_CMB_SECTIONTEXT)->SetWindowText(m_strStyle);
}
DDX_CBString(pDX, IDC_CMB_WORDHEIGHT, m_strHeight);
DDX_Text(pDX, IDC_EDT_DRAWINGNUM, m_strDrawingNum);
DDX_CBIndex(pDX, IDC_CMB_SECTIONPOSITION, m_iLocal);
DDX_CBIndex(pDX, IDC_CMB_SECTIONDIRECT, m_iDirect);
DDX_CBString(pDX, IDC_CMB_DRAWINGHEIGHT, m_strDrawingHeight);
if (pDX->m_bSaveAndValidate)
{
DDX_CBString(pDX, IDC_CMB_DRAWTEXTSTYLE, m_strTextStyle);
}
DDX_Check(pDX, IDC_CHK_DRAWING, m_bCheck);
DDX_Control(pDX, IDC_CMB_DRAWTEXTSTYLE, m_cmbDrawStyle);
DDX_Control(pDX, IDC_CMB_SECTIONTEXT, m_cmbStyleName);
}
BOOL CSectionDlg::OnInitDialog()
{
CModelessDialog::OnInitDialog();
//createToolBar(); //创建绘制方式工具条
LoadTextStyle(); //加载文字样式
OnBnClickDrawNum();
AddTip(IDC_STATIC_LOC, _T("设置剖面图号是标注在剖切符号的两端还是其中一端"));
AddTip(IDC_STATIC_DIR, _T("设置剖面图号的文字方向是沿剖切方向还是剖视方向"));
CheckTypeButton(); //add by lgy 20120525 按钮状态设置
UpdateData(FALSE);
CButton *pWnd = (CButton*)GetDlgItem(IDC_RADIO1);
if (pWnd)
{
pWnd->SetCheck(1);
}
OnBtnBlickA();
return TRUE;
}
//void CSectionDlg::createToolBar()
//{
// UINT buttonID[] = { ID_BTN_A, ID_BTN_B, ID_BTN_C, ID_BTN_D };
// CAcModuleResourceOverride vTmp;
// m_toolbar.Create(WS_VISIBLE | WS_CHILD | CCS_BOTTOM | TBSTYLE_TOOLTIPS
// | CCS_ADJUSTABLE, CRect(0, 0, 0, 0), this, IDR_SECTION);
//
// TBBUTTON *pIndex,
// *pRTF_Button = new TBBUTTON[20];
// pIndex = pRTF_Button;
// for (long lIndex = 0; lIndex < 4; lIndex++) //创建四个按钮控件
// {
// memset(pIndex, NULL, sizeof(TBBUTTON));
// pIndex->iBitmap = lIndex;
// pIndex->idCommand = buttonID[lIndex];
// pIndex->fsStyle = TBSTYLE_CHECKGROUP;
// pIndex->fsState = TBSTATE_ENABLED;
// pIndex++;
// }
// CSize size(16, 15);
// m_toolbar.SetButtonSize(size);
// m_toolbar.AddButtons(4, pRTF_Button);
//
// // sg delete 120613,解决64位下的崩溃问题
// //delete pIndex;
// delete[] pRTF_Button;
//
// m_toolbar.SetBitmapSize(size);
// m_toolbar.ModifyStyle(0, TBSTYLE_FLAT);
// m_toolbar.AddBitmap(4, IDR_SECTION);
//}
//add by lgy 20120525 设置按钮状态
void CSectionDlg::CheckTypeButton()
{
//m_toolbar.CheckButton(ID_BTN_A, m_nSectionMode == 1);
//m_toolbar.CheckButton(ID_BTN_B, m_nSectionMode == 2);
//m_toolbar.CheckButton(ID_BTN_C, m_nSectionMode == 3);
//m_toolbar.CheckButton(ID_BTN_D, m_nSectionMode == 4);
}
BOOL CSectionDlg::DestroyWindow()
{
UpdateData(TRUE);
return CDialog::DestroyWindow();
}
BOOL CSectionDlg::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)
{
ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);
if (GetRoutingFrame() != NULL) return FALSE;
TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
CString strTipText;
UINT nID = (UINT)pNMHDR->idFrom;
if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||
pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
{
return FALSE;
}
if (nID != 0)
{
{
CAcModuleResourceOverride vTmp;
strTipText.LoadString(nID);
}
#ifndef _UNICODE
if (pNMHDR->code == TTN_NEEDTEXTA) {
lstrcpyn(pTTTA->szText, strTipText, sizeof(pTTTA->szText));
}
else {
_mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
}
#else
if (pNMHDR->code == TTN_NEEDTEXTA) {
_wcstombsz(pTTTA->szText, strTipText, sizeof(pTTTA->szText));
}
else {
lstrcpyn(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
}
#endif
*pResult = 0;
::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0, SWP_NOACTIVATE |
SWP_NOSIZE | SWP_NOMOVE | SWP_NOOWNERZORDER); return TRUE;
}
return TRUE;
}
void CSectionDlg::LoadTextStyle() //加载文字样式
{
XSymbolList lstStyle(_T("STYLE"));
for (int m = 0; m < lstStyle.Length(); m++)
{
m_cmbStyleName.AddString(lstStyle[m]);
m_cmbDrawStyle.AddString(lstStyle[m]);
}
// sg modify 120706,增加一个判断,如果当前记忆的样式没有的话,那么使用天正固定的文字样式
//m_cmbStyleName.SetCurSel(m_cmbStyleName.FindStringExact(0, m_strStyle));
//m_cmbDrawStyle.SetCurSel(m_cmbDrawStyle.FindStringExact(0, m_strTextStyle));
int nRet = m_cmbStyleName.FindStringExact(0, m_strStyle);
if (nRet < 0)
{
nRet = m_cmbStyleName.FindStringExact(0, _T("_TCH_LABEL"));
}
m_cmbStyleName.SetCurSel(nRet);
nRet = m_cmbDrawStyle.FindStringExact(0, m_strTextStyle);
if (nRet < 0)
{
nRet = m_cmbDrawStyle.FindStringExact(0, _T("_TCH_DIM"));
}
m_cmbDrawStyle.SetCurSel(nRet);
}
void CSectionDlg::OnBtnBlickA()
{
UpdateData(TRUE);
m_nSectionMode = 1; //剖面剖切
m_bStyeChange = true;
CheckTypeButton(); //add by lgy 20120525 按钮状态设置
UpdateData(FALSE);
acedPostCommand(_T("\33"));
}
void CSectionDlg::OnBtnBlickB()
{
UpdateData(TRUE);
m_nSectionMode = 2; //正交跑切
m_bStyeChange = true;
CheckTypeButton(); //add by lgy 20120525 按钮状态设置
UpdateData(FALSE);
acedPostCommand(_T("\33"));
}
void CSectionDlg::OnBtnBlickC()
{
UpdateData(TRUE);
m_nSectionMode = 3; //非正交剖切
m_bStyeChange = true;
CheckTypeButton(); //add by lgy 20120525 按钮状态设置
UpdateData(FALSE);
acedPostCommand(_T("\33"));
}
void CSectionDlg::OnBtnBlickD()
{
UpdateData(TRUE);
m_nSectionMode = 4; //断面剖切
m_bStyeChange = true;
CheckTypeButton(); //add by lgy 20120525 按钮状态设置
UpdateData(FALSE);
acedPostCommand(_T("\33"));
}
CString CSectionDlg::GetSectionNum()
{
UpdateData(TRUE);
return m_strSectionNum;
}
CString CSectionDlg::GetNumStyle()
{
UpdateData(TRUE);
return m_strStyle;
}
double CSectionDlg::GetNumHeight()
{
UpdateData(TRUE);
return _tstof(m_strHeight);
}
CString CSectionDlg::GetDrawNum()
{
UpdateData(TRUE);
return m_strDrawingNum;
}
int CSectionDlg::GetLocal()
{
UpdateData(TRUE);
return m_iLocal;
}
int CSectionDlg::GetDirect()
{
UpdateData(TRUE);
return m_iDirect;
}
int CSectionDlg::GetSectionMode()
{
UpdateData(TRUE);
return m_nSectionMode;
}
CString CSectionDlg::GetDrawingStyle()
{
UpdateData(TRUE);
return m_strTextStyle;
}
double CSectionDlg::GetDrawHeight()
{
UpdateData(TRUE);
return _tstof(m_strDrawingHeight);
}
void CSectionDlg::OnBnClickDrawNum()
{
UpdateData(TRUE);
if (!m_bCheck) //不显示剖切图号
{
GetDlgItem(IDC_CMB_DRAWTEXTSTYLE)->EnableWindow(FALSE);
GetDlgItem(IDC_EDT_DRAWINGNUM)->EnableWindow(FALSE);
GetDlgItem(IDC_CMB_SECTIONPOSITION)->EnableWindow(FALSE);
GetDlgItem(IDC_CMB_SECTIONDIRECT)->EnableWindow(FALSE);
GetDlgItem(IDC_CMB_DRAWINGHEIGHT)->EnableWindow(FALSE);
GetDlgItem(IDC_BTN_DRAWINGHEIGHT)->EnableWindow(FALSE);
}
else
{
GetDlgItem(IDC_CMB_DRAWTEXTSTYLE)->EnableWindow(TRUE);
GetDlgItem(IDC_EDT_DRAWINGNUM)->EnableWindow(TRUE);
GetDlgItem(IDC_CMB_SECTIONPOSITION)->EnableWindow(TRUE);
GetDlgItem(IDC_CMB_SECTIONDIRECT)->EnableWindow(TRUE);
GetDlgItem(IDC_CMB_DRAWINGHEIGHT)->EnableWindow(TRUE);
GetDlgItem(IDC_BTN_DRAWINGHEIGHT)->EnableWindow(TRUE);
}
UpdateData(FALSE);
}
BOOL CSectionDlg::GetIsShowDrawText()
{
UpdateData(TRUE);
return m_bCheck;
}
void CSectionDlg::OnBnClickedBtnWordhight()
{
UpdateData(TRUE);
XPushAutoHide noAutoHide(this);
double dHeight = _tstof(m_strHeight);
dHeight = dHeight * GlobalFunc::DocGetPScale();
BeginEditorCommand();
if (GlobalFunc::GetDist(_T("\n字高"), dHeight, RSG_NOZERO | RSG_NONEG) == RTNORM)
{
dHeight /= GlobalFunc::DocGetPScale();
CString str;
//str.Format(_T("%.1f"), dHeight/GlobalFunc::DocGetPScale());
str.Format(_T("%.1f"), dHeight);
m_strHeight = str;
}
CompleteEditorCommand();
UpdateData(FALSE);
}
void CSectionDlg::OnBnClickedBtnDrawingheight()
{
UpdateData(TRUE);
XPushAutoHide noAutoHide(this);
double dHeight = _tstof(m_strDrawingHeight);
dHeight = dHeight * GlobalFunc::DocGetPScale();
BeginEditorCommand();
if (GlobalFunc::GetDist(_T("\n字高"), dHeight, RSG_NOZERO | RSG_NONEG) == RTNORM)
{
dHeight /= GlobalFunc::DocGetPScale();
CString str;
str.Format(_T("%.1f"), dHeight);
m_strDrawingHeight = str;
}
CompleteEditorCommand();
UpdateData(FALSE);
}
BOOL CSectionDlg::GetIsChangeType()
{
return m_bStyeChange;
}
void CSectionDlg::SetIsChangeType(BOOL bIs)
{
m_bStyeChange = bIs;
}
#pragma endregion
#pragma region CCharDlg
static int g_nTypeIndex = 0;
char CCharDlg::m_charGreece[][3] = { "Α","Β","Γ","Δ","Ε","Ζ","Η",
"Θ","Ι","Κ","Λ","Μ","Ν","Ξ",
"Ο","Π","Ρ","Σ","Τ","Υ","Φ",
"Χ","Ψ","Ω","α","β","γ","δ",
"ε","ζ","η","θ","ι","κ","λ",
"μ","ν","ξ","ο","π","ρ","σ",
"τ","υ","φ","χ","ψ","ω" };
char CCharDlg::m_charMath[][3] = { "≈","≡","=","≤","≥","<",">",
"≮","≯","∷","±","+","-","×",
"÷","/","∫","∮","∝","∞","∧",
"∨","∑","∏","∪","∩","∈","∵",
"∴","⊥","∥","∠","⌒","⊙","≌",
"∽","√" };
char CCharDlg::m_charSerial[][3] = { "⒈","⒉","⒊","⒋","⒌","⒍","⒎",
"⒏","⒐","⒑","⒒","⒓","⒔","⒕",
"⒖","⒗","⒘","⒙","⒚","⒛","⑴",
"⑵","⑶","⑷","⑸","⑹","⑺","⑻",
"⑼","⑽","⑾","⑿","⒀","⒁","⒂",
"⒃","⒄","⒅","⒆","⒇","①","②",
"③","④","⑤","⑥","⑦","⑧","⑨",
"⑩","㈠","㈡","㈢","㈣","㈤","㈥",
"㈦","㈧","㈨","㈩" };
char CCharDlg::m_charRomaSerial[][3] = { "Ⅰ","Ⅱ","Ⅲ","Ⅳ","Ⅴ","Ⅵ","Ⅶ",
"Ⅷ","Ⅸ","Ⅹ","Ⅺ","Ⅻ","ⅰ","ⅱ",
"ⅲ","ⅳ","ⅴ","ⅵ","ⅶ","ⅷ","ⅸ",
"ⅹ" };
char CCharDlg::m_charInterpunction[][3] = { "。",",","、",";",":","?","!",
".","∶","…","—","·","ˉ","ˇ",
"‘","’","“","”","々","~","‖",
""","'","`","|","〃","¨","〔",
"〕","〈","〉","《","》","「","」",
"『","』","〖","〗","【","】","(",
")","[","]","{","}" };
char CCharDlg::m_charSpecific[][3] = { "°","′","″","$","£","¥","‰",
"%","℃","¤","¢","§","№","☆",
"★","○","●","◎","◇","◆","□",
"■","△","▲","※","→","←","↑",
"↓","〓","#","&","@","\","^",
"_"," ̄", "▼", "▽" };
CCharDlg::CCharDlg(CWnd* pParent /*=NULL*/)
: CDialog(CCharDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CCharDlg)
m_character = _T("");
//}}AFX_DATA_INIT
m_left = -1;
m_top = -1;
}
CCharDlg::~CCharDlg()
{
delete m_pFont;
}
void CCharDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCharDlg)
DDX_Control(pDX, IDC_COMBO_TYPE, m_combo_type);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CCharDlg, CDialog)
//{{AFX_MSG_MAP(CCharDlg)
ON_WM_PAINT()
ON_WM_LBUTTONUP()
ON_CBN_SELCHANGE(IDC_COMBO_TYPE, OnSelchangeComboType)
ON_WM_LBUTTONDBLCLK()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCharDlg message handlers
BOOL CCharDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_indexCombo = 0;
m_countChar = 48;
CRect rect;
CWnd* pWnd = GetDlgItem(IDC_STATIC_FRAME);
CDC *pDC = pWnd->GetDC();
pWnd->GetClientRect(rect);
m_wndWidth = rect.Width();
m_wndHeight = rect.Height();
m_Hdistance = m_wndWidth / 10;
m_Vdistance = m_wndHeight / 6;
m_pFont = new CFont;
m_pFont->CreateFont(rect.bottom - rect.top, 0, 0, 0, 700, FALSE, FALSE, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH & FF_SWISS,
_T("Arial"));
m_combo_type.SetCurSel(g_nTypeIndex);
OnSelchangeComboType();
UpdateData(false);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CCharDlg::writechar(char pchar[][3], int count)
{
CWnd* pWnd = GetDlgItem(IDC_STATIC_FRAME);
CDC *pDC = pWnd->GetDC();
CFont *pOldFont;
CFont *pLargeFont = new CFont;
pLargeFont->CreateFont(28, 0, 0, 0, 700, FALSE, FALSE, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH & FF_SWISS,
_T("Arial"));
pOldFont = (CFont *)pDC->SelectObject(pLargeFont);
int i = 0 - (int)(m_Hdistance / 1.1);
int l = 0 - (int)(m_Vdistance / 1.1);
for (int n = 0; n < count; n++)
{
if (n % 10 == 0)
{
i = 0 - int(m_Hdistance / 1.1);
l = l + m_Vdistance;
}
pDC->TextOut(i = i + m_Hdistance, l, pchar[n]);
}
pDC->SelectObject(pOldFont);
delete pLargeFont;
}
void CCharDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
CRect rect;
CWnd* pWnd = GetDlgItem(IDC_STATIC_FRAME);
pWnd->GetClientRect(rect);
CDC *pDC = pWnd->GetDC();
CBrush* pNewBrush = new CBrush;
pNewBrush->CreateSolidBrush(RGB(255, 255, 255));
CBrush* pOldBrush = pDC->SelectObject(pNewBrush);
pDC->Rectangle(rect);
pDC->SelectObject(pOldBrush);
delete pNewBrush;
drawPane();
switch (m_indexCombo)
{
case 0:
writechar(m_charGreece, m_countChar);
break;
case 1:
writechar(m_charMath, m_countChar);
break;
case 2:
writechar(m_charRomaSerial, m_countChar);
break;
case 3:
writechar(m_charSerial, m_countChar);
break;
case 4:
writechar(m_charInterpunction, m_countChar);
break;
case 5:
writechar(m_charSpecific, m_countChar);
break;
}
if (m_left >= 0 && m_top >= 0)
{
drawSmallPane();
}
// Do not call CDialog::OnPaint() for painting messages
}
BOOL CCharDlg::Check(CPoint point)
{
CRect rect;
CWnd* pWnd = GetDlgItem(IDC_STATIC_FRAME);
pWnd->GetWindowRect(rect);
ScreenToClient(&rect);
CRgn* myRgn = new CRgn();
myRgn->CreateRectRgnIndirect(rect);
if (myRgn->PtInRegion(point))
{
int i, j;
i = point.x / m_Hdistance - 1;
j = point.y / m_Vdistance - 1;
i = j * 10 + i;
switch (m_indexCombo)
{
case 0:
if (i < 48)
m_character = m_charGreece[i];
else
m_character = "";
break;
case 1:
if (i < 40)
m_character = m_charMath[i];
else
m_character = "";
break;
case 2:
if (i < 22)
m_character = m_charRomaSerial[i];
else
m_character = "";
break;
case 3:
if (i < 60)
m_character = m_charSerial[i];
else
m_character = "";
break;
case 4:
if (i < 47)
m_character = m_charInterpunction[i];
else
m_character = "";
break;
case 5:
if (i < 39)
m_character = m_charSpecific[i];
else
m_character = "";
break;
}
}
else return FALSE;
delete myRgn;
return TRUE;
}
void CCharDlg::OnLButtonDblClk(UINT nFlags, CPoint point)
{
if (!Check(point)) return;
g_nTypeIndex = m_combo_type.GetCurSel();
CDialog::OnLButtonDblClk(nFlags, point);
CDialog::OnOK();
}
void CCharDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
if (!Check(point)) return;
CRect rect;
CWnd* pWnd = GetDlgItem(IDC_STATIC_FRAME);
pWnd->GetWindowRect(rect);
ScreenToClient(&rect);
if (m_left >= 0 && m_top >= 0)
delSmallPane();
m_left = ((point.x - rect.left) / m_Hdistance) * m_Hdistance;
m_top = ((point.y - rect.top) / m_Vdistance) * m_Vdistance;
drawSmallPane();
CRect rect2;
pWnd->GetClientRect(rect2);
CDC *pDC = pWnd->GetDC();
pDC->MoveTo(rect2.right - 1, rect2.top); //画边粗线
pDC->LineTo(rect2.right - 1, rect2.bottom);
pDC->MoveTo(rect2.left, rect2.bottom - 1);
pDC->LineTo(rect2.right, rect2.bottom - 1);
CDialog::OnLButtonUp(nFlags, point);
}
void CCharDlg::drawPane()
{
CWnd* pWnd = GetDlgItem(IDC_STATIC_FRAME);
CDC *pDC = pWnd->GetDC();
int i, j;
m_pen.DeleteObject();
m_pen.CreatePen(PS_SOLID, 1, RGB(0, 0, 0));
pDC->SelectObject(m_pen);
for (j = 0; j <= m_wndHeight; j = j + m_Vdistance)
{
pDC->MoveTo(0, j);
pDC->LineTo(m_wndWidth, j);
}
for (i = 0; i <= m_wndWidth; i = i + m_Hdistance)
{
pDC->MoveTo(i, 0);
pDC->LineTo(i, m_wndHeight);
}
}
void CCharDlg::drawSmallPane()
{
CWnd* pWnd = GetDlgItem(IDC_STATIC_FRAME);
CDC *pDC = pWnd->GetDC();
m_pen.DeleteObject();
m_pen.CreatePen(PS_SOLID, 1, RGB(0, 0, 0));
pDC->SelectObject(m_pen);
pDC->MoveTo(m_left + m_Hdistance, m_top + 1);
pDC->LineTo(m_left + 1, m_top + 1);
pDC->LineTo(m_left + 1, m_top + m_Vdistance);
m_pen.DeleteObject();
m_pen.CreatePen(PS_SOLID, 2, RGB(220, 220, 220));
pDC->SelectObject(m_pen);
pDC->MoveTo(m_left + m_Hdistance - 1, m_top + 1);
pDC->LineTo(m_left + m_Hdistance - 1, m_top + m_Vdistance - 1);
pDC->LineTo(m_left + 1, m_top + m_Vdistance - 1);
m_pen.DeleteObject();
m_pen.CreatePen(PS_SOLID, 1, RGB(0, 0, 255));
pDC->SelectObject(m_pen);
pDC->MoveTo(m_left, m_top);
pDC->LineTo(m_left, m_top + m_Vdistance);
pDC->LineTo(m_left + m_Hdistance, m_top + m_Vdistance);
pDC->LineTo(m_left + m_Hdistance, m_top);
pDC->LineTo(m_left, m_top);
}
void CCharDlg::delSmallPane()
{
CWnd* pWnd = GetDlgItem(IDC_STATIC_FRAME);
CDC *pDC = pWnd->GetDC();
m_pen.DeleteObject();
m_pen.CreatePen(PS_SOLID, 2, RGB(255, 255, 255));
pDC->SelectObject(m_pen);
pDC->MoveTo(m_left + m_Hdistance, m_top + 1);
pDC->LineTo(m_left + 1, m_top + 1);
pDC->LineTo(m_left + 1, m_top + m_Vdistance);
pDC->MoveTo(m_left + m_Hdistance - 1, m_top + 1);
pDC->LineTo(m_left + m_Hdistance - 1, m_top + m_Vdistance - 1);
pDC->LineTo(m_left + 1, m_top + m_Vdistance - 1);
m_pen.DeleteObject();
m_pen.CreatePen(PS_SOLID, 1, RGB(0, 0, 0));
pDC->SelectObject(m_pen);
pDC->MoveTo(m_left, m_top);
pDC->LineTo(m_left, m_top + m_Vdistance);
pDC->LineTo(m_left + m_Hdistance, m_top + m_Vdistance);
pDC->LineTo(m_left + m_Hdistance, m_top);
pDC->LineTo(m_left, m_top);
}
void CCharDlg::OnSelchangeComboType()
{
if (m_left >= 0 && m_top >= 0)
delSmallPane();
m_left = -1, m_top = -1;
switch (m_combo_type.GetCurSel())
{
case 0:
m_indexCombo = 0;
m_countChar = 48;
OnPaint();
break;
case 1:
m_indexCombo = 1;
m_countChar = 40;
OnPaint();
break;
case 2:
m_indexCombo = 2;
m_countChar = 22;
OnPaint();
break;
case 3:
m_indexCombo = 3;
m_countChar = 60;
OnPaint();
break;
case 4:
m_indexCombo = 4;
m_countChar = 47;
OnPaint();
break;
case 5:
m_indexCombo = 5;
m_countChar = 39;
OnPaint();
break;
}
}
void CCharDlg::OnCancel()
{
m_character = "";
CDialog::OnCancel();
}
void CCharDlg::OnOK()
{
g_nTypeIndex = m_combo_type.GetCurSel();
CDialog::OnOK();
}
bool GetSpecialChar(CWnd*pParent, CString &res)
{
CAcModuleResourceOverride vTemp;
CCharDlg dlg(pParent);
if (dlg.DoModal() != IDOK || dlg.m_character == "")
return false;
res = dlg.m_character;
return true;
}
#pragma endregion
#pragma region CBaseTextDlg
double CBaseTextDlg::g_nHeight = GetTextHeightByTs(TS_SYMBOL);
CString CBaseTextDlg::m_strFontStyle = GetTextStyleName(TS_SYMBOL);
IMPLEMENT_DYNAMIC(CBaseTextDlg, CModelessDialog)
CBaseTextDlg::CBaseTextDlg(UINT IDD, CWnd* pParent /*=NULL*/)
: CModelessDialog(IDD, pParent) //, m_bContinue(FALSE)
{
if (fabs(g_nHeight) < 1.0E-3)
g_nHeight = 3.5;
//{{AFX_DATA_INIT(CBaseTextDlg)
m_strHeight.Format(_T("%.1f"), g_nHeight);
m_strInputText = _T("");
//}}AFX_DATA_INIT
//注释 by lgy 20120111 文字样式不能置为当前文字样式,要改为上次命令记忆的文字样式
// XString sStyle;
// xg_getvar(_T("TEXTSTYLE"), sStyle);
// m_strFontStyle=(const TCHAR *)sStyle;
// m_strFontStyle = _T("");
// Add By Lcf On 2005-6-06-24
m_bPost = FALSE;
m_nOperCode = -1;
// sg add 090324
m_bNeedSingleLineText = TRUE;
}
void CBaseTextDlg::DoDataExchange(CDataExchange* pDX)
{
CModelessDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CBaseTextDlg)
DDX_Control(pDX, IDC_COMBO_FONGSTYLE, m_comboStyleName);
DDX_CBString(pDX, IDC_COMBO_HEIGHT, m_strHeight);
if (pDX->m_bSaveAndValidate && _tstof(m_strHeight) < 1.0E-3)
pDX->Fail();
if (pDX->m_bSaveAndValidate)
DDX_CBString(pDX, IDC_COMBO_FONGSTYLE, m_strFontStyle);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CBaseTextDlg, CModelessDialog)
//{{AFX_MSG_MAP(CBaseTextDlg)
ON_CBN_SELCHANGE(IDC_COMBO_FONGSTYLE, OnSelchangeComboFongstyle)
ON_BN_CLICKED(IDC_BUTTON_TEXT_HEIGHT, OnButtonTextHeight)
ON_COMMAND_RANGE(ID_SPECIAL_CHAR, ID_PICKTEXT, OnChar)
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText)
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText)
ON_WM_ACTIVATE()
ON_WM_CLOSE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CBaseTextDlg message handlers
BOOL CBaseTextDlg::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)
{
ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);
// if there is a top level routing frame then let it handle the message
if (GetRoutingFrame() != NULL) return FALSE;
// to be thorough we will need to handle UNICODE versions of the message also !!
TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
CString strTipText;
// Zyu modify on 100726,支持64位
//UINT nID = pNMHDR->idFrom;
UINT nID = (UINT)pNMHDR->idFrom;
if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||
pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
{
// idFrom is actually the HWND of the tool
//nID = ::GetDlgCtrlID((HWND)nID);
return FALSE; // shen rui add 对话框控件不显示
}
if (nID != 0) // will be zero on a separator
{
{
CAcModuleResourceOverride vTmp;
strTipText.LoadString(nID); //=szFullText;
}
#ifndef _UNICODE
if (pNMHDR->code == TTN_NEEDTEXTA)
{
lstrcpyn(pTTTA->szText, strTipText, sizeof(pTTTA->szText));
}
else
{
_mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
}
#else
if (pNMHDR->code == TTN_NEEDTEXTA)
{
_wcstombsz(pTTTA->szText, strTipText, sizeof(pTTTA->szText));
}
else
{
lstrcpyn(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
}
#endif
*pResult = 0;
// bring the tooltip window above other popup windows
::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0, SWP_NOACTIVATE |
SWP_NOSIZE | SWP_NOMOVE | SWP_NOOWNERZORDER); return TRUE;
}
return TRUE;
}
BOOL CBaseTextDlg::OnInitDialog()
{
CModelessDialog::OnInitDialog();
LoadTextStyle();
m_toolbar.Create(this);
{
CAcModuleResourceOverride vTmp;
m_toolbar.LoadToolBar(IDR_TOOLBAR_TEXT);
int x = ::GetLastError();
}
m_toolbar.ShowWindow(SW_SHOW);
m_toolbar.SetBarStyle(CBRS_ALIGN_TOP | CBRS_TOOLTIPS | CBRS_FLYBY);
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);
// sg modify 120706,增加一个判断,如果当前记忆的样式没有的话,那么使用天正固定的文字样式
//m_comboStyleName.SetCurSel(m_comboStyleName.FindStringExact(0, m_strFontStyle));
int nRet = m_comboStyleName.FindStringExact(0, m_strFontStyle);
if (nRet < 0) // 当前图纸没有此样式
{
nRet = m_comboStyleName.FindStringExact(0, _T("_TCH_DIM"));
}
m_comboStyleName.SetCurSel(nRet);
// Add By Lcf On 2005-6-06-24
if (m_bModeless)
{
CRect rOk;
GetDlgItem(IDOK)->GetWindowRect(rOk);
CRect rect;
GetWindowRect(rect);
rect.bottom -= rOk.Height();
rect.bottom -= 5;//add by whl
MoveWindow(rect);
GetDlgItem(IDOK)->ShowWindow(SW_HIDE);
GetDlgItem(IDCANCEL)->ShowWindow(SW_HIDE);
}
// add by xly on 100902 去掉“连续标注”标签
/*else
GetDlgItem(IDC_CONTINUE)->ShowWindow(SW_HIDE);*/
GetDlgItem(IDC_CONTINUE)->ShowWindow(SW_HIDE);
UpdateData(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
}
void CBaseTextDlg::UpdateInputText()
{
return;
}
// Modify by lcf On 2005-07-05
BOOL CBaseTextDlg::GetPosition(int& h, int& l)
{
DWORD n;
CComboBox *pComboBox = NULL;
CEdit *pEdit = NULL;
CWnd *pWnd1 = this->GetFocus();
if (m_pCurWnd->IsKindOf(RUNTIME_CLASS(CComboBox)))
{
pComboBox = (CComboBox*)m_pCurWnd;
if (pComboBox->m_hWnd != pWnd1->GetParent()->m_hWnd)
{
int nSel = pComboBox->GetWindowTextLength();
pComboBox->SetEditSel(nSel, nSel);
}
n = pComboBox->GetEditSel();
}
else if (m_pCurWnd->IsKindOf(RUNTIME_CLASS(CEdit)))
{
pEdit = (CEdit*)m_pCurWnd;
if (pEdit->m_hWnd != pWnd1->m_hWnd)
{
int nBegin = pEdit->LineIndex(pEdit->GetLineCount() - 1);
int nEnd = nBegin + pEdit->LineLength(nBegin);
pEdit->SetSel(nEnd, nEnd);
}
n = pEdit->GetSel();
}
else
return FALSE;
l = (int)LOWORD(n);
h = (int)HIWORD(n);
#if (ARX>15)
if (!GlobalFunc::FindRT_MANIFEST())
return TRUE;
OSVERSIONINFO osVer;
osVer.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
VERIFY(GetVersionEx(&osVer) == TRUE);
if (osVer.dwPlatformId == VER_PLATFORM_WIN32_NT && osVer.dwMajorVersion >= 5 && osVer.dwMinorVersion >= 1) {
CString csText;
m_pCurWnd->GetWindowText(csText);
XString xsText;
xsText = csText;
// Zyu modify on 100726,去掉编译警告
//int nCount=_tcslen(xsText);
int nCount = (int)_tcslen(xsText);
int iLow = l, iUp = h;
for (int idx = 0; idx < nCount; idx++) {
if (idx >= iUp)
break;
TCHAR c = xsText[idx];
if (c < 0) { //汉字
if (idx < iLow)
iLow++;
if (idx < iUp)
iUp++;
idx++;
}
}
l = iLow;
h = iUp;
}
#endif
return TRUE;
}
void CBaseTextDlg::OnChar(UINT nID)
{
UpdateData(TRUE);
m_pCurWnd = GetCurWnd();
if (!m_pCurWnd)
{
AfxMessageBox(_T("只能在指定控件中输入特殊字符!"));
return;
}
int h, l;
if (!GetPosition(h, l))
return;
int i = 0;// Modify By Lcf On 2005-07-01
switch (nID)
{
case ID_DOWN_MARK:
if (h == l)
{
AfxMessageBox(_T("请先在文字框中选择字符!"));
return;
}
m_strInputText.Insert(l, _T("^L"));
m_strInputText.Insert(h + 2, _T("^L"));
i = h + 4;
break;
case ID_UP_MARK:
if (h == l)
{
AfxMessageBox(_T("请先在文字框中选择字符!"));
return;
}
m_strInputText.Insert(l, _T("^U"));
m_strInputText.Insert(h + 2, _T("^U"));
i = h + 4;
break;
case ID_CIRCLE:
if (h == l)
{
AfxMessageBox(_T("请先在文字框中选择字符!"));
return;
}
m_strInputText.Insert(l, _T("^C"));
m_strInputText.Insert(h + 2, _T("^C"));
i = h + 4;
break;
case ID_ANGLE_CHAR:
m_strInputText.Delete(l, h - l);
m_strInputText.Insert(l, _T("%%d"));
i = l + 3;
break;
case ID_DIA_CHAR:
m_strInputText.Delete(l, h - l);
m_strInputText.Insert(l, _T("%%c"));
i = l + 3;
break;
case ID_TOLERANCE_CHAR:
m_strInputText.Delete(l, h - l);
m_strInputText.Insert(l, _T("%%p"));
i = l + 3;
break;
case ID_PERCENT_CHAR:
m_strInputText.Delete(l, h - l);
m_strInputText.Insert(l, _T("%%%"));
i = l + 3;
break;
case ID_ONE_STEEL:
m_strInputText.Delete(l, h - l);
m_strInputText.Insert(l, _T("^1"));
i = l + 2;
break;
case ID_TWO_STEEL:
m_strInputText.Delete(l, h - l);
m_strInputText.Insert(l, _T("^2"));
i = l + 2;
break;
case ID_THREE_STEEL:
m_strInputText.Delete(l, h - l);
m_strInputText.Insert(l, _T("^3"));
i = l + 2;
break;
case ID_FOUR_STEEL:
m_strInputText.Delete(l, h - l);
m_strInputText.Insert(l, _T("^4"));
i = l + 2;
break;
case ID_SPECIAL_CHAR:
{
XPushAutoHide nAutoHide(this);
CCharDlg dlg(this);
CString str;
CAcModuleResourceOverride vTemp;
if (dlg.DoModal() != IDOK || dlg.m_character == _T(""))
return;
str = dlg.m_character;
m_strInputText.Delete(l, h - l);
m_strInputText.Insert(l, str);
i = l + str.GetLength();
}
break;
case ID_WORD://词库
{
//XPushAutoHide nAutoHide(this);
//CInsTextDlg dlg(this);
//dlg.SetPreText(m_strInputText);
//dlg.SetSingleText(m_bNeedSingleLineText); // zzg 2009 03 24
//if (dlg.DoModal() != IDOK || dlg.GetEditText() == _T(""))
// return;
//m_strInputText.Delete(l, h - l);
//m_strInputText.Insert(l, dlg.GetEditText());
//i = l + dlg.GetEditText().GetLength();
}
break;
case ID_PICKTEXT:// Add By Lcf On 2005-07-01
{
if (m_bModeless && m_bPost)
{
m_nOperCode = 1;
GlobalFunc::PostCommand(_T("` "), false);
}
else
{
GetPickText();
acedGetAcadDwgView()->SetFocus();
}
}
return;
}
UpdateInputText(); // 回传给子类
CComboBox *pComboBox = NULL;
CEdit *pEdit = NULL;
if (m_pCurWnd->IsKindOf(RUNTIME_CLASS(CComboBox))) {
pComboBox = (CComboBox*)m_pCurWnd;
int index = pComboBox->FindStringExact(0, m_strInputText);
if (index < 0)
pComboBox->InsertString(0, m_strInputText);
pComboBox->SelectString(0, m_strInputText);
pComboBox->SetEditSel(i, i);
}// 以上四行目的为了防止COMBOBOX在已有列表选择一个最匹配的,所加m_strInputText只是临时的。
if (m_pCurWnd->IsKindOf(RUNTIME_CLASS(CEdit))) {
pEdit = (CEdit*)m_pCurWnd;
pEdit->SetSel(i, i);
}
UpdateData(FALSE);
if (pEdit)
pEdit->SetSel(i, i);
else
pComboBox->SetEditSel(i, i);
}
// Add by lcf On 2005-07-01
BOOL CBaseTextDlg::GetPickText()
{
XPushAutoHide noAutoHide(this);
m_nOperCode = -1;
int h, l;
if (!GetPosition(h, l))
return FALSE;
int i = 0;// Modify By Lcf On 2005-07-01
BeginEditorCommand();
EntitySet ent;
RBList mask(RTDXF0, _T("TCH_*,TEXT"), NULL);
XPoint pt;
if (GlobalFunc::SelectEntity(_T("\n屏幕拾取文字内容:"), ent, pt, mask) != RTNORM)
{
CompleteEditorCommand();
return FALSE;
}
PickEntSet ss(SS_FREE);
ss += ent;
SubText* pSubText = GlobalFunc::HitTestOnText(ss, GlobalFunc::Ucs2Wcs(pt));
if (pSubText != NULL)
{
CString sText = pSubText->GetText();
delete pSubText;
m_strInputText.Delete(l, h - l);
m_strInputText.Insert(l, sText);
i = l + sText.GetLength();
}
CompleteEditorCommand();
UpdateInputText(); // 回传给子类
CComboBox *pComboBox = NULL;
CEdit *pEdit = NULL;
if (m_pCurWnd->IsKindOf(RUNTIME_CLASS(CComboBox))) {
pComboBox = (CComboBox*)m_pCurWnd;
int index = pComboBox->FindStringExact(0, m_strInputText);
if (index < 0)
pComboBox->InsertString(0, m_strInputText);
pComboBox->SelectString(0, m_strInputText);
pComboBox->SetEditSel(i, i);
}// 以上四行目的为了防止COMBOBOX在已有列表选择一个最匹配的,所加m_strInputText只是临时的。
if (m_pCurWnd->IsKindOf(RUNTIME_CLASS(CEdit))) {
pEdit = (CEdit*)m_pCurWnd;
pEdit->SetSel(i, i);
}
UpdateData(FALSE);
if (pEdit)
pEdit->SetSel(i, i);
else
pComboBox->SetEditSel(i, i);
return TRUE;
}
void CBaseTextDlg::OnOK()
{
g_nHeight = _tstof(m_strHeight);
CModelessDialog::OnOK();
}
void CBaseTextDlg::LoadTextStyle()
{
XSymbolList lstStyle(_T("STYLE"));
for (int m = 0; m < lstStyle.Length(); m++)
m_comboStyleName.AddString(lstStyle[m]);
}
// Modify By Lcf On 2005-6-06-24
void CBaseTextDlg::OnButtonTextHeight()
{
if (m_bModeless && m_bPost)
{
m_nOperCode = 0;
GlobalFunc::PostCommand(_T("` "), false);
}
else
{
GetTextHeight();
acedGetAcadDwgView()->SetFocus();
}
}
void CBaseTextDlg::OnSelchangeComboFongstyle()
{
UpdateData(TRUE);
if (m_comboStyleName.GetCurSel() >= 0)
m_comboStyleName.GetLBText(m_comboStyleName.GetCurSel(), m_strFontStyle);
AcDbObjectId idTextStyle = GlobalFunc::GetTextStyleId(m_strFontStyle);
if (!idTextStyle)
return;
OPENOBJ_BEGIN(idTextStyle, AcDb::kForRead, AcDbTextStyleTableRecord, pStyle);
// sg modify 110118,解决因为文字样式缺少,而产生的崩溃问题
// ASSERT(pStyle);
if (pStyle != NULL)
{
CString strTemp;
strTemp.Format(_T("%.1f"), pStyle->textSize()); //读文字风格的字高
if (_tstof(strTemp) > 1.0E-3)
m_strHeight = strTemp;
}
else
{
AfxMessageBox(_T("文字风格已删除!"));
}
OPENOBJ_END();
UpdateData(FALSE);
m_comboStyleName.SetCurSel(m_comboStyleName.FindStringExact(0, m_strFontStyle));
}
void CBaseTextDlg::Obj2Dlg(AecXDbSymbWithText *pText)
{
m_strHeight.Format(_T("%.1f"), pText->GetTextHeight());
AcDbObjectId idTextStyle = pText->GetTextStyleId();
OPENOBJ_BEGIN(idTextStyle, AcDb::kForRead, AcDbTextStyleTableRecord, pStyle);
// sg modify 110118,解决因为文字样式缺少,而产生的崩溃问题
// ASSERT(pStyle);
if (pStyle != NULL)
{
const TCHAR* pName = NULL;
if (pStyle->getName(pName) == Acad::eOk && pName != NULL)
m_strFontStyle = pName;
else
AfxMessageBox(_T("文字风格已删除!"));
}
else
{
AfxMessageBox(_T("文字风格已删除!"));
}
OPENOBJ_END();
}
void CBaseTextDlg::Dlg2Obj(AecXDbSymbWithText *pText)
{
AcDbObjectId idTextStyle = GlobalFunc::GetTextStyleId(m_strFontStyle);
if (!idTextStyle)
return;
pText->SetTextStyleId(idTextStyle);
g_nHeight = _tstof(m_strHeight);
pText->SetTextHeight(g_nHeight);
}
// Add By Lcf On 2005-6-06-24
void CBaseTextDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
{
CModelessDialog::OnActivate(nState, pWndOther, bMinimized);
if (nState == WA_CLICKACTIVE)
{
CWnd *pWnd = GetCurWnd();
CWnd *pWnd1 = this->GetFocus();
if (pWnd->IsKindOf(RUNTIME_CLASS(CComboBox)))
{
CComboBox *pComboBox = (CComboBox*)pWnd;
if (pComboBox->m_hWnd == pWnd1->GetParent()->m_hWnd)
{
int nSel = pComboBox->GetWindowTextLength();
pComboBox->SetEditSel(nSel, nSel);
}
}
else if (pWnd->IsKindOf(RUNTIME_CLASS(CEdit)))
{
CEdit *pEdit = (CEdit*)pWnd;
if (pEdit->m_hWnd == pWnd1->m_hWnd)
{
int nBegin = pEdit->LineIndex(pEdit->GetLineCount() - 1);
int nEnd = nBegin + pEdit->LineLength(nBegin);
pEdit->SetSel(nEnd, nEnd);
}
}
}
else if (nState == WA_INACTIVE)
{
UpdateData();
if (m_bModeless && m_bPost)
GlobalFunc::PostCommand(_T("` "), false);
}
}
// Add By Lcf On 2005-6-06-24
void CBaseTextDlg::OnClose()
{
if (m_bModeless)
{
m_bPost = FALSE;
GlobalFunc::PostCommand(_T(" "), false);
}
CModelessDialog::OnClose();
}
// Add By Lcf On 2005-6-06-24
void CBaseTextDlg::GetTextHeight()
{
XPushAutoHide noAutoHide(this);
PushMemVar<BOOL> vTemp(m_bPost, FALSE);
m_nOperCode = -1;
UpdateData(TRUE);
double nHeight = _tstof(m_strHeight) * GlobalFunc::DocGetPScale();
BeginEditorCommand();
if (GlobalFunc::GetDist(_T("\n字高"), nHeight, RSG_NOZERO | RSG_NONEG) == RTNORM) {
nHeight /= GlobalFunc::DocGetPScale();
m_strHeight.Format(_T("%.1f"), nHeight);
}
CompleteEditorCommand();
UpdateData(FALSE);
}
#pragma endregion
#pragma region CArrowTextDlg
const int maxHisList = 10;
extern double g_nHeight;
static int g_nArrowAlign = 0;
static AecXDbSymbArrow::TArTextAlign g_ArrowAlign[] = { AecXDbSymbArrow::kAtSide,
AecXDbSymbArrow::kAlignMid, AecXDbSymbArrow::kAlignEnd };
//extern int g_Option::instance().g_nSymbArrowStyle;
BOOL CArrowTextDlg::m_bContinue = TRUE; // Add by lcf on 2005-06-29
CString CArrowTextDlg::g_csArrowSize = _T("3.0");
// sg add 090123
CString CArrowTextDlg::m_csText = _T("");
CString CArrowTextDlg::m_csText2 = _T("");
IMPLEMENT_DYNAMIC(CArrowTextDlg, CBaseTextDlg)
CArrowTextDlg::CArrowTextDlg(CWnd* pParent /*=NULL*/)
: CBaseTextDlg(CArrowTextDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CArrowTextDlg)
//}}AFX_DATA_INIT
}
void CArrowTextDlg::DoDataExchange(CDataExchange* pDX)
{
CBaseTextDlg::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CArrowTextDlg)
// DDX_CBString(pDX, IDC_COMBO_HISTORY_TEXT, m_strInputText); // sg modify 090225
// sg modify 090507,仿照图名标注,试着解决“对象编辑中,有时候文字显示有问题”的BUG
if (pDX->m_bSaveAndValidate)
{
DDX_CBString(pDX, IDC_COMBO_HISTORY_TEXT, m_csText);
DDX_CBString(pDX, IDC_COMBO_TEXT2, m_csText2);
}
else
{
GetDlgItem(IDC_COMBO_HISTORY_TEXT)->SetWindowText(m_csText);
GetDlgItem(IDC_COMBO_TEXT2)->SetWindowText(m_csText2);
}
DDX_Control(pDX, IDC_COMBO_HISTORY_TEXT, m_comboHistory);
DDX_CBString(pDX, IDC_ARROW_SIZE, g_csArrowSize);
if (pDX->m_bSaveAndValidate && _tstof(g_csArrowSize) < 1.0E-3)
pDX->Fail();
DDX_Check(pDX, IDC_CONTINUE, m_bContinue);
DDX_CBIndex(pDX, IDC_COMBO_ALIGNMENT, g_nArrowAlign);
DDX_CBIndex(pDX, IDC_ARROW_STYLE, g_Option::instance().g_nSymbArrowStyle); // Add by lcf on 20050809
DDX_Control(pDX, IDC_COMBO_TEXT2, m_comboText2); // sg add 090108,增加线下文字
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CArrowTextDlg, CBaseTextDlg)
//{{AFX_MSG_MAP(CArrowTextDlg)
ON_CBN_SELCHANGE(IDC_COMBO_HISTORY_TEXT, OnSelchangeComboHistoryText)
// sg add 090108
ON_CBN_SELCHANGE(IDC_COMBO_TEXT2, OnSelchangeComboText2)
ON_CBN_SELCHANGE(IDC_COMBO_ALIGNMENT, OnSelchangeComboAlignment)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CArrowTextDlg message handlers
BOOL CArrowTextDlg::OnInitDialog()
{
CBaseTextDlg::OnInitDialog();
LoadHisText();
UpdateData(FALSE);
if (m_bModeless) // sg add 090507,仿照图名标注修改
{
if (m_comboHistory.GetCount() == 0)
m_csText = _T("上");
// m_strInputText = _T("上"); // sg modify 090225
// else if (m_strInputText==_T("")) // sg modify 090123,林工提出需求,有时候会希望这里不填内容
// m_comboHistory.SetCurSel(0);
if (m_comboText2.GetCount() == 0)
m_csText2 = _T("下");
// else if (m_csText2==_T("") && m_bModeless && bEnable) // sg delete 090123
// m_comboText2.SetCurSel(0);
}
// sg add 090108,在线端,只能显示一行文字
BOOL bEnable = g_ArrowAlign[g_nArrowAlign] != AecXDbSymbArrow::kAtSide;
GetDlgItem(IDC_COMBO_TEXT2)->EnableWindow(bEnable);
SetDlgItemText(IDC_ARROW_SIZE, g_csArrowSize);
m_comboHistory.SetFocus();
UpdateData(FALSE);
return FALSE; // return TRUE unless you set the focus to a control
}
void CArrowTextDlg::LoadHisText()
{
TCHAR strTmpPath[100] = _T("");
GetTempPath(100, strTmpPath);
_tcscat(strTmpPath, _T("arrow.his"));
std:: ifstream in(strTmpPath);
while (!(!in)) {
char line[256] = "";
in.getline(line, 255);
if (!in) break;
m_lstHistory.Append(tstrnew(TString(line)));
}
for (int m = 0; m < m_lstHistory.Length(); m++)
{
m_comboHistory.AddString(m_lstHistory[m]);
m_comboText2.AddString(m_lstHistory[m]); // sg add 090108
}
UpdateData(false);
}
void CArrowTextDlg::Obj2Dlg(AecXDbSymbArrow *pText)
{
CBaseTextDlg::Obj2Dlg(pText);
// m_strInputText = pText->GetText();
m_csText = pText->GetText(); // sg add 090225
AecXDbSymbArrow::TArTextAlign Align = pText->GetTextAlign();
for (int i = 0; i < 3; i++)
{
if (Align == g_ArrowAlign[i])
g_nArrowAlign = i;
}
g_csArrowSize.Format(_T("%.1f"), pText->GetArrowSize());
g_Option::instance().g_nSymbArrowStyle = (int)pText->GetArrowType();
m_csText2 = pText->GetText2(); // sg add 090108
}
void CArrowTextDlg::Dlg2Obj(AecXDbSymbArrow *pText)
{
CBaseTextDlg::Dlg2Obj(pText);
// pText->SetText(m_strInputText); // sg modify 090225
pText->SetText(m_csText);
pText->SetTextAlign(g_ArrowAlign[g_nArrowAlign]);
pText->SetTextLocation(pText->GetDefaultTextLocation());
pText->SetText2Location(pText->GetDefaultText2Location()); // sg add 090107
pText->SetText2(m_csText2); // sg add 090108
BOOL bShowText2 = !m_csText2.IsEmpty();
pText->SetShowText2(bShowText2);
double nSize = _tstof(g_csArrowSize);
if (nSize > 1.0E-3)
pText->SetArrowSize(nSize);
pText->SetArrowType((AecXDbSymbArrow::TArrowType)g_Option::instance().g_nSymbArrowStyle);
}
void CArrowTextDlg::OnOK()
{
AddToRecent();
CBaseTextDlg::OnOK();
}
// Add by lcf on 20050708
void CArrowTextDlg::AddToRecent()
{
{
UpdateData(TRUE);
int len = m_lstHistory.Length();
TCHAR strTmpPath[256] = _T("");
GetTempPath(255, strTmpPath);
_tcscat(strTmpPath, _T("arrow.his"));
#if (ARX>15)
std::
#endif
ofstream out(strTmpPath);
// if (m_strInputText != _T("")) // sg add 090225
if (m_csText != _T(""))
{
// out << (const char *)_AS(m_strInputText) << "\n";
// int index = m_lstHistory.Index(m_strInputText);
out << (const char *)_AS(m_csText) << "\n"; // sg add 090225
int index = m_lstHistory.Index(m_csText);
if (index >= 0)
{
m_lstHistory.Remove(index);
len--;
}
if (len > maxHisList - 1)
len = maxHisList - 1;
}
// if (m_csText2!=_T("") && _tcscmp(m_csText2, m_strInputText)!=0) // sg add 090108
if (m_csText2 != _T("") && _tcscmp(m_csText2, m_csText) != 0) // sg modify 090225
{
out << (const char *)_AS(m_csText2) << "\n";
int nIndex = m_lstHistory.Index(m_csText2);
if (nIndex >= 0)
{
m_lstHistory.Remove(nIndex);
len--;
}
if (len > maxHisList - 1)
len = maxHisList - 1;
}
for (int i = 0; i < len; i++)
out << _AS(m_lstHistory[i]) << "\n";
}
m_lstHistory.Reset();
m_comboHistory.ResetContent();
m_comboText2.ResetContent(); // sg add 090108
LoadHisText();
}
void CArrowTextDlg::OnSelchangeComboHistoryText()
{
// if (m_comboHistory.GetCurSel()>=0)
// m_comboHistory.GetLBText(m_comboHistory.GetCurSel(), m_csText);
// sg modify 090507,仿照图名标注,进行修改
CComboBox *pBox = (CComboBox*)GetDlgItem(IDC_COMBO_HISTORY_TEXT);
int nIndex = pBox->GetCurSel();
if (nIndex >= 0)
pBox->GetLBText(nIndex, m_csText);
pBox->SetWindowText(m_csText);
UpdateData();
}
// sg add 090108,sg modify 090507,仿照图名标注,进行修改
void CArrowTextDlg::OnSelchangeComboText2()
{
CComboBox *pBox = (CComboBox*)GetDlgItem(IDC_COMBO_TEXT2);
int nIndex = pBox->GetCurSel();
if (nIndex >= 0)
pBox->GetLBText(nIndex, m_csText2);
pBox->SetWindowText(m_csText2);
UpdateData();
}
void CArrowTextDlg::OnSelchangeComboAlignment()
{
UpdateData(TRUE);
BOOL bEnable = g_ArrowAlign[g_nArrowAlign] != AecXDbSymbArrow::kAtSide;
GetDlgItem(IDC_COMBO_TEXT2)->EnableWindow(bEnable);
UpdateData(FALSE);
}
CWnd* CArrowTextDlg::GetCurWnd()
{
// CWnd *pWnd = GetDlgItem(IDC_COMBO_HISTORY_TEXT); // 把CWnd 回传给基类
// return (pWnd);
UpdateData(TRUE); // sg modify 090225
CWnd *pWnd = this->GetFocus();
CWnd *pWnd2 = NULL;
if (m_comboHistory.m_hWnd == pWnd->GetParent()->m_hWnd)
{
pWnd2 = GetDlgItem(IDC_COMBO_HISTORY_TEXT); // 把CWnd 回传给基类
m_strInputText = m_csText;
}
else if (m_comboText2.m_hWnd == pWnd->GetParent()->m_hWnd)
{
pWnd2 = GetDlgItem(IDC_COMBO_TEXT2); // 把CWnd 回传给基类
m_strInputText = m_csText2;
}
else
{
int nSel = m_comboHistory.GetWindowTextLength();
m_comboHistory.SetEditSel(nSel, nSel);
pWnd2 = GetDlgItem(IDC_COMBO_HISTORY_TEXT);
}
return(pWnd2);
}
// sg add 090225
void CArrowTextDlg::UpdateInputText()
{
CWnd *pWnd = this->GetFocus();
if (m_comboHistory.m_hWnd == pWnd->GetParent()->m_hWnd)
m_csText = m_strInputText;
if (m_comboText2.m_hWnd == pWnd->GetParent()->m_hWnd)
m_csText2 = m_strInputText;
UpdateData(FALSE);
}
#pragma endregion
#pragma region CCoordDlg
int CCoordDlg::s_iUnitType = 0;//默认为mm M
int CCoordDlg::s_iDataType = 0;//默认为WCS
// [10/19/2007 nsh]
CCoordDlg * CCoordDlg::m_pSelf = NULL;//指向自身的指针
CString CCoordDlg::m_strAngle = "45";//初始的角度值
BOOL CCoordDlg::m_bFixAngle = FALSE;
//----------------
IMPLEMENT_DYNAMIC(CCoordDlg, CAcUiDialog)
CCoordDlg::CCoordDlg(UINT resId, CWnd* pParent /*=NULL*/)
: CAcUiDialog(resId, pParent)
{
m_iABCoord = g_Option::instance().g_bABCoord;
m_iPreci = g_Option::instance().g_nCoordPrec;
m_nArrowStyle = g_Option::instance().g_nCoordArrowStyle;
}
CCoordDlg::~CCoordDlg()
{
}
void CCoordDlg::DoDataExchange(CDataExchange* pDX)
{
CAcUiDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_COMBO_UNIT, m_cmbUnit);
DDX_Control(pDX, IDC_COMBO_PRECI, m_cmbPreci);
DDX_Control(pDX, IDS_TYPE, m_staticType);
DDX_CBIndex(pDX, IDC_COMBO_UNIT, s_iUnitType);
DDX_CBIndex(pDX, IDC_COMBO_PRECI, m_iPreci);
DDX_Text(pDX, IDC_NORTH_ANGLE, m_fAngle);
DDX_Radio(pDX, IDC_WCS, s_iDataType);
DDX_Radio(pDX, IDC_TYPE_XY, m_iABCoord);
// [10/22/2007 nsh]
DDX_CBString(pDX, IDC_COMBO1, m_strAngle);//映射角度
DDX_Check(pDX, IDC_CHECK1, m_bFixAngle);
//--end--------------
if (!pDX->m_bSaveAndValidate)
{
if (m_iABCoord == 1)
m_staticType.SetWindowText(_T(" A= ---- B="));
else
m_staticType.SetWindowText(_T(" X= ---- Y="));
GetDlgItem(IDC_PICK_NORTH)->EnableWindow(IsWcsPoint());
GetDlgItem(IDC_NORTH_ANGLE)->EnableWindow(IsWcsPoint());
GetDlgItem(IDC_NORTH_THUMB)->EnableWindow(IsWcsPoint());
GetDlgItem(IDC_REF_POINT)->EnableWindow(!IsRedLinePoint());
}
DDX_CBIndex(pDX, IDC_ARROW_STYLE, m_nArrowStyle);// Add by lcf on 20050809
}
BOOL CCoordDlg::OnInitDialog()
{
if (!CAcUiDialog::OnInitDialog())
return FALSE;
// [10/22/2007 nsh]
this->GetDlgItem(IDC_COMBO1)->EnableWindow(m_bFixAngle);
m_cmbUnit.AddString(_T("mm M"));
m_cmbUnit.AddString(_T("M M"));
m_cmbPreci.AddString(_T("0"));
m_cmbPreci.AddString(_T("0.0"));
m_cmbPreci.AddString(_T("0.00"));
m_cmbPreci.AddString(_T("0.000"));
m_cmbPreci.AddString(_T("0.0000"));
m_cmbPreci.AddString(_T("0.00000"));
m_cmbPreci.AddString(_T("0.000000"));
UpdateData(FALSE);
return TRUE;
}
BEGIN_MESSAGE_MAP(CCoordDlg, CAcUiDialog)
ON_BN_CLICKED(IDC_TYPE_XY, OnClickRadio)
ON_BN_CLICKED(IDC_TYPE_AB, OnClickRadio)
ON_BN_CLICKED(IDC_UCS, OnClickRadio)
ON_BN_CLICKED(IDC_WCS, OnClickRadio)
ON_BN_CLICKED(IDC_REDLINE, OnClickRadio)
ON_BN_CLICKED(IDC_REF_POINT, OnRefPoint)
ON_BN_CLICKED(IDC_NORTH_THUMB, OnNorthThumb)
ON_BN_CLICKED(IDC_PICK_NORTH, OnPickNorth)
// [10/22/2007 nsh]
ON_BN_CLICKED(IDC_CHECK1, OnClickCheck1)
//---end---
END_MESSAGE_MAP()
void CCoordDlg::OnNorthThumb()
{
Entity ent0;
BeginEditorCommand();
int nRetCode = ent0.FilterSelect(_T("\n选择指北针:"), RBList(RTDXF0, _T("TCH_NORTHTHUMB"), NULL));
CompleteEditorCommand();
if (nRetCode == RTCAN)
return;
if (nRetCode == RTNORM)
{
UpdateData();
ent0.GetData(50, &m_fAngle);
m_fAngle = CT_std_angle(m_fAngle) * 180 / PI;
//add tyj 20160901:添加精度设置,防止指北针设置角度与坐标标注显示的北向角度不一致的问题
int luprec, auprec;
VERIFY(xg_getvar(_T("LUPREC"), &luprec) == RTNORM &&
xg_getvar(_T("AUPREC"), &auprec) == RTNORM);
if (auprec == 0)//保留整数
{
m_fAngle = int(m_fAngle + 0.5);
}
else
{
double dPrecisionCompute = 1.0;//计算精度的辅助变量
while (auprec != 0)
{
dPrecisionCompute = dPrecisionCompute * 10.0;
auprec--;
}
m_fAngle = int((m_fAngle + 0.5 / dPrecisionCompute) * dPrecisionCompute) / dPrecisionCompute;
}
UpdateData(FALSE);
}
}
// modify by lcf on 20050809
void CCoordDlg::OnPickNorth()
{
BeginEditorCommand();
UpdateData();
int nRetCode;
XPoint ptBase;
XString sNote;
INITGET_BEG(0, _T("S"));
sNote << _T("\n指定第一点或 [选择已有坐标标注确定北向(S)]<") << m_fAngle << _T(">:");
nRetCode = acedGetPoint(NULL, sNote, ptBase);
INITGET_END();
if (nRetCode == RTNORM)
nRetCode = acedGetAngle(ptBase, _T("\n输入北向的WCS角度<返回>:"), &m_fAngle);
if (nRetCode == RTNORM)
{
m_fAngle = CT_std_angle(m_fAngle) * 180 / PI;
UpdateData(FALSE);
}
else if (nRetCode == RTKWORD)
{
RBList mask(RTDXF0, _T("TCH_COORD"), NULL);
PickSet ss(SS_FREE);
if (GlobalFunc::SelectEntities(_T("\n请选择两个上华坐标标注确定北向角度<返回>: "), ss, mask) == RTNORM)
{
if (ss.Length() == 2)
{
AcGeVector3d vtLoc, vtVal;
OPENOBJ_BEGIN(ss[(long)0], AcDb::kForWrite, AecXDbSymbCoord, pDim1);
if (pDim1)
{
XPoint ptLoc1 = pDim1->GetLocation();
XPoint ptVal1 = pDim1->GetValue();
OPENOBJ_BEGIN(ss[(long)1], AcDb::kForWrite, AecXDbSymbCoord, pDim2);
if (pDim2)
{
XPoint ptLoc2 = pDim2->GetLocation();
XPoint ptVal2 = pDim2->GetValue();
vtLoc = ptLoc2.AsAcGeVector3d() - ptLoc1.AsAcGeVector3d();
vtVal = ptVal2.AsAcGeVector3d() - ptVal1.AsAcGeVector3d();
m_fAngle = PI / 2 - vtLoc.angleTo(vtVal, AcGeVector3d::kZAxis);
m_fAngle = CT_std_angle(m_fAngle) * 180 / PI;
UpdateData(FALSE);
}
OPENOBJ_END();
}
OPENOBJ_END();
}
}
}
CompleteEditorCommand();
}
void CCoordDlg::OnRefPoint()
{
PickSet ssAll(SS_FREE);
if (ssAll.Get(_T("X"), NULL, NULL, NULL) != RTNORM)
return;
UpdateData();
XPoint pt0;
BeginEditorCommand();
int nRetCode = ads_getpoint(NULL, _T("\n点取参考点:"), pt0);
if (nRetCode != RTNORM)
{
CompleteEditorCommand();
return;
}
if (IsWcsPoint())
pt0 = GlobalFunc::Ucs2Wcs(pt0);
while (true)
{
XPoint pt1 = pt0;
if (IsWcsPoint())
{
pt1.Rotate(PI / 2 - m_fAngle * PI / 180);//转换为北向坐标,add by whl on 050726
g_Option::instance().adsout << _T("\n当前北向角度:") << GlobalFunc::Angle2Str(m_fAngle) << _T("度");
}
g_Option::instance().adsout << _T("\n输入坐标值<") << pt1.x << _T(",") << pt1.y << _T(">:");
XString sText(256);
nRetCode = ads_getstring(0, _T(""), sText);
if (nRetCode != RTNORM)
break;
if (!!sText)
if (_stscanf(sText, _T("%lf,%lf"), &pt1.x, &pt1.y) != 2)
{
g_Option::instance().adsout << _T("\n请按格式x,y正确输入坐标!");
continue;
}
if (IsUcsPoint())//移动用户坐标系
{
XPushVar<int> vOsMode(_T("OSMODE"), 0);
XPoint ptOrg = pt0 - pt1;
SHads_command(RTSTR, _T("UCS"), RTSTR, _T("M"), RT3DPOINT, &ptOrg, RTNONE);
}
else//移动世界坐标系
{
XPushVar<int> vOsMode(_T("OSMODE"), 0);
//输入北向坐标转化为世界坐标,add by whl on 050726
pt1.Rotate(-PI / 2 + m_fAngle * PI / 180);
// Zyu modify on 100726,支持64位
//ads_command(RTSTR,_T("MOVE"),RTPICKS,(long *)ssAll,RTSTR,_T(""),RT3DPOINT,&pt0,RT3DPOINT,&pt1,RTNONE);
SHads_command(RTSTR, _T("MOVE"), RTPICKS, (LONG_PTR *)ssAll, RTSTR, _T(""), RT3DPOINT, &pt0, RT3DPOINT, &pt1, RTNONE);
SHads_command(RTSTR, _T("PAN"), RT3DPOINT, &pt1, RT3DPOINT, &pt0, RTNONE);
}
break;
}
CompleteEditorCommand();
}
void CCoordDlg::OnClickRadio()
{
UpdateData();
UpdateData(FALSE);
}
void CCoordDlg::OnOK()
{
CAcUiDialog::OnOK();
g_Option::instance().g_bABCoord = m_iABCoord;
g_Option::instance().g_nCoordPrec = m_iPreci;
g_Option::instance().g_nCoordArrowStyle = m_nArrowStyle;
GlobalFunc::DocSetMeterUnitDraw(CCoordDlg::s_iUnitType);
if (CCoordDlg::s_iUnitType == 1)
GlobalFunc::DocSetMeterUnitDim(TRUE);
}
// [10/22/2007 nsh]
void CCoordDlg::OnClickCheck1()
{
if (m_bFixAngle)
m_bFixAngle = FALSE;
else
m_bFixAngle = TRUE;
this->GetDlgItem(IDC_COMBO1)->EnableWindow(m_bFixAngle);
}
//--end--
#pragma endregion
#pragma region CBatchDimDlg
BOOL CBatchDimDlg::m_bPolyVertex = TRUE; // 多段线端点
BOOL CBatchDimDlg::m_bLineVertex = FALSE; // 直线、弧线端点
BOOL CBatchDimDlg::m_bElevLoc = FALSE; // 标高符号插入点
BOOL CBatchDimDlg::m_bIntersectPt = FALSE; // 交点
BOOL CBatchDimDlg::m_bPoint = FALSE; // 点
BOOL CBatchDimDlg::m_bCirclePt = FALSE; // 圆心
CString CBatchDimDlg::m_strDimlayers = _T(""); // 图层
BOOL CBatchDimDlg::m_bAppoint = FALSE;
//Adesk::Boolean acedPostCommand(const TCHAR *);
IMPLEMENT_DYNAMIC(CBatchDimDlg, CModelessDialog)
CBatchDimDlg::CBatchDimDlg(CWnd* pParent) : CModelessDialog(CBatchDimDlg::IDD, pParent)
{
m_bPost = FALSE;
}
CBatchDimDlg::~CBatchDimDlg()
{
}
void CBatchDimDlg::DoDataExchange(CDataExchange* pDX)
{
CModelessDialog::DoDataExchange(pDX);
DDX_Check(pDX, IDC_CHK_POLYVERTEX, m_bPolyVertex);
DDX_Check(pDX, IDC_CHK_LINEVERTEX, m_bLineVertex);
DDX_Check(pDX, IDC_CHK_ELEVLOC, m_bElevLoc);
DDX_Check(pDX, IDC_CHK_INTERSECTPT, m_bIntersectPt);
DDX_Check(pDX, IDC_CHK_POINT, m_bPoint);
DDX_Check(pDX, IDC_CHK_CIRCLEPT, m_bCirclePt);
DDX_Check(pDX, IDC_CHK_APPOINTLAYER, m_bAppoint);
}
BOOL CBatchDimDlg::OnInitDialog()
{
CModelessDialog::OnInitDialog();
if (m_bAppoint) //是否指定图层
{
GetDlgItem(IDC_BTN_SELECTINDRAW)->EnableWindow(TRUE);
}
else
{
GetDlgItem(IDC_BTN_SELECTINDRAW)->EnableWindow(FALSE);
}
UpdateData(FALSE);
return TRUE;
}
BEGIN_MESSAGE_MAP(CBatchDimDlg, CModelessDialog)
ON_BN_CLICKED(IDC_BTN_ALLSELECT, OnClickAllSelect)
ON_BN_CLICKED(IDC_BTN_ALLCLERA, OnClickAllClear)
ON_BN_CLICKED(IDC_BTN_SELECTINDRAW, OnClickSelectInDraw)
ON_BN_CLICKED(IDC_CHK_APPOINTLAYER, OnBnClickAppointlayer)
ON_WM_CLOSE()
END_MESSAGE_MAP()
void CBatchDimDlg::OnClickAllSelect() // 全选
{
m_bPolyVertex = TRUE;
m_bLineVertex = TRUE;
m_bElevLoc = TRUE;
m_bIntersectPt = TRUE;
m_bPoint = TRUE;
m_bCirclePt = TRUE;
UpdateData(FALSE);
}
void CBatchDimDlg::OnClickAllClear() // 清空
{
m_bPolyVertex = FALSE;
m_bLineVertex = FALSE;
m_bElevLoc = FALSE;
m_bIntersectPt = FALSE;
m_bPoint = FALSE;
m_bCirclePt = FALSE;
UpdateData(FALSE);
}
void CBatchDimDlg::OnClose()
{
m_bPost = FALSE;
if (m_bModeless)
{
acedPostCommand(_T("\33\33"));
}
else
{
CModelessDialog::OnClose();
}
}
void CBatchDimDlg::OnClickSelectInDraw()
{
/*CLayerSiftDlg dlg;
dlg.SetLayerName(m_aryAddLayer); // 专门用于屏幕拾取对象
if (dlg.DoModal() == IDOK)
{
if (dlg.m_bSelectEnt) // 当前是在屏幕提取对象
{
m_bPost = TRUE;
if (m_bModeless)
{
acedPostCommand(_T("\33"));
}
}
else
{
m_bPost = FALSE;
m_aryAddLayer.RemoveAll(); // 添加成功
m_strDimlayers = dlg.GetLayerName();
UpdateData(FALSE);
}
}
else
{
m_bPost = FALSE;
m_aryAddLayer.RemoveAll(); // 不需要添加
}*/
}
void CBatchDimDlg::SelectEntInDraw()
{
XPushAutoHide noAutoHide(this);
BeginEditorCommand();
PickSet entSetInDraw;
RBList rb;
if (GlobalFunc::SelectEntities(_T("\n请选择对象<返回>: "), entSetInDraw, rb) == RTNORM)
{
CStringArray aryLayers;
for (long i = 0; i < entSetInDraw.Length(); i++)
{
OPENOBJ_BEGIN(entSetInDraw[i], AcDb::kForRead, AcDbEntity, pEntity);
if (!pEntity)
{
continue;
}
bool bFind = false;
CString csLayText = pEntity->layer();
for (int j = 0; j < aryLayers.GetSize(); j++)
{
if (csLayText == aryLayers[j])
{
bFind = true;
break;
}
}
if (!bFind) // 没有找到,添加
aryLayers.Add(csLayText);
OPENOBJ_END();
}
if (aryLayers.GetSize() > 0)
m_aryAddLayer.Append(aryLayers);
}
CompleteEditorCommand();
}
BOOL CBatchDimDlg::GetIsPolyVertex()
{
UpdateData(TRUE);
return m_bPolyVertex;
}
BOOL CBatchDimDlg::GetIsLineVertex()
{
UpdateData(TRUE);
return m_bLineVertex;
}
BOOL CBatchDimDlg::GetIsElevLoc()
{
UpdateData(TRUE);
return m_bElevLoc;
}
BOOL CBatchDimDlg::GetIsIntersectPt()
{
UpdateData(TRUE);
return m_bIntersectPt;
}
BOOL CBatchDimDlg::GetIsPoint()
{
UpdateData(TRUE);
return m_bPoint;
}
BOOL CBatchDimDlg::GetIsCirclePt()
{
UpdateData(TRUE);
return m_bCirclePt;
}
void CBatchDimDlg::OnBnClickAppointlayer()
{
/*UpdateData(TRUE);
if (m_bAppoint) // 指定图层过滤
{
GetDlgItem(IDC_BTN_SELECTINDRAW)->EnableWindow(TRUE);
if (m_strDimlayers.IsEmpty()) // 如果图层过滤表为空,那么就判断一下是否有文件
{
CLayerSiftDlg dlg;
dlg.GetLayerInIniFiles();
m_strDimlayers = dlg.GetLayerName();
}
}
else
{
GetDlgItem(IDC_BTN_SELECTINDRAW)->EnableWindow(FALSE);
}*/
}
BOOL CBatchDimDlg::GetIsAppointLayer()
{
UpdateData(TRUE);
BOOL bAppoint = m_bAppoint;
if (m_strDimlayers.IsEmpty())
{
bAppoint = FALSE;
}
return bAppoint;
}
CString CBatchDimDlg::GetStrLayerName()
{
return m_strDimlayers;
}
#pragma endregion
#pragma region CElevDlg
int g_iPrecision = 1; // 当前精度
CElevDlg *CElevDlg::g_pElevDlg = NULL;
CElevDlg::CElevDlg(AecXDbSymbElevation*pElev) : CModelessDialog(IDD_ELEV, acedGetAcadFrame())
, m_pElev(pElev), m_bSitePlanDlg(TRUE)
{
m_bDlgType = FALSE; // 对象编辑对话框为FALSE
g_nElevType = pElev->IsArchElev() ? 0 : 1; // 标高类型:建筑为0,总图为1
SetArchElevGrid(); // 设置表格行数、表头
g_bHatch = pElev->IsFilled(); // 符号样式
g_bDote = pElev->IsDote(); // sg add 090212,圆点样式
g_bHollow = pElev->IsHollowTriangle(); // sg add 120608,是否是三角形空心标高符号
g_bHasBase = pElev->HasBaseLine();
g_bHasLeader = pElev->HasLeader();
g_bElevCross = pElev->IsCross();
// if (g_bHatch || g_bDote || g_bHasBase || g_bHasLeader)
if (g_bHatch || g_bDote || g_bHollow || g_bHasBase || g_bHasLeader || g_bElevCross) // sg add 090226,普通样式
g_bCommonElev = FALSE;
else
g_bCommonElev = TRUE;
// m_ComBox.SetCurSel(1); // sg delete 090312
g_iPrecision = pElev->IsPrec2() ? 0 : 1; // 当前精度
g_bElevSideText = pElev->IsAtLineSide(); // 文字是否齐线端
// if (g_bHatch || g_bDote) // 文字是否居中
if (g_bHatch && g_nElevType == 0) // 修改后,只有建筑标高才用该数据,文字是否居中
g_bElevMidText = pElev->IsUpDownTextElev();
else if (g_nElevType == 1 && g_bCommonElev) // 总图,普通标高,对齐方式
g_nElevTextAlign = (pElev->IsUpDownTextElev()) ? 0 : 1;
// sg add 120608,从对象中获得总图标高默认文字位置,不包含普通标高样式
if (g_bHatch || g_bDote || g_bElevCross)
{
if ((g_bHatch || g_bElevCross) && pElev->IsNewSitePlanElev())
m_csTextLoc = _T("右上");
else if (pElev->IsUpDownTextElev())
m_csTextLoc = _T("上部");
else
m_csTextLoc = _T("右侧");
}
else if (g_bHollow)
m_csTextLoc = _T("上部");
else
m_csTextLoc = g_csTextLoc;
g_csTextLoc = m_csTextLoc;
InitGridAndTextFromEnt(); // 添写表格、编辑框内容
g_bOrder = FALSE; // 是否对齐标注
g_bHightWrite = TRUE; // 是否手工输入
g_bStandard = pElev->IsStandard(); // 是否规范样式
g_bParentheses = pElev->IsParentheses(); // 是否加括号
double dTextHeight = pElev->GetTextHeight(); // sg add 090209,字高
m_csTextHeight.Format(_T("%.1f"), dTextHeight);
g_csAbsoluteElev = pElev->GetText();
AcDbObjectId idTextStyle = pElev->GetTextStyleId(); // sg add 090209,文字样式
OPENOBJ_BEGIN(idTextStyle, AcDb::kForRead, AcDbTextStyleTableRecord, pStyle);
ASSERT(pStyle);
const TCHAR* pName = NULL;
if (pStyle->getName(pName) == Acad::eOk && pName != NULL)
m_csFontStyle = pName;
else
AfxMessageBox(_T("文字风格已删除!"));
OPENOBJ_END();
}
CElevDlg::CElevDlg(CWnd *pParent)
: CModelessDialog(IDD_ELEV, pParent)
{
m_bDlgType = TRUE; // 绘制对话框为TRUE
SetArchElevGrid(); // 设置表格行数、表头
m_grid.Clear(); // sg add 090313,读取表格内容记忆值
m_grid.AppendRow();
CString csTexts = (LPCTSTR)g_szGridText;
// sg add 090505,根据表格内容,重新修正,初次显示对话框时,是否手工输入
BOOL bHandWrite = g_bHightWrite;
while (!csTexts.IsEmpty())
{
// sg modify 120608,9.0起修改区分多层标高的分隔符号,由“/”变成“$”
// int nResult = csTexts.Find(_T("/")),
int nResult = csTexts.Find(_T("$")),
nLength = csTexts.GetLength();
nResult = (nResult < 0) ? nLength : nResult;
CString csCell0 = csTexts.Left(nResult),
csCell1 = _T("");
int nNext = nLength - nResult - 1;
if (nNext > 0)
csTexts = csTexts.Right(nNext);
else
csTexts = _T("");
int nRet = csCell0.Find(_T("&"));
if (nRet > 0) // 解析表格第二行
{
csCell1 = csCell0.Right(csCell0.GetLength() - nRet - 1);
csCell0 = csCell0.Left(nRet);
bHandWrite = TRUE; // sg add 090505,有楼号,手工输入
}
long lRowNum = m_grid.GetRowNum() - 1;
m_grid[lRowNum][0].SetText(csCell0);
m_grid[lRowNum][1].SetText(csCell1);
if (!csTexts.IsEmpty())
{
m_grid.AppendRow(); // 增加一行,再输入文字
bHandWrite = TRUE; // sg add 090505,多层,手工输入
}
}
m_grid.FitLastCol();
if (fabs(g_dTextHeight) < 1.0E-3) // sg add 090209,字高
g_dTextHeight = 3.5;
m_csTextHeight.Format(_T("%.1f"), g_dTextHeight);
m_csFontStyle = g_csFontStyle; // sg add 090216,文字样式
g_bHightWrite = bHandWrite; // sg add 090505
m_csTextLoc = g_csTextLoc; // sg add 120608,总图标高文字位置
m_bSitePlanDlg = TRUE; // jsx add 160520,总图标高对话框
}
CElevDlg::~CElevDlg()
{
if (m_pElev != NULL)
{
m_pElev = NULL;
}
g_pElevDlg = NULL;
}
void CElevDlg::DoDataExchange(CDataExchange*pDX)
{
//{{AFX_DATA_MAP(CElevDlg)
// DDX_Check(pDX,IDC_HATCH,g_bHatch);
// DDX_Check(pDX,IDC_BASE_LINE,g_bHasBase);
// DDX_Check(pDX,IDC_LERDER,g_bHasLeader);
DDX_Control(pDX, IDC_BUTTON1, m_ButHatch);
DDX_Control(pDX, IDC_BUTTON2, m_ButBaseLine);
DDX_Control(pDX, IDC_BUTTON3, m_ButLeadLine);
DDX_Control(pDX, IDC_BUTTON4, m_ButContinue);
DDX_Control(pDX, IDC_BUTTON5, m_ButOrder);
DDX_Control(pDX, IDC_COMBO1, m_ComBox);
DDX_Control(pDX, IDC_CHECKWRITER, m_Rider);
DDX_Control(pDX, IDC_BUTTON6, m_ButDote);
DDX_Control(pDX, IDC_BUTTON_HOLLOW, m_ButHollow);
DDX_Control(pDX, IDC_BUTTON_ELEV_CROSS, m_ButCross);//十字标高
DDX_Control(pDX, IDC_COMBO_HEIGHT, m_cmbTextHeight);
DDX_CBString(pDX, IDC_COMBO_HEIGHT, m_csTextHeight);
if (pDX->m_bSaveAndValidate && _tstof(m_csTextHeight) < 1.0E-3)
pDX->Fail();
DDX_Control(pDX, IDC_COMBO_FONGSTYLE, m_cmbStyleName);
if (pDX->m_bSaveAndValidate)
DDX_CBString(pDX, IDC_COMBO_FONGSTYLE, m_csFontStyle);
DDX_Control(pDX, IDC_COMBO_SITEPLAN_TEXTLOC, m_cmbTextLoc);
if (pDX->m_bSaveAndValidate)
DDX_CBString(pDX, IDC_COMBO_SITEPLAN_TEXTLOC, m_csTextLoc);
DDX_Check(pDX, IDC_CHECK_STANDARD, g_bStandard);
DDX_Check(pDX, IDC_CHECK_PARENTHESES, g_bParentheses);
DDX_Check(pDX, IDC_CHECK_RIGHTTEXT, g_bElevSideText);
DDX_Text(pDX, IDC_EDIT_CONVERSION, g_csElevConversion);
DDX_Check(pDX, IDC_CHECK_DIMZERO, g_bUseConversion);
DDX_Radio(pDX, IDC_RADIO_UPDOWN, g_nElevTextAlign);
DDX_Control(pDX, IDC_TAB_ELEVTYPE, m_Tab);
DDX_Control(pDX, IDC_BUTTON7, m_ButCommon);
DDX_Text(pDX, IDC_EDIT_ABSOLUTEELEV, g_csAbsoluteElev);
DDX_Text(pDX, IDC_EDIT_RELATIVEELEV, g_csRelativeElev);
DDX_Check(pDX, IDC_CHECK_UPTEXT, g_bElevMidText);
//}}AFX_DATA_MAP
}
BOOL CElevDlg::OnInitDialog()
{
BOOL bRes = CModelessDialog::OnInitDialog();
// 1、文字字高、样式设置
LoadTextStyle(); // sg add 090209,加载文字样式
// sg add 120706,增加一个判断,如果当前记忆的样式没有的话,那么使用天正固定的文字样式
int nRet = m_cmbStyleName.FindStringExact(0, m_csFontStyle);
if (nRet < 0) // 当前图纸没有此样式
{
nRet = m_cmbStyleName.FindStringExact(0, _T("_TCH_DIM"));
}
m_cmbStyleName.SetCurSel(nRet);
nRet = m_cmbTextHeight.FindStringExact(0, m_csTextHeight);
if (nRet > 0) // 根据文字样式,调整字高
m_cmbTextHeight.SetCurSel(nRet);
else
{
CString sTemp(m_csTextHeight);
LPTSTR p = sTemp.GetBuffer(100);
g_dTextHeight = _tstof(p);
sTemp.ReleaseBuffer();
m_csTextHeight.Format(_T("%.1f"), g_dTextHeight);
}
// 2、根据对话框类型,设置控件显示状态,add by ZKM
CWnd *pWnd = NULL;
if (m_bDlgType) // 绘制对话框
{
pWnd = GetDlgItem(IDOK); // OK
if (pWnd)
pWnd->ShowWindow(SW_HIDE);
pWnd = GetDlgItem(IDCANCEL); // CANCEL
if (pWnd)
pWnd->ShowWindow(SW_HIDE);
CRect rOk; // sg add 090311,处理模式、非模式对话框时,对话框大小变化
GetDlgItem(IDOK)->GetWindowRect(rOk);
CRect rect;
GetWindowRect(rect);
rect.bottom -= rOk.Height();
rect.bottom -= 5;
MoveWindow(rect);
}
else // 对象编辑对话框
{
pWnd = GetDlgItem(IDC_CHECKWRITER); // 手工输入
if (pWnd)
pWnd->ShowWindow(SW_HIDE);
pWnd = GetDlgItem(IDC_BUTTON5); // 自动对齐
if (pWnd)
pWnd->ShowWindow(SW_HIDE);
}
InitData(); // 设置按钮图片、精确度
// 3、设置内部数据默认值
g_nLeaderLen = 7.0;
g_nBaseLen = 7.0;
m_bUpdateText = FALSE;
m_bHatchTou = FALSE;
m_bOrderTou = FALSE;
// 4、设置表格
if (m_bDlgType)
SetGridEnableWrite(FALSE);
// modified by whl on 090309
// m_grid.Create(this, IDC_GRID, WS_VISIBLE|WS_TABSTOP|WS_CHILD|WS_BORDER);
m_grid.Create(this, IDC_GRID);
m_grid.FitLastCol();
if (!m_bDlgType) // 对象编辑对话框
m_grid.AutoEditCell(&m_grid.GetCell(0, 0));
// m_Rider.SetCheck(g_bHightWrite); // sg modify 090222
// if (m_bDlgType) // 绘制对话框
// SetGridEnableWrite(g_bHightWrite);
SetGridEnableWrite(g_bHightWrite);
if (m_bDlgType) // 绘制对话框
m_Rider.SetCheck(g_bHightWrite);
// 5、设置属性页
TC_ITEM *pTCItem = new TC_ITEM; // sg add 090220,增加总图属性页
pTCItem->mask = TCIF_TEXT;
pTCItem->pszText = const_cast<LPTSTR>(_T("建筑"));
m_Tab.InsertItem(0, pTCItem);
pTCItem->pszText = const_cast<LPTSTR>(_T("总图"));
m_Tab.InsertItem(1, pTCItem);
if (IsSitePlanDlg())
g_nElevType = 1;
m_Tab.SetCurSel(g_nElevType);
SetTabCurPage1(); // 根据标高类型,设置各个控件的显示
SetTabCurPage2(); // 设置强制规定
SetTextLocationByStyle(); // 6、设置显示哪种文字与符号的位置关系设置方式
BOOL bTest = m_bSitePlanDlg;
if (TRUE == IsSitePlanDlg())
{
//标题改一下
SetWindowText(_T("总图标高"));
m_Tab.DeleteItem(0);
}
return bRes;
}
void CElevDlg::LoadTextStyle() // sg add 090209,加载文字样式
{
XSymbolList lstStyle(_T("STYLE"));
for (int m = 0; m < lstStyle.Length(); m++)
m_cmbStyleName.AddString(lstStyle[m]);
// sg add 090216,标高标注的默认文字样式应该为_TCH_DIM
int nRet = m_cmbStyleName.FindStringExact(0, _T("_TCH_DIM"));
if (nRet < 0)
m_cmbStyleName.AddString(_T("_TCH_DIM"));
}
void CElevDlg::InitData() // add by zkm
{
// 设置按钮上的图片
m_ButHatch.SetIcon(AfxGetApp()->LoadIcon(IDI_HATCH));
m_ButDote.SetIcon(AfxGetApp()->LoadIcon(IDI_DOTE)); // sg add 090209,圆点样式
m_ButCommon.SetIcon(AfxGetApp()->LoadIcon(IDI_COMMONELEV)); // sg add 090226,普通样式
m_ButHollow.SetIcon(AfxGetApp()->LoadIcon(IDI_HOLLOW)); // sg add 120608,空心三角形地坪标高
m_ButCross.SetIcon(AfxGetApp()->LoadIcon(IDI_ELEVCROSS)); // jsx add 160513,十字标高
//m_ButBaseLine.SetIcon(AfxGetApp()->LoadIcon(IDI_BASELINE));
//m_ButLeadLine.SetIcon(AfxGetApp()->LoadIcon(IDI_LEADLINE));
//m_ButOrder.SetIcon(AfxGetApp()->LoadIcon(IDI_ORDER));
// sg delete 090301,连续标注已被隐藏,8.0起一定是连续标注的
// m_ButContinue.SetIcon(AfxGetApp()->LoadIcon(IDI_CONTINUE));
// sg add 090226,增加符号的文字解释
AddTip(IDC_BUTTON1, _T("三角形室外地坪标高"));
AddTip(IDC_BUTTON6, _T("圆点室外地坪标高"));
AddTip(IDC_BUTTON7, _T("普通标高"));
AddTip(IDC_BUTTON_HOLLOW, _T("三角形空心室内标高"));
AddTip(IDC_BUTTON2, _T("带基线"));
AddTip(IDC_BUTTON3, _T("带引线"));
AddTip(IDC_BUTTON5, _T("自动对齐"));
// sg add 090403,给新增按钮“多标高”增加文字解释
AddTip(IDC_BUTTON_ADDMUTIELEV, _T("多层楼层标高编辑"));
AddTip(IDC_BUTTON_ELEV_CROSS, _T("十字标高"));
// if (g_bContinue) // sg delete 090227,强制连续标注
// m_ButContinue.SetCheck(1);
// else
// m_ButContinue.SetCheck(0);
if (g_bOrder)
m_ButOrder.SetCheck(1);
else
m_ButOrder.SetCheck(0);
if (g_bHasBase)
m_ButBaseLine.SetCheck(1);
else
m_ButBaseLine.SetCheck(0);
if (g_bHasLeader)
m_ButLeadLine.SetCheck(1);
else
m_ButLeadLine.SetCheck(0);
if (g_bHatch)
m_ButHatch.SetCheck(1);
else
m_ButHatch.SetCheck(0);
if (g_bDote) // sg add 090209,圆点样式
m_ButDote.SetCheck(1);
else
m_ButDote.SetCheck(0);
if (g_bHollow) // sg add 120608,空心三角形地坪标高
m_ButHollow.SetCheck(1);
else
m_ButHollow.SetCheck(0);
if (g_bElevCross)//十字标高
m_ButCross.SetCheck(1);
else
m_ButCross.SetCheck(0);
if (g_bCommonElev) // sg add 090226,普通样式
m_ButCommon.SetCheck(1);
else
m_ButCommon.SetCheck(0);
m_ComBox.AddString(_T("0.00")); // 设置精确度列表
m_ComBox.AddString(_T("0.000"));
m_ComBox.SetCurSel(g_iPrecision);
if (!m_bDlgType) // 对象编辑对话框
{
if (m_pElev->IsPrec2())
{
m_ComBox.SetCurSel(0);
g_iPrecision = 0;
}
else
{
m_ComBox.SetCurSel(1);
g_iPrecision = 1;
}
}
}
void CElevDlg::SetArchElevGrid() // sg add 090222,设置表格行数、表头
{
m_grid.Clear();
m_grid.SetRowNum(1);
m_grid.SetColFixLength();
m_grid.FitLastCol();
m_grid.AppendCol(_T("楼层标高"), 80);
m_grid.AppendCol(_T("楼层号/标高说明"), 100);
}
void CElevDlg::SetTabCurPage1() // 设置当前选择页面控件显示情况,sg add 090222
{
int nShow1 = SW_HIDE, // 总图标高
nShow2 = SW_SHOW;
if (g_nElevType == 0) // 建筑标高
{
nShow1 = SW_SHOW;
nShow2 = SW_HIDE;
}
GetDlgItem(IDC_GRID)->ShowWindow(nShow1); // 建筑
GetDlgItem(IDC_CHECK_STANDARD)->ShowWindow(nShow1);
GetDlgItem(IDC_CHECK_PARENTHESES)->ShowWindow(nShow1);
GetDlgItem(IDC_BUTTON_ADDMUTIELEV)->ShowWindow(nShow1); // sg add 090401
if (m_bDlgType) // sg add 090320,对象编辑对话框中,这两项总不显示
{
GetDlgItem(IDC_CHECKWRITER)->ShowWindow(nShow1);
GetDlgItem(IDC_BUTTON5)->ShowWindow(nShow1);
}
GetDlgItem(IDC_BUTTON2)->ShowWindow(nShow1); // 带基线
GetDlgItem(IDC_BUTTON3)->ShowWindow(nShow1); // 带引线
GetDlgItem(IDC_STATIC_ABSOLUTE)->ShowWindow(nShow2); // 总图
GetDlgItem(IDC_STATIC_RELATIVE)->ShowWindow(nShow2);
GetDlgItem(IDC_STATIC_CONVERSIONSHIP)->ShowWindow(nShow2);
GetDlgItem(IDC_EDIT_ABSOLUTEELEV)->ShowWindow(nShow2);
GetDlgItem(IDC_STATIC_EQUAL)->ShowWindow(nShow2);
GetDlgItem(IDC_EDIT_RELATIVEELEV)->ShowWindow(nShow2);
GetDlgItem(IDC_STATIC_PLUS)->ShowWindow(nShow2);
GetDlgItem(IDC_EDIT_CONVERSION)->ShowWindow(nShow2);
GetDlgItem(IDC_CHECK_DIMZERO)->ShowWindow(nShow2);
GetDlgItem(IDC_STATIC_ALIGNSHIP)->ShowWindow(nShow2);
GetDlgItem(IDC_RADIO_UPDOWN)->ShowWindow(nShow2);
GetDlgItem(IDC_RADIO_LEFTRIGHT)->ShowWindow(nShow2);
GetDlgItem(IDC_BUTTON_HOLLOW)->ShowWindow(nShow2); // 空心三角形地坪标高
GetDlgItem(IDC_BUTTON_ELEV_CROSS)->ShowWindow(nShow2); //十字标高
if (g_nElevType == 0) // 建筑,表格置顶
GetDlgItem(IDC_GRID)->BringWindowToTop();
else // 总图,根据是否自动换算,控制部分控件是否显示
SetShowByUseConversion();
}
// 强制对建筑、总图标高进行的默认规定,只作为切换页面的默认设置,可修改
void CElevDlg::SetTabCurPage2()
{
if (g_nElevType == 0) // 建筑标高
{
// sg add 090212,规范方式——>添加括号
GetDlgItem(IDC_CHECK_PARENTHESES)->EnableWindow(!g_bStandard);
GetDlgItem(IDC_BUTTON6)->EnableWindow(FALSE);
//GetDlgItem(IDC_BUTTON2)->EnableWindow(TRUE); // 带基线
//GetDlgItem(IDC_BUTTON3)->EnableWindow(TRUE); // 带引线
if (m_bDlgType) // sg add 090320,对象编辑对话框中,这项总不显示
GetDlgItem(IDC_BUTTON5)->EnableWindow(TRUE); // 自动对齐
GetDlgItem(IDC_CHECK_RIGHTTEXT)->EnableWindow(TRUE); // “文字齐线端”可改
if (g_bDote || g_bElevCross)
{
g_bDote = FALSE;
g_bElevCross = FALSE;
m_ButDote.SetCheck(0);
m_ButCross.SetCheck(0);
g_bCommonElev = TRUE; // 不支持圆点样式,切换到普通样式
m_ButCommon.SetCheck(1);
}
if (g_bHollow)
{
g_bHollow = FALSE;
m_ButHollow.SetCheck(0);
g_bCommonElev = TRUE; // 不支持空心三角形地坪标高,切换到普通样式
m_ButCommon.SetCheck(1);
}
if (g_bCommonElev || g_bHasBase || g_bHasLeader) // 建筑标高,必定左右排列
g_nElevTextAlign = 1;
SetGridEnableWrite(g_bHightWrite); // 表格是否可写
}
else // 总图标高
{
g_bOrder = FALSE;
if (m_bDlgType)
m_ButOrder.SetCheck(g_bOrder); // 不支持“自动对齐”
GetDlgItem(IDC_BUTTON5)->EnableWindow(FALSE);
if (g_nElevTextAlign == 0) // 上下排列时,“文字齐线端”不可改
{
g_bElevSideText = TRUE; // 总图,文字一般齐线端
GetDlgItem(IDC_CHECK_RIGHTTEXT)->EnableWindow(FALSE);
}
else // “文字齐线端”可改
GetDlgItem(IDC_CHECK_RIGHTTEXT)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON6)->EnableWindow(TRUE); // 圆点样式
//GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE);
//GetDlgItem(IDC_BUTTON3)->EnableWindow(FALSE);
if (g_bHasLeader || g_bHasBase)
{
g_bHasLeader = FALSE;
g_bHasBase = FALSE;
m_ButLeadLine.SetCheck(0);
m_ButBaseLine.SetCheck(0);
g_bCommonElev = TRUE; // 不支持带基线、引线,切换到普通样式
m_ButCommon.SetCheck(1);
}
if (g_bElevCross)
{
m_ButCross.SetCheck(1);
}
}
UpdateData(FALSE);
}
// sg add 090311,根据是否自动换算,设置各控件是否显示
void CElevDlg::SetShowByUseConversion()
{
int nShow = g_bUseConversion ? SW_SHOW : SW_HIDE;
GetDlgItem(IDC_STATIC_EQUAL)->ShowWindow(nShow); // =
GetDlgItem(IDC_STATIC_PLUS)->ShowWindow(nShow); // +
GetDlgItem(IDC_EDIT_CONVERSION)->ShowWindow(nShow); // 换算值
GetDlgItem(IDC_STATIC_CONVERSIONSHIP)->ShowWindow(nShow); // 换算关系
}
// sg add 090311,根据标高样式,设置部分控件是否显示、是否可编辑
void CElevDlg::SetTextLocationByStyle()
{
// if (g_bHatch || g_bDote) // 地坪标高
if (g_nElevType == 0 && g_bHatch) // 建筑填充三角形标高
{
GetDlgItem(IDC_CHECK_UPTEXT)->ShowWindow(SW_SHOW); // 文字居中
GetDlgItem(IDC_CHECK_RIGHTTEXT)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_SITEPLANTEXT)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_COMBO_SITEPLAN_TEXTLOC)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_RADIO_UPDOWN)->EnableWindow(FALSE);
GetDlgItem(IDC_RADIO_LEFTRIGHT)->EnableWindow(FALSE);
}
else if ((g_nElevType == 1) && (g_bHatch || g_bDote || g_bHollow || g_bElevCross)) // 总图的地坪标高
{
GetDlgItem(IDC_CHECK_UPTEXT)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_CHECK_RIGHTTEXT)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_SITEPLANTEXT)->ShowWindow(SW_SHOW); // 文字位置
GetDlgItem(IDC_COMBO_SITEPLAN_TEXTLOC)->ShowWindow(SW_SHOW);// 文字位置
GetDlgItem(IDC_RADIO_UPDOWN)->EnableWindow(FALSE);
GetDlgItem(IDC_RADIO_LEFTRIGHT)->EnableWindow(FALSE);
m_cmbTextLoc.ResetContent();
if (g_bHatch) // 填充三角形
{
m_cmbTextLoc.AddString(_T("上部"));
m_cmbTextLoc.AddString(_T("右侧"));
m_cmbTextLoc.AddString(_T("右上"));
GetDlgItem(IDC_COMBO_SITEPLAN_TEXTLOC)->EnableWindow(TRUE);
}
else if (g_bDote) // 圆点
{
m_cmbTextLoc.AddString(_T("上部"));
m_cmbTextLoc.AddString(_T("右侧"));
GetDlgItem(IDC_COMBO_SITEPLAN_TEXTLOC)->EnableWindow(TRUE);
}
else if (g_bElevCross) // 十字
{
m_cmbTextLoc.AddString(_T("上部"));
m_cmbTextLoc.AddString(_T("右侧"));
m_cmbTextLoc.AddString(_T("右上"));
GetDlgItem(IDC_COMBO_SITEPLAN_TEXTLOC)->EnableWindow(TRUE);
}
else // 空心三角形
{
m_cmbTextLoc.AddString(_T("上部"));
GetDlgItem(IDC_COMBO_SITEPLAN_TEXTLOC)->EnableWindow(FALSE);
}
int nRet = m_cmbTextLoc.FindStringExact(0, m_csTextLoc);
if (nRet < 0)
{
nRet = 0;
m_csTextLoc = _T("上部");
g_csTextLoc = m_csTextLoc;
}
m_cmbTextLoc.SetCurSel(nRet);
}
else // 普通样式
{
GetDlgItem(IDC_CHECK_UPTEXT)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_CHECK_RIGHTTEXT)->ShowWindow(SW_SHOW); // 文字齐线端
GetDlgItem(IDC_STATIC_SITEPLANTEXT)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_COMBO_SITEPLAN_TEXTLOC)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_RADIO_UPDOWN)->EnableWindow(TRUE); // 上下排列
GetDlgItem(IDC_RADIO_LEFTRIGHT)->EnableWindow(TRUE); // 左右排列
}
}
void CElevDlg::SetGridEnableWrite(BOOL bWrite)
{
// sg add 090505,处理多标高相关控件是否可编辑
if (m_bDlgType) // 绘制对话框
{
GetDlgItem(IDC_BUTTON_ADDMUTIELEV)->EnableWindow(bWrite); // 多标高
GetDlgItem(IDC_CHECK_STANDARD)->EnableWindow(bWrite); // 标高是否加括号
if (bWrite)
GetDlgItem(IDC_CHECK_PARENTHESES)->EnableWindow(!g_bStandard); // 楼号是否加括号
else
GetDlgItem(IDC_CHECK_PARENTHESES)->EnableWindow(bWrite);
}
else // 对象编辑对话框
{
GetDlgItem(IDC_BUTTON_ADDMUTIELEV)->EnableWindow(TRUE); // 多标高
GetDlgItem(IDC_CHECK_STANDARD)->EnableWindow(TRUE); // 标高是否加括号
GetDlgItem(IDC_CHECK_PARENTHESES)->EnableWindow(!g_bStandard); // 楼号是否加括号
}
m_grid.SetReadOnly(!bWrite);
if (bWrite)
{
m_grid.GetCol(0).SetBackColor(RGB(255, 255, 255));
m_grid.GetCol(1).SetBackColor(RGB(255, 255, 255)); // sg add 090212
}
else
{
m_grid.GetCol(0).SetBackColor(GetSysColor(COLOR_3DFACE));
m_grid.GetCol(1).SetBackColor(GetSysColor(COLOR_3DFACE)); // sg add 090212
}
// sg modify 090331,解决无模式对话框下,表格无法完全刷新的问题,丢失左侧向下箭头的问题
// m_grid.Invalidate();
m_grid.RecalcLayout();
}
// sg add 090222,根据对象,填充表格内容
void CElevDlg::InitGridAndTextFromEnt()
{
CString csTexts1 = m_pElev->GetText(), // 基线上方文字
csTexts2 = m_pElev->GetLowText(); // 基线下方文字
XStringList lstCol1, // 第一列:标高、绝对标高
lstCol2; // 第二列:楼层号、相对标高
while (!csTexts1.IsEmpty())
{
// sg modify 120608,9.0起修改区分多层标高的分隔符号,由“/”变成“$”
// int nResult = csTexts1.Find(_T('/')),
int nResult = csTexts1.Find(_T('$')),
nLength = csTexts1.GetLength();
nResult = (nResult < 0) ? nLength : nResult;
CString csRow = csTexts1.Left(nResult); // 获取表格中一行的文字
int nNext = nLength - nResult - 1;
if (nNext > 0)
csTexts1 = csTexts1.Right(nNext);
else
csTexts1 = _T("");
int nRet = csRow.Find(_T('&'), 0);
if (nRet > 0) // 含有楼层号/相对标高
{
CString csFloor = csRow.Right(csRow.GetLength() - nRet - 1);
csRow = csRow.Left(nRet);
lstCol2.Append(tstrnew(csFloor)); // 存入lstCol2
}
else // 没有楼层号/相对标高
lstCol2.Append(tstrnew(_T(""))); // 存入空信息,保证两列数量、内容对应
lstCol1.Append(tstrnew(csRow)); // 楼层标高/绝对标高
}
int nLen1 = lstCol1.Length(),
nLen2 = lstCol2.Length();
if (nLen1 == 0) // 没有标注任何内容,表格中,至少会有一行内容
{
lstCol1.Append(tstrnew(_T("")));
lstCol2.Append(tstrnew(_T("")));
nLen1++;
nLen2++;
}
if (g_nElevType == 0) // 建筑,填充表格
{
m_grid.SetRowNum(nLen1);
for (long i = 0; i < nLen1; i++)
m_grid[i][0].SetText(lstCol1[i]); // 楼层标高
for (i = 0; i < nLen2; i++)
m_grid[i][1].SetText(lstCol2[i]); // 楼层号/标高说明
}
else // 总图,只取第一行,填充编辑框
{
g_csAbsoluteElev = lstCol1[0]; // 绝对标高
g_csRelativeElev = lstCol2[0]; // 相对标高
if (g_nElevTextAlign == 0 && g_bCommonElev) // 总图标高,上下排列
{
g_csRelativeElev = csTexts2;
}
}
}
void CElevDlg::OnActivate(UINT nState, CWnd*pWndOther, BOOL bMinimized)
{
if (nState == WA_INACTIVE && m_bUpdateText)
{
m_grid.EndEditCell(); // 强制更新grid
UpdateEntText();
}
}
void CElevDlg::UpdataEnt() // 更新对象中,除文字内容以外的属性
{
double dSize = GlobalFunc::DocGetEleTriangleSize();
// if (g_bHatch) // 填充样式
if (g_bHatch || g_bHollow) // sg modify 120608,填充样式、三角形空心标高符号
// m_pElev->SetTextBaseLen(3); // sg modify 090212,读取全局设置
m_pElev->SetTextBaseLen(dSize);
// else // modified by whl on 060110
else if (m_bModeless)
m_pElev->SetTextBaseLen(m_pElev->GetDefaultTextBaseLen());
else // sg add 090320,对象编辑时,只在默认基线≤dSize时,做处理
{
double dTextBaseLen = m_pElev->GetTextBaseLen();
if (dTextBaseLen < dSize + 1.0E-5)
{
dTextBaseLen = m_pElev->GetDefaultTextBaseLen();
m_pElev->SetTextBaseLen(dTextBaseLen);
}
}
m_pElev->SetFilled(g_bHatch);
m_pElev->SetDote(g_bDote); // sg add 090209,圆点样式
m_pElev->SetHollowTriangle(g_bHollow); // // sg add 120608,三角形空心标高符号
m_pElev->SetBaseLine(g_bHasBase);
m_pElev->SetLeader(g_bHasLeader);
m_pElev->SetCross(g_bElevCross);
if (m_bModeless) // modified by whl on 060110
{
m_pElev->SetBaseLen(g_nBaseLen);
m_pElev->SetLeaderLen(g_nLeaderLen);
}
// sg add 090212,字高、文字样式
AcDbObjectId idTextStyle = GlobalFunc::GetTextStyleId(m_csFontStyle);
if (!idTextStyle)
return;
m_pElev->SetTextStyleId(idTextStyle);
m_pElev->SetTextHeight(_tstof(m_csTextHeight));
m_pElev->SetStandard(g_bStandard); // sg add 090212,规范样式、添加括号、文字在线端
m_pElev->SetParentheses(g_bParentheses);
m_pElev->SetAtLineSide(g_bElevSideText);
m_pElev->SetArchElev(g_nElevType == 0); // sg add 090311,标高类型,是否上下排列
// if (g_bHatch || g_bDote)
if (g_bHatch && g_nElevType == 0) // 只有建筑里的填充标高,才用数据g_bElevMidText
{
m_pElev->SetUpDownTextElev(g_bElevMidText);
m_pElev->SetNewSitePlanElev(FALSE);
}
else if ((g_nElevType == 1) && (g_bHatch || g_bDote || g_bHollow || g_bElevCross))
{
m_pElev->SetUpDownTextElev(g_csTextLoc == _T("上部"));
m_pElev->SetNewSitePlanElev(g_csTextLoc == _T("右上"));
}
else
m_pElev->SetUpDownTextElev(g_nElevTextAlign == 0);
}
void CElevDlg::UpdateEntText() // 根据表格、编辑框内内容更新对象
{
UpdateData(TRUE);
m_grid.EndEditCell(); // 强制更新grid
TString sRes; // 基线上方文字
TString sLowText; // 基线下方文字
if (g_nElevType == 0) // 建筑,从表格里读取
{
if (!m_grid.IsEmpty())
{
// sg modify 090222,增加楼层号
// sRes << m_grid[0L][0].GetText();
// for (long i=1 ; i<m_grid.GetRowNum() ; i++)
// {
// TString sLine = m_grid[i][0].GetText();
// if (!sLine.IsEmpty())
// sRes << _T("/")<<sLine;
// }
long nRowNum = m_grid.GetRowNum();
for (long i = 0; i < nRowNum; i++)
{
TString sCol1 = m_grid[i][0].GetText(),
sCol2 = m_grid[i][1].GetText();
//add tyj 20160826:第一列不许有空格
int iFindSpace = sCol1.Find(_T(" "));
while (iFindSpace != -1)
{
sCol1.Del(iFindSpace);
iFindSpace = sCol1.Find(_T(" "));
}
m_grid[i][0].SetText(sCol1);
if (!sCol1.IsEmpty()) // 第一列不允许为空,否则不判断第二列是否有内容
{
if (i != 0)
// sg modify 120608,9.0起修改区分多层标高的分隔符号,由“/”变成“$”
// sRes << _T("/");
sRes << _T("$");
sRes << sCol1;
if (!sCol2.IsEmpty())
sRes << _T("&") << sCol2;
}
}
}
}
else // 总图,从编辑框内读取
{
sRes << g_csAbsoluteElev; // 绝对标高
if (!g_csRelativeElev.IsEmpty())
{
if (g_bCommonElev && g_nElevTextAlign == 0) // 普通标高、上下排列
sLowText << g_csRelativeElev; // 基线下方文字
else
sRes << _T("&") << g_csRelativeElev;
}
}
m_pElev->SetText(sRes); // 基线上方文字
m_pElev->SetLowText(sLowText); // sg add 090223,基线下方文字
if (g_iPrecision == 1) // 精确度
m_pElev->SetPrec2(FALSE);
else
m_pElev->SetPrec2(TRUE);
}
// 动态标注时,更新标高,TElevEdJig::update中调用
void CElevDlg::UpdateGrid(double newValue)
{
// if (g_bHightWrite) // sg modify 090312,只对自动建筑标高有效
if (g_nElevType == 1 || g_bHightWrite)
return;
double hight = newValue;
CString sPrecision, ss;
switch (g_iPrecision) {
case 0:
sPrecision = _T("%.2f");
m_pElev->SetPrec2(TRUE);
break;
case 1:
sPrecision = _T("%.3f");
m_pElev->SetPrec2(FALSE);
break;
default:
break;
}
ss.Format(sPrecision, hight);
m_grid[long(0)][0].SetText(ss);
m_grid[long(0)][0].Refresh(); // 按精确度给表格刷新
m_grid.FitLastCol();
// 内部数据精度更高一些,原误差很大!
ss.Format(_T("%.5f"), hight);
m_grid[long(0)][0].SetText(ss); // 内部修改,不刷新到表格中
acedGetAcadDwgView()->SetFocus();
m_pElev->SetText(ss);
}
// 保留第一个标高的首行内容,方便进行连续绘制
void CElevDlg::UpDateGridToStar()
{
// TString ss00, ss01;
// if (!m_grid.IsEmpty()) // sg add 090310,防止表格行被全部删除
// {
// ss00 = m_grid[0L][0].GetText();
// ss01 = m_grid[0L][1].GetText();
// }
//
// m_grid.Clear();
// m_grid.SetRowNum(1);
// m_grid[0L][0].SetText(ss00);
// m_grid[0L][1].SetText(ss01);
g_szGridText.Clear(); // sg add 090313,记忆表格内容
long lRows = m_grid.GetRowNum();
for (long l = 0; l < lRows; l++)
{
TString sCol1 = m_grid[l][0].GetText(),
sCol2 = m_grid[l][1].GetText();
if (l != 0)
// sg modify 120608,9.0起修改区分多层标高的分隔符号,由“/”变成“$”
// g_szGridText << _T("/");
g_szGridText << _T("$");
g_szGridText << sCol1;
if (sCol2.Length() > 0)
g_szGridText << _T("&") << sCol2;
}
}
void CElevDlg::SetEntPoint(AecXDbSymbElevation * pElev) // 关联对像
{
m_pElev = pElev;
}
BEGIN_MESSAGE_MAP(CElevDlg, CModelessDialog)
//ON_BN_CLICKED(IDC_HATCH, OnCheckHatch)
//ON_BN_CLICKED(IDC_BASE_LINE, OnCheckBaseLine)
//ON_BN_CLICKED(IDC_LERDER, OnCheckLeader)
ON_BN_CLICKED(IDC_BUTTON1, OnPickHatch)
ON_BN_CLICKED(IDC_BUTTON2, OnPickBaseLine)
ON_BN_CLICKED(IDC_BUTTON3, OnPickLeadLine)
ON_BN_CLICKED(IDC_BUTTON4, OnContinueDim)
ON_BN_CLICKED(IDC_BUTTON5, OnOrder)
ON_BN_CLICKED(IDC_CHECKWRITER, OnPickCheckWriter)
ON_CBN_SELENDCANCEL(IDC_COMBO1, OnPrecision)
ON_WM_CLOSE()
ON_WM_DESTROY()
ON_WM_ACTIVATE()
ON_BN_CLICKED(IDC_BUTTON6, OnPickDote)
ON_BN_CLICKED(IDC_BUTTON_TEXTHEIGHT, OnButtonTextHeight)
ON_CBN_SELCHANGE(IDC_COMBO_HEIGHT, OnSelchangeComboTextHeight)
ON_CBN_SELCHANGE(IDC_COMBO_FONGSTYLE, OnSelchangeComboFongstyle)
ON_BN_CLICKED(IDC_CHECK_STANDARD, OnBnClickedStandard)
ON_BN_CLICKED(IDC_CHECK_RIGHTTEXT, OnBnClickedSideText)
ON_BN_CLICKED(IDC_CHECK_PARENTHESES, OnBnClickedParentheses)
ON_CBN_EDITCHANGE(IDC_COMBO_HEIGHT, OnEditchangeComboTextHeight)
ON_NOTIFY(TCN_SELCHANGE, IDC_TAB_ELEVTYPE, OnSelchangeTabElevType)
ON_BN_CLICKED(IDC_CHECK_DIMZERO, OnBnClickedUseConversion)
ON_EN_CHANGE(IDC_EDIT_CONVERSION, OnChangeEditConversion)
ON_BN_CLICKED(IDC_RADIO_UPDOWN, OnRadioElevAlignType1)
ON_BN_CLICKED(IDC_BUTTON7, OnPickCommonElev)
ON_BN_CLICKED(IDC_RADIO_LEFTRIGHT, OnRadioElevAlignType2)
ON_BN_CLICKED(IDC_CHECK_UPTEXT, OnBnClickedUpText)
ON_EN_CHANGE(IDC_EDIT_ABSOLUTEELEV, OnChangeEditAbsoluteElev)
ON_EN_CHANGE(IDC_EDIT_RELATIVEELEV, OnChangeEditRelativeElev)
ON_BN_CLICKED(IDC_BUTTON_ADDMUTIELEV, OnButtonAddMutiElev)
ON_BN_CLICKED(IDC_BUTTON_HOLLOW, OnPickHollow)
ON_BN_CLICKED(IDC_BUTTON_ELEV_CROSS, OnPickCross)
ON_CBN_SELCHANGE(IDC_COMBO_SITEPLAN_TEXTLOC, OnSelchangeComboTextLoc)
END_MESSAGE_MAP()
void CElevDlg::OnClose()
{
if (m_bDlgType)
{
CElevDlg::g_pElevDlg = NULL;
acedPostCommand(_T("\33\33"));
DestroyWindow();
}
else
CModelessDialog::OnClose();
}
void CElevDlg::OnDestroy()
{
if (m_pElev)
{
m_pElev = NULL;
}
CModelessDialog::OnDestroy();
}
void CElevDlg::OnOK()
{
// sg add 090305,对象编辑时,以只读方式打开;更新数据时,升级到写打开
m_pElev->upgradeOpen();
// sg add 090507,防止切换到总图标高、上下排列后,文字基线不够长
double dOld = m_pElev->GetTextBaseLen(TRUE);
UpdataEnt(); // 更新其他
UpdateEntText(); // 更新对象文字
XString sText = m_pElev->GetLowText(); // sg add 090507
//if (!m_pElev->IsArchElev() && !m_pElev->IsFilled() &&
// !m_pElev->IsDote() && m_pElev->IsUpDownTextElev() && !!sText)
if (!m_pElev->IsArchElev() && !m_pElev->IsFilled() &&
!m_pElev->IsDote() && !m_pElev->IsHollowTriangle() && m_pElev->IsUpDownTextElev() && !!sText)
{
double dNew = m_pElev->GetDefaultTextBaseLen(TRUE);
if (dNew > dOld + 1.0E-5)
m_pElev->SetTextBaseLen(dNew, TRUE);
}
m_pElev->downgradeOpen(); // sg add 090305
CDialog::OnOK();
}
void CElevDlg::OnPickCheckWriter() // 手动输入
{
UpdateData(TRUE);
if (m_bHatchTou) // JIG基线、引线,不可以切换手动输入与否的状态
{
m_Rider.SetCheck(g_bHightWrite);
UpdateData(FALSE);
acedGetAcadDwgView()->SetFocus();
return;
}
if (m_Rider.GetCheck() == 0)
{
CElevDlg::g_pElevDlg->SetGridEnableWrite(FALSE);
g_bHightWrite = FALSE;
TString ss00;
if (!m_grid.IsEmpty())
m_grid[long(0)][0].SetText(ss00);
m_grid.Clear();
m_grid.SetRowNum(1);
m_grid[long(0)][0].SetText(ss00);
}
else
{
CElevDlg::g_pElevDlg->SetGridEnableWrite(TRUE);
g_bHightWrite = TRUE;
}
}
void CElevDlg::OnPrecision() // add by zkm,精确度
{
g_iPrecision = m_ComBox.GetCurSel();
}
void CElevDlg::OnPickHatch() // 三角形填充样式
{
if (m_bHatchTou) // JIG基线、引线,不可以修改样式
{
g_bHatch = FALSE;
m_ButHatch.SetCheck(0);
}
else
{
g_bHatch = 1 - g_bHatch;
if (g_bHatch)
{
g_bHasBase = FALSE;
m_ButBaseLine.SetCheck(0);
g_bHasLeader = FALSE;
m_ButLeadLine.SetCheck(0);
g_bDote = FALSE; // sg add 090209,增加圆点样式
m_ButDote.SetCheck(0);
g_bHollow = FALSE;// sg add 120608,三角形空心标高符号
m_ButHollow.SetCheck(0);
g_bCommonElev = FALSE; // sg add 090226,增加普通样式
m_ButCommon.SetCheck(0);
g_bElevCross = FALSE;// 十字标高符号
m_ButCross.SetCheck(0);
}
else // sg add 090301,所有按钮都不点取时,自动选普通样式
{
// if (!g_bHatch && !g_bDote && !g_bHasBase && !g_bHasLeader)
if (!g_bHatch && !g_bDote && !g_bHollow && !g_bHasBase && !g_bHasLeader)
{
g_bCommonElev = TRUE;
m_ButCommon.SetCheck(1);
}
}
SetTextLocationByStyle(); // sg add 090311,刷新文字排列方式控件的显示问题
UpdateData(FALSE);
if (m_bDlgType)
UpdataEnt();
}
acedGetAcadDwgView()->SetFocus();
}
// sg add 120608,三角形空心标高符号
void CElevDlg::OnPickHollow()
{
if (m_bHatchTou) // JIG基线、引线,不可以修改样式
{
g_bHollow = FALSE;
m_ButHollow.SetCheck(0);
}
else if (g_nElevType == 0) // 建筑图不支持该样式
{
g_bHollow = FALSE;
m_ButHollow.SetCheck(0);
}
else
{
g_bHollow = 1 - g_bHollow;
if (g_bHollow)
{
g_bHatch = FALSE;
m_ButHatch.SetCheck(0);
g_bHasBase = FALSE;
m_ButBaseLine.SetCheck(0);
g_bHasLeader = FALSE;
m_ButLeadLine.SetCheck(0);
g_bDote = FALSE;
m_ButDote.SetCheck(0);
g_bCommonElev = FALSE;
m_ButCommon.SetCheck(0);
g_bElevCross = FALSE;// 十字标高符号
m_ButCross.SetCheck(0);
}
else
{
if (!g_bHatch && !g_bDote && !g_bHollow && !g_bHasBase && !g_bHasLeader)
{
g_bCommonElev = TRUE;
m_ButCommon.SetCheck(1);
}
}
SetTextLocationByStyle();
UpdateData(FALSE);
if (m_bDlgType)
UpdataEnt();
}
acedGetAcadDwgView()->SetFocus();
}
//十字标高符号
void CElevDlg::OnPickCross()
{
if (m_bHatchTou) // JIG基线、引线,不可以修改样式
{
g_bElevCross = FALSE;
m_ButCross.SetCheck(0);
}
else if (g_nElevType == 0) // 建筑图不支持该样式
{
g_bElevCross = FALSE;
m_ButCross.SetCheck(0);
}
else
{
g_bElevCross = 1 - g_bElevCross;
if (g_bElevCross)
{
g_bHatch = FALSE;
m_ButHatch.SetCheck(0);
g_bHasBase = FALSE;
m_ButBaseLine.SetCheck(0);
g_bHasLeader = FALSE;
m_ButLeadLine.SetCheck(0);
g_bDote = FALSE;
m_ButDote.SetCheck(0);
g_bCommonElev = FALSE;
m_ButCommon.SetCheck(0);
g_bHollow = FALSE;
m_ButHollow.SetCheck(0);
}
else
{
if (!g_bHatch && !g_bDote && !g_bHollow && !g_bHasBase && !g_bHasLeader && !g_bElevCross)
{
g_bCommonElev = TRUE;
m_ButCommon.SetCheck(1);
}
}
SetTextLocationByStyle();
UpdateData(FALSE);
if (m_bDlgType)
UpdataEnt();
}
acedGetAcadDwgView()->SetFocus();
}
void CElevDlg::OnPickDote() // sg add 090209,圆点样式
{
if (m_bHatchTou) // JIG基线、引线,不可以修改样式
{
g_bDote = FALSE;
m_ButDote.SetCheck(0);
}
else if (g_nElevType == 0) // 建筑图不支持该样式
{
g_bDote = FALSE;
m_ButDote.SetCheck(0);
}
else
{
g_bDote = 1 - g_bDote;
if (g_bDote)
{
g_bHatch = FALSE;
m_ButHatch.SetCheck(0);
g_bCommonElev = FALSE;
m_ButCommon.SetCheck(0);
g_bHasBase = FALSE;
m_ButBaseLine.SetCheck(0);
g_bHasLeader = FALSE;
m_ButLeadLine.SetCheck(0);
g_bHollow = FALSE;// sg add 120608,三角形空心标高符号
m_ButHollow.SetCheck(0);
g_bElevCross = FALSE;// 十字标高符号
m_ButCross.SetCheck(0);
}
else // sg add 090301,所有按钮都不点取时,自动选普通样式
{
// if (!g_bHatch && !g_bDote && !g_bHasBase && !g_bHasLeader)
if (!g_bHatch && !g_bDote && !g_bHollow && !g_bHasBase && !g_bHasLeader)
{
g_bCommonElev = TRUE;
m_ButCommon.SetCheck(1);
}
}
SetTextLocationByStyle(); // sg add 090311,刷新文字排列方式控件的显示问题
UpdateData(FALSE);
if (m_bDlgType)
UpdataEnt();
}
acedGetAcadDwgView()->SetFocus();
}
void CElevDlg::OnPickCommonElev() // sg add 090226,普通样式
{
if (m_bHatchTou) // JIG基线、引线,不可以修改样式
{
g_bCommonElev = FALSE;
m_ButCommon.SetCheck(0);
}
else
{
g_bCommonElev = 1 - g_bCommonElev;
if (g_bCommonElev)
{
g_bHatch = FALSE;
m_ButHatch.SetCheck(0);
g_bDote = FALSE;
m_ButDote.SetCheck(0);
g_bHasBase = FALSE;
m_ButBaseLine.SetCheck(0);
g_bHasLeader = FALSE;
m_ButLeadLine.SetCheck(0);
g_bHollow = FALSE;// sg add 120608,三角形空心标高符号
m_ButHollow.SetCheck(0);
g_bElevCross = FALSE;// 十字标高符号
m_ButCross.SetCheck(0);
}
else // sg add 090301,所有按钮都不点取时,自动选普通样式
{
// if (!g_bHatch && !g_bDote && !g_bHasBase && !g_bHasLeader)
if (!g_bHatch && !g_bDote && !g_bHollow && !g_bHasBase && !g_bHasLeader)
{
g_bCommonElev = TRUE;
m_ButCommon.SetCheck(1);
}
}
SetTextLocationByStyle(); // sg add 090311,刷新文字排列方式控件的显示问题
UpdateData(FALSE);
if (m_bDlgType)
UpdataEnt();
}
acedGetAcadDwgView()->SetFocus();
}
void CElevDlg::OnPickBaseLine() // add by zkm,带基线
{
if (m_bHatchTou)
{
// g_bHasBase = TRUE; // sg modify 090303,JIG引线、基线时,基线按钮不可用
// m_ButBaseLine.SetCheck(1);
m_ButBaseLine.SetCheck(g_bHasBase);
UpdateData(FALSE);
acedGetAcadDwgView()->SetFocus();
return;
}
if (g_nElevType == 1) // sg add 090303,总图不支持该样式
{
g_bHasBase = FALSE;
m_ButBaseLine.SetCheck(0);
acedGetAcadDwgView()->SetFocus();
return;
}
g_bHasBase = 1 - g_bHasBase;
if (g_bHasBase)
{
g_bHatch = FALSE;
m_ButHatch.SetCheck(0);
g_bDote = FALSE; // sg add 090209,增加圆点样式
m_ButDote.SetCheck(0);
g_bHollow = FALSE;// sg add 120608,三角形空心标高符号
m_ButHollow.SetCheck(0);
g_bCommonElev = FALSE; // sg add 090226,增加普通样式
m_ButCommon.SetCheck(0);
g_bElevCross = FALSE;// 十字标高符号
m_ButCross.SetCheck(0);
}
else // sg add 090301,所有按钮都不点取时,自动选普通样式
{
// if (!g_bHatch && !g_bDote && !g_bHasBase && !g_bHasLeader)
if (!g_bHatch && !g_bDote && !g_bHollow && !g_bHasBase && !g_bHasLeader)
{
g_bCommonElev = TRUE;
m_ButCommon.SetCheck(1);
}
}
SetTextLocationByStyle(); // sg add 090311,刷新文字排列方式控件的显示问题
acedGetAcadDwgView()->SetFocus();
if (m_bDlgType)
UpdataEnt();
}
void CElevDlg::OnPickLeadLine() // add by zkm,带引线
{
if (m_bHatchTou)
{
// g_bHasLeader = TRUE; // sg modify 090303,JIG引线、基线时,基线按钮不可用
// m_ButLeadLine.SetCheck(1);
m_ButLeadLine.SetCheck(g_bHasLeader);
UpdateData(FALSE);
acedGetAcadDwgView()->SetFocus();
return;
}
if (g_nElevType == 1) // sg add 090303,总图不支持该样式
{
g_bHasLeader = FALSE;
m_ButLeadLine.SetCheck(0);
acedGetAcadDwgView()->SetFocus();
return;
}
g_bHasLeader = 1 - g_bHasLeader;
if (g_bHasLeader)
{
g_bHatch = FALSE;
m_ButHatch.SetCheck(0);
g_bDote = FALSE; // sg add 090209,增加圆点样式
m_ButDote.SetCheck(0);
g_bHollow = FALSE;// sg add 120608,三角形空心标高符号
m_ButHollow.SetCheck(0);
g_bCommonElev = FALSE; // sg add 090226,增加普通样式
m_ButCommon.SetCheck(0);
g_bElevCross = FALSE;// 十字标高符号
m_ButCross.SetCheck(0);
}
else // sg add 090301,所有按钮都不点取时,自动选普通样式
{
// if (!g_bHatch && !g_bDote && !g_bHasBase && !g_bHasLeader)
if (!g_bHatch && !g_bDote && !g_bHollow && !g_bHasBase && !g_bHasLeader)
{
g_bCommonElev = TRUE;
m_ButCommon.SetCheck(1);
}
}
SetTextLocationByStyle(); // sg add 090311,刷新文字排列方式控件的显示问题
acedGetAcadDwgView()->SetFocus();
if (m_bDlgType)
UpdataEnt();
}
void CElevDlg::OnContinueDim() // add by zkm,连续标注
{
// g_bContinue = 1 - g_bContinue; // sg delete 090301,8.0起必须连续标注
// acedGetAcadDwgView()->SetFocus();
}
void CElevDlg::OnOrder() // add by zkm,自动对齐
{
g_bOrder = 1 - g_bOrder;
acedGetAcadDwgView()->SetFocus();
}
void CElevDlg::SetOrderFa(BOOL bOrder) // 未使用
{
m_bOrderTou = bOrder;
acedGetAcadDwgView()->SetFocus();
}
void CElevDlg::OnCheckHatch() // 未使用
{
g_bHatch = 1 - g_bHatch;
if (g_bHatch)
{
g_bHasBase = g_bHasLeader = FALSE;
UpdateData(FALSE);
}
}
void CElevDlg::OnCheckBaseLine() // 未使用
{
g_bHasBase = 1 - g_bHasBase;
if (g_bHasBase)
{
g_bHatch = FALSE;
UpdateData(FALSE);
}
}
void CElevDlg::OnCheckLeader() // 未使用
{
g_bHasLeader = 1 - g_bHasLeader;
if (g_bHasLeader)
{
g_bHatch = FALSE;
UpdateData(FALSE);
}
}
void CElevDlg::OnButtonTextHeight() // 字高按钮
{
if (m_bModeless)
{
GlobalFunc::PostCommand(_T("` "), false);
}
else
{
GetTextHeight();
acedGetAcadDwgView()->SetFocus();
}
}
void CElevDlg::GetTextHeight()
{
XPushAutoHide noAutoHide(this);
UpdateData(TRUE);
double nHeight = _tstof(m_csTextHeight) * GlobalFunc::DocGetPScale();
BeginEditorCommand();
if (GlobalFunc::GetDist(_T("\n字高"), nHeight, RSG_NOZERO | RSG_NONEG) == RTNORM)
{
nHeight /= GlobalFunc::DocGetPScale();
m_csTextHeight.Format(_T("%.1f"), nHeight);
}
CompleteEditorCommand();
g_dTextHeight = _tstof(m_csTextHeight);
UpdateData(FALSE);
}
void CElevDlg::OnSelchangeComboTextHeight() // 字高Combo
{
UpdateData(TRUE);
int nIndex = m_cmbTextHeight.GetCurSel();
if (nIndex >= 0)
m_cmbTextHeight.GetLBText(nIndex, m_csTextHeight);
g_dTextHeight = _tstof(m_csTextHeight);
if (m_bDlgType) // sg add 090305
UpdataEnt();
}
void CElevDlg::OnEditchangeComboTextHeight()
{
UpdateData(TRUE);
m_cmbTextHeight.GetWindowText(m_csTextHeight);
g_dTextHeight = _tstof(m_csTextHeight);
if (m_bDlgType)
UpdataEnt();
}
void CElevDlg::OnSelchangeComboFongstyle() // 字体样式
{
UpdateData(TRUE);
int nRet = m_cmbStyleName.GetCurSel();
if (nRet >= 0)
m_cmbStyleName.GetLBText(nRet, m_csFontStyle);
g_csFontStyle = m_csFontStyle;
AcDbObjectId idTextStyle = GlobalFunc::GetTextStyleId(m_csFontStyle);
if (!idTextStyle)
return;
OPENOBJ_BEGIN(idTextStyle, AcDb::kForRead, AcDbTextStyleTableRecord, pStyle);
ASSERT(pStyle);
CString strTemp;
strTemp.Format(_T("%.1f"), pStyle->textSize()); // 读文字风格的字高
if (_tstof(strTemp) > 1.0E-3)
m_csTextHeight = strTemp;
OPENOBJ_END();
g_dTextHeight = _tstof(m_csTextHeight);
UpdateData(FALSE);
m_cmbStyleName.SetCurSel(m_cmbStyleName.FindStringExact(0, m_csFontStyle));
if (m_bDlgType) // sg add 090305
UpdataEnt();
}
void CElevDlg::OnSelchangeComboTextLoc() // 文字位置
{
UpdateData(TRUE);
int nRet = m_cmbTextLoc.GetCurSel();
if (nRet >= 0)
m_cmbTextLoc.GetLBText(nRet, m_csTextLoc);
g_csTextLoc = m_csTextLoc;
if (m_bDlgType)
UpdataEnt();
}
void CElevDlg::OnBnClickedSideText() // 文字是否在线端
{
UpdateData(TRUE);
if (m_bDlgType) // sg add 090305
UpdataEnt();
}
void CElevDlg::OnBnClickedUpText() // sg add 090311,文字是否居中
{
UpdateData(TRUE);
if (m_bDlgType)
UpdataEnt();
}
void CElevDlg::OnBnClickedStandard() // 是否规范样式
{
UpdateData(TRUE);
// 控制“添加括号”是否可改
GetDlgItem(IDC_CHECK_PARENTHESES)->EnableWindow(!g_bStandard);
UpdateData(FALSE);
if (m_bDlgType) // sg add 090305
UpdataEnt();
}
void CElevDlg::OnBnClickedParentheses() // 是否添加括号
{
UpdateData(TRUE);
if (m_bDlgType) // sg add 090305
UpdataEnt();
}
// sg add 090220,切换属性页面
void CElevDlg::OnSelchangeTabElevType(NMHDR* pNMHDR, LRESULT* pResult)
{
if (IsSitePlanDlg())
{
return;
}
if (m_bHatchTou) // JIG基线、引线,不可以切换到总图页面
{
g_nElevType = 0;
m_Tab.SetCurSel(g_nElevType);
UpdateData(FALSE);
acedGetAcadDwgView()->SetFocus();
return;
}
g_nElevType = m_Tab.GetCurSel();
SetTabCurPage1(); // 调整控件的显示
SetTabCurPage2(); // 强制规定
SetTextLocationByStyle(); // 设置显示哪种文字与符号的位置关系设置方式
g_iPrecision = 1 - g_nElevType; // 调整默认精确度,建筑.000,总图.00
m_ComBox.SetCurSel(g_iPrecision);
if (m_bDlgType) // sg add 090305
m_pElev->SetPrec2(g_iPrecision == 0);
if (!m_bDlgType) // 对象编辑对话框,更新表格内容
InitGridAndTextFromEnt();
else // sg add 090305,绘制对话框
UpdataEnt();
*pResult = 0;
}
void CElevDlg::OnBnClickedUseConversion() // sg add 090222,是否应用换算关系
{
if (g_nElevType == 0) // 只对总图有效,OnSelchangeTabElevType函数中会调用
return;
UpdateData(TRUE);
SetShowByUseConversion(); // 处理控件显示
CalAbsoluteElev(); // 根据换算关系、相对标高修改绝对标高
UpdateData(FALSE);
}
void CElevDlg::OnChangeEditAbsoluteElev() // sg add 090312,改变绝对标高
{
// 保留旧值,防止输入错误。绝对标高只允许输入数字,小数点,负号
CString csTmp = g_csAbsoluteElev;
UpdateData(TRUE);
// sg modify 120608,只有在自动换算的时候,才要求绝对标高的地方是数字
// if (!IsDigitEle(g_csAbsoluteElev))
//tyj modify 20160826:绝对标高不能有空格
if (g_csAbsoluteElev.Find(_T(" ")) != -1)
{
g_csAbsoluteElev.Remove(' ');
}
if (g_bUseConversion && !IsDigitEle(g_csAbsoluteElev))
g_csAbsoluteElev = csTmp;
CalRelativeElev(); // 计算相对标高
UpdateData(FALSE);
}
void CElevDlg::OnChangeEditRelativeElev() // sg add 090312,改变相对标高
{
UpdateData(TRUE);
CalAbsoluteElev(); // 计算绝对标高
UpdateData(FALSE);
}
void CElevDlg::OnChangeEditConversion() // sg add 090223,改变换算关系
{
// 保留旧值,防止输入错误。换算关系值只允许输入数字,小数点,负号
CString csTmp = g_csElevConversion;
UpdateData(TRUE);
if (!IsDigitEle(g_csElevConversion))
g_csElevConversion = csTmp;
CalAbsoluteElev(); // 计算绝对标高
UpdateData(FALSE);
}
void CElevDlg::CalAbsoluteElev() // sg add 090223,用换算关系、相对标高,计算绝对标高
{
if (g_nElevType == 0 || !g_bUseConversion) // 只对自动换算的总图标高有效
return;
CString csRelativeElev = g_csRelativeElev; // 相对标高
csRelativeElev.TrimLeft();
csRelativeElev.TrimRight();
BOOL bFlag = csRelativeElev.IsEmpty();
if (bFlag || !IsDigitEle(csRelativeElev)) // 空,文字注释
csRelativeElev = _T("0");
CString csPrecision;
if (g_iPrecision == 0) // .00
csPrecision = _T("%.2f");
else // .000
csPrecision = _T("%.3f");
double dRelativeElev = _tstof(csRelativeElev),
dAbsoluteElev = dRelativeElev + _tstof(g_csElevConversion);
g_csAbsoluteElev.Format(csPrecision, dAbsoluteElev); // 绝对标高
if (bFlag) // 相对标高不能为空,但可以为非数字
g_csRelativeElev.Format(csPrecision, dRelativeElev);
}
void CElevDlg::CalRelativeElev() // sg add 090312,用换算关系、绝对标高,计算相对标高
{
if (g_nElevType == 0 || !g_bUseConversion) // 只对自动换算的总图标高有效
return;
CString csAbsoluteElev = g_csAbsoluteElev; // 绝对标高
csAbsoluteElev.TrimLeft();
csAbsoluteElev.TrimRight();
BOOL bFlag = csAbsoluteElev.IsEmpty();
if (bFlag) // 空
csAbsoluteElev = _T("0");
CString csPrecision;
if (g_iPrecision == 0) // .00
csPrecision = _T("%.2f");
else // .000
csPrecision = _T("%.3f");
double dAbsoluteElev = _tstof(csAbsoluteElev),
dRelativeElev = dAbsoluteElev - _tstof(g_csElevConversion); // 相对标高
g_csRelativeElev.Format(csPrecision, dRelativeElev);
if (bFlag) // 绝对标高不能为空
g_csAbsoluteElev.Format(csPrecision, dAbsoluteElev);
}
BOOL CElevDlg::IsDigitEle(const XString &sText) // sg add 090223,判断输入内容是否是数字
{
BOOL bRet = TRUE;
CString csText = (LPCTSTR)sText;
int nLen = csText.GetLength();
for (int i = 0; i < nLen; i++)
{
if (_istdigit(csText[i]) || csText[i] == _T('.')) // 数字、小数点
continue;
if (i == 0 && csText[i] == _T('-')) // 负号
continue;
bRet = FALSE;
break;
}
return bRet;
}
void CElevDlg::OnRadioElevAlignType1() // 上下排列
{
UpdateData(TRUE);
if (g_nElevTextAlign == 0) // 上下排列
{
g_bElevSideText = TRUE; // 强制“文字齐线端”
GetDlgItem(IDC_CHECK_RIGHTTEXT)->EnableWindow(FALSE); // “文字齐线端”不可改
}
else // 左右排列
GetDlgItem(IDC_CHECK_RIGHTTEXT)->EnableWindow(TRUE);
UpdateData(FALSE);
if (m_bDlgType) // sg add 090305,如果是绘制对话框,更新对象
UpdataEnt();
}
void CElevDlg::OnRadioElevAlignType2() // 左右排列
{
UpdateData(TRUE);
if (g_nElevTextAlign == 0) // 上下排列
{
g_bElevSideText = TRUE; // 强制“文字齐线端”
GetDlgItem(IDC_CHECK_RIGHTTEXT)->EnableWindow(FALSE); // “文字齐线端”不可改
}
else // 左右排列
GetDlgItem(IDC_CHECK_RIGHTTEXT)->EnableWindow(TRUE);
UpdateData(FALSE);
if (m_bDlgType) // sg add 090305,如果是绘制对话框,更新对象
UpdataEnt();
}
void CElevDlg::OnButtonAddMutiElev() // sg add 090401,调用自动多层标高
{
/*CTemporaryResourceOverride vTemp;
CEditMutiElevDlg dlg;
dlg.SetPrecision(g_iPrecision != 0); // 设置精确度
CString csCell01; // 首层楼层高
XStringList lstElevs; // 全部标高
long lRows = m_grid.GetRowNum();
for (long l = 0; l < lRows; l++)
{
if (l == 0)
csCell01 = m_grid[l][1l].GetText();
TString sCol1 = m_grid[l][0l].GetText();
lstElevs.Append(tstrnew(sCol1));
}
dlg.SetCell01(csCell01); // 设置首层楼层高
dlg.SetKnownElev(lstElevs); // 设置全部标高
if (dlg.DoModal() == IDOK)
{
XStringList lstCol1, lstCol2;
dlg.GetGridTexts(lstCol1, lstCol2);
int nLen = lstCol1.Length();
m_grid.Clear();
m_grid.SetRowNum(nLen);
for (long i = 0; i < nLen; i++)
{
m_grid[i][0l].SetText(lstCol1[i]); // 楼层标高
m_grid[i][1l].SetText(lstCol2[i]); // 楼层号/标高说明
}
g_bHightWrite = TRUE;
SetGridEnableWrite(g_bHightWrite);
}*/
}
// sg add 120609,下面这些函数用于提供外界与上面定义的静态变量交互使用
BOOL CElevDlg::IsHightWrite() const
{
return g_bHightWrite;
}
BOOL CElevDlg::IsHasBase() const
{
return g_bHasBase;
}
BOOL CElevDlg::IsHasLeader() const
{
return g_bHasLeader;
}
BOOL CElevDlg::IsOrder() const
{
return g_bOrder;
}
void CElevDlg::SetLeaderLen(double dLen)
{
g_nLeaderLen = dLen;
}
void CElevDlg::SetBaseLen(double dLen)
{
g_nBaseLen = dLen;
}
void CElevDlg::SetSitePlanDlg(BOOL bSitePlan)
{
m_bSitePlanDlg = TRUE;
return;
/*m_bSitePlanDlg = bSitePlan;
if (g_bFirstExecute)
{
if (bSitePlan)
g_iPrecision = 0;
else
g_iPrecision = 1;
g_bFirstExecute = FALSE;
}*/
}
#pragma endregion
#pragma region CLeaderDlg
extern double g_nHeight;
static int g_nArrowStyle = 1;
static AecXDbSymbMultiLeader::TArrowStyle
g_ArrowStyle[] = { AecXDbSymbMultiLeader::kArrow,
AecXDbSymbMultiLeader::kDote, AecXDbSymbMultiLeader::kCrossing, AecXDbSymbMultiLeader::kNone };
CString CLeaderDlg::g_csArrowSize = _T("3.0");
CString CLeaderDlg::m_strInputUp = _T("");
CString CLeaderDlg::m_strInputDown = _T("");
// add by cwk on 060706
extern CString g_sLeadFixAngle;
extern BOOL g_bLeadFixAngle;
//add by lgy 20120206 固定转角不能记忆
CString CLeaderDlg::m_sFixAngle = _T("45");
BOOL CLeaderDlg::m_bFixAngle = FALSE;
BOOL CLeaderDlg::m_bContinue = TRUE; // Add by lcf on 2005-06-29
BOOL CLeaderDlg::m_bAllPtsOnLine = FALSE; // sg add 090327
int CLeaderDlg::m_nTextAlign = 2; // sg add 090402
int CLeaderDlg::s_iLeaderStyle = 0;
IMPLEMENT_DYNAMIC(CLeaderDlg, CBaseTextDlg)
CLeaderDlg::CLeaderDlg(BOOL bEdit, CWnd* pParent /*=NULL*/)
: CBaseTextDlg(CLeaderDlg::IDD, pParent), m_bEditObj(bEdit)
{
//注释 by lgy 20120206 固定转角不能记忆
// add by cwk on 060706
//m_sFixAngle = g_sLeadFixAngle;
//m_bFixAngle = g_bLeadFixAngle;
}
CLeaderDlg::CLeaderDlg(BOOL bEdit, UINT resID, CWnd* pParent /*=NULL*/)
: CBaseTextDlg(resID, pParent), m_bEditObj(bEdit)
{
//注释 by lgy 20120206 固定转角不能记忆
// add by cwk on 060706
//m_sFixAngle = g_sLeadFixAngle;
//m_bFixAngle = g_bLeadFixAngle;
}
void CLeaderDlg::DoDataExchange(CDataExchange* pDX)
{
CBaseTextDlg::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CLeaderDlg)
// sg modify 090507,仿照图名标注,试着解决“对象编辑中,有时候文字显示有问题”的BUG
if (pDX->m_bSaveAndValidate)
{
DDX_CBString(pDX, IDC_COMBO_INPUTTEXT, m_strInputUp);
DDX_CBString(pDX, IDC_COMBO_INPUTTEXT1, m_strInputDown);
}
else
{
GetDlgItem(IDC_COMBO_INPUTTEXT)->SetWindowText(m_strInputUp);
GetDlgItem(IDC_COMBO_INPUTTEXT1)->SetWindowText(m_strInputDown);
}
DDX_Control(pDX, IDC_COMBO_INPUTTEXT, m_comboInputText);
DDX_Control(pDX, IDC_COMBO_INPUTTEXT1, m_comboInputText1);
DDX_Text(pDX, IDC_EDIT1, m_sFixAngle);
DDX_CBIndex(pDX, IDC_COMBO_STYLE, g_nArrowStyle);
DDX_CBString(pDX, IDC_ARROW_SIZE, g_csArrowSize);
if (pDX->m_bSaveAndValidate && _tstof(g_csArrowSize) < 1.0E-3)
pDX->Fail();
DDX_Check(pDX, IDC_CONTINUE, m_bContinue);
DDX_Check(pDX, IDC_CHECK1, m_bFixAngle);
DDX_Check(pDX, IDC_CHECK_ONLINE, m_bAllPtsOnLine); // sg add 090327
DDX_CBIndex(pDX, IDC_COMBO_TEXTALIGN, m_nTextAlign); // sg add 090402
DDX_Check(pDX, IDC_CHK_LERDER, s_iLeaderStyle); // add by lxb on 111229
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CLeaderDlg, CBaseTextDlg)
//{{AFX_MSG_MAP(CLeaderDlg)
ON_BN_CLICKED(IDC_CHECK1, OnUnChangeAngle)
ON_BN_CLICKED(IDC_CHECK_ONLINE, OnCHKOnline)
ON_BN_CLICKED(IDC_CHK_LERDER, OnCHKLeader)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CLeaderDlg message handlers
BOOL CLeaderDlg::OnInitDialog()
{
CBaseTextDlg::OnInitDialog();
LoadHisText();
UpdateData(FALSE);
GetDlgItem(IDC_COMBO_INPUTTEXT)->SetFocus();
// add by cwk on 060705
if (!m_bEditObj)
{
GetDlgItem(IDC_EDIT1)->EnableWindow(m_bFixAngle);
}
else
{
GetDlgItem(IDC_CHECK1)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_EDIT1)->ShowWindow(SW_HIDE);
}
UpdateData(FALSE);
return FALSE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
// Modify by lcf On 2005-07-05
CWnd* CLeaderDlg::GetCurWnd()
{
UpdateData(TRUE);
CWnd *pWnd = this->GetFocus();
CWnd *pWnd2 = NULL;
if (m_comboInputText.m_hWnd == pWnd->GetParent()->m_hWnd)
{
pWnd2 = GetDlgItem(IDC_COMBO_INPUTTEXT); // 把CWnd 回传给基类
m_strInputText = m_strInputUp;
}
else if (m_comboInputText1.m_hWnd == pWnd->GetParent()->m_hWnd)
{
pWnd2 = GetDlgItem(IDC_COMBO_INPUTTEXT1); // 把CWnd 回传给基类
m_strInputText = m_strInputDown;
}
else
{
int nSel = m_comboInputText.GetWindowTextLength();
m_comboInputText.SetEditSel(nSel, nSel);
pWnd2 = GetDlgItem(IDC_COMBO_INPUTTEXT);
}
return(pWnd2);
}
void CLeaderDlg::UpdateInputText()
{
CWnd *pWnd = this->GetFocus();
if (m_comboInputText.m_hWnd == pWnd->GetParent()->m_hWnd)
{
m_strInputUp = m_strInputText;
}
if (m_comboInputText1.m_hWnd == pWnd->GetParent()->m_hWnd)
{
m_strInputDown = m_strInputText;
}
UpdateData(FALSE);
}
void CLeaderDlg::Dlg2Obj(AecXDbSymbMultiLeader *pText)
{
CBaseTextDlg::Dlg2Obj(pText);
pText->SetText1(m_strInputUp);
pText->SetText2(m_strInputDown);
pText->SetArrow(g_ArrowStyle[g_nArrowStyle]);
double nSize = _tstof(g_csArrowSize);
if (nSize > 1.0E-3)
pText->SetArrowSize(nSize);
// sg add 090402,增加文字相对于基线的对齐方式
AecXDbSymbMultiLeader::TSymbMLTextAlign nAlign = (AecXDbSymbMultiLeader::TSymbMLTextAlign)(m_nTextAlign + 1);
pText->SetTextAlign(nAlign);
//引线平行 add by lxb on 111229
pText->SetLeaderParalle(s_iLeaderStyle);
}
void CLeaderDlg::Obj2Dlg(AecXDbSymbMultiLeader *pText)
{
CBaseTextDlg::Obj2Dlg(pText);
m_strInputUp = pText->GetText1();
m_strInputDown = pText->GetText2();
AecXDbSymbMultiLeader::TArrowStyle Style = pText->GetArrow();
for (int i = 0; i < 4; i++)
{
if (Style == g_ArrowStyle[i])
g_nArrowStyle = i;
}
g_csArrowSize.Format(_T("%.1f"), pText->GetArrowSize());
// sg add 090402,增加文字相对于基线的对齐方式
m_nTextAlign = (int)(pText->GetTextAlign() - 1);
//是否为引线平行 add by lxb on 111229
s_iLeaderStyle = pText->IsLeaderParall();
if (s_iLeaderStyle)
m_bAllPtsOnLine = FALSE;
}
void CLeaderDlg::OnOK()
{
AddToRecent();
CBaseTextDlg::OnOK();
}
// Add by lcf on 20050708
void CLeaderDlg::AddToRecent()
{
{
UpdateData(TRUE);
int len = m_lstHistory.Length();
TCHAR strTmpPath[256] = _T("");
GetTempPath(255, strTmpPath);
_tcscat(strTmpPath, _T("leader.his"));
#if (ARX>15)
std::
#endif
ofstream out(strTmpPath);
if (m_strInputUp != _T(""))
{
out << (const char *)_AS(m_strInputUp) << "\n";
int index = m_lstHistory.Index(m_strInputUp);
if (index >= 0)
{
m_lstHistory.Remove(index);
len--;
}
if (len > maxHisList - 1)
len = maxHisList - 1;
}
for (int i = 0; i < len; i++)
out << _AS(m_lstHistory[i]) << "\n";
len = m_lstHistory1.Length();
TCHAR strTmpPath1[256] = _T("");
GetTempPath(255, strTmpPath1);
_tcscat(strTmpPath1, _T("leader1.his"));
#if (ARX>15)
std::
#endif
ofstream out1(strTmpPath1);
if (m_strInputDown != _T(""))
{
out1 << (const char *)_AS(m_strInputDown) << "\n";
int index = m_lstHistory1.Index(m_strInputDown);
if (index >= 0)
{
m_lstHistory1.Remove(index);
len--;
}
if (len > maxHisList - 1)
len = maxHisList - 1;
}
for (i = 0; i < len; i++)
out1 << _AS(m_lstHistory1[i]) << "\n";
}
m_lstHistory.Reset();
m_lstHistory1.Reset();
m_comboInputText.ResetContent();
m_comboInputText1.ResetContent();
LoadHisText();
}
void CLeaderDlg::LoadHisText()
{
TCHAR strTmpPath[256] = _T("");
GetTempPath(255, strTmpPath);
_tcscat(strTmpPath, _T("leader.his"));
#if (ARX>15)
std::
#endif
ifstream in(strTmpPath);
while (!(!in))
{
char line[256];
in.getline(line, 255);
if (!in)
break;
m_lstHistory.Append(tstrnew(TString(line)));
}
for (int m = 0; m < m_lstHistory.Length(); m++)
m_comboInputText.AddString(m_lstHistory[m]);
TCHAR strTmpPath1[256] = _T("");
GetTempPath(255, strTmpPath1);
_tcscat(strTmpPath1, _T("leader1.his"));
#if (ARX>15)
std::
#endif
ifstream in1(strTmpPath1);
while (!(!in1))
{
char line[256];
in1.getline(line, 255);
if (!in1)
break;
m_lstHistory1.Append(tstrnew(TString(line)));
}
for (m = 0; m < m_lstHistory1.Length(); m++)
m_comboInputText1.AddString(m_lstHistory1[m]);
UpdateData(false);
}
// add by cwk on 060705
void CLeaderDlg::OnUnChangeAngle()
{
// TODO: Add your control notification handler code here
if (!m_bEditObj)
{
if (m_bFixAngle)
{
m_bFixAngle = FALSE;
GetDlgItem(IDC_EDIT1)->EnableWindow(FALSE);
}
else
{
m_bFixAngle = TRUE;
GetDlgItem(IDC_EDIT1)->EnableWindow();
}
}
}
//add by lxb 111228
void CLeaderDlg::OnCHKOnline()
{
CButton *pBtn1 = ((CButton*)GetDlgItem(IDC_CHECK_ONLINE));
CButton *pBtn2 = ((CButton*)GetDlgItem(IDC_CHK_LERDER));
if (pBtn1->GetCheck() == BST_CHECKED)
{
pBtn2->SetCheck(BST_UNCHECKED);
}
UpdateData();
}
//add by lxb 111228
void CLeaderDlg::OnCHKLeader()
{
CButton *pBtn1 = ((CButton*)GetDlgItem(IDC_CHECK_ONLINE));
CButton *pBtn2 = ((CButton*)GetDlgItem(IDC_CHK_LERDER));
if (pBtn2->GetCheck() == BST_CHECKED)
{
pBtn1->SetCheck(BST_UNCHECKED);
}
UpdateData();
}
//add by lxb 111228
void CLeaderDlg::SetCheckBoxStatus(BOOL bEnableFlag)
{
if (!bEnableFlag)
{
if (s_iLeaderStyle == 1)
{
((CButton*)GetDlgItem(IDC_CHECK_ONLINE))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_CHK_LERDER))->EnableWindow(FALSE);
}
else
{
((CButton*)GetDlgItem(IDC_CHK_LERDER))->EnableWindow(FALSE);
}
}
else
{
((CButton*)GetDlgItem(IDC_CHECK_ONLINE))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_CHK_LERDER))->EnableWindow(TRUE);
}
}
int CLeaderDlg::GetLeaderStyle()
{
return s_iLeaderStyle;
}
#pragma endregion
#pragma region CCloudLineDlg
BOOL CCloudLineDlg::m_bCommon = TRUE;
int CCloudLineDlg::m_iMaxValue = 15;
int CCloudLineDlg::m_iMinValue = 5;
CString CCloudLineDlg::m_strEdition = _T("1");
CString CCloudLineDlg::m_strHeight = _T("5.0");
BOOL CCloudLineDlg::m_bEdit = FALSE;
int CCloudLineDlg::m_iDrawLineStyle = 2;
CString CCloudLineDlg::m_strType = GetTextStyleName(TS_SECTION);
IMPLEMENT_DYNAMIC(CCloudLineDlg, CModelessDialog)
CCloudLineDlg::CCloudLineDlg(CWnd* pParent) : CModelessDialog(CCloudLineDlg::IDD, pParent)
{
m_bStyeChange = false; //为了控制是否切换云线的绘制方式
}
CCloudLineDlg::~CCloudLineDlg()
{
}
void CCloudLineDlg::DoDataExchange(CDataExchange* pDX)
{
CModelessDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_CMB_MAXARC, m_iMaxValue);
DDX_Text(pDX, IDC_CMB_MINARC, m_iMinValue);
DDX_Radio(pDX, IDC_RAD_COMMON, m_bCommon);
DDX_Check(pDX, IDC_CHK_EDITION, m_bEdit);
DDX_CBString(pDX, IDC_CMB_EDITHEIGHT, m_strHeight);
//DDX_CBString(pDX, IDC_CMB_EDITSTYLE, m_strType);
if (pDX->m_bSaveAndValidate)
{
DDX_CBString(pDX, IDC_CMB_EDITSTYLE, m_strType);
}
else
{
GetDlgItem(IDC_CMB_EDITSTYLE)->SetWindowText(m_strType);
}
DDX_CBString(pDX, IDC_CMB_EDITON, m_strEdition);
DDX_Control(pDX, IDC_CMB_EDITSTYLE, m_cmbDrawStyle);
}
BOOL CCloudLineDlg::OnInitDialog()
{
CModelessDialog::OnInitDialog();
//createToolBar(); //创建工具条
InitTextType();
OnClickEdition();
//add by lgy 20120522 设置按钮状态
CheckTypeButton();
int ctrlID = IDC_RADIO1;
if (m_iDrawLineStyle == 0) // 圆
ctrlID = IDC_RADIO3;
else if (m_iDrawLineStyle == 1) // 矩
ctrlID = IDC_RADIO1;
else if (m_iDrawLineStyle == 2) // 矩
ctrlID = IDC_RADIO4;
else
ctrlID = IDC_RADIO5;
CButton *pWnd = (CButton*)GetDlgItem(ctrlID);
if (pWnd)
pWnd->SetCheck(1);
UpdateData(FALSE);
return TRUE;
}
BEGIN_MESSAGE_MAP(CCloudLineDlg, CModelessDialog)
ON_BN_CLICKED(IDC_CHK_EDITION, OnClickEdition)
ON_BN_CLICKED(IDC_RADIO1, OnClickEditionA)
ON_BN_CLICKED(IDC_RADIO3, OnClickEditionB)
ON_BN_CLICKED(IDC_RADIO4, OnClickEditionC)
ON_BN_CLICKED(IDC_RADIO5, OnClickEditionD)
ON_BN_CLICKED(IDC_BTN_EDITHEIGHT, OnClickBtnTextHeight)
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText)
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText)
END_MESSAGE_MAP()
void CCloudLineDlg::OnClickEdition()
{
UpdateData(TRUE);
if (m_bEdit) //是否编辑版次文字
{
GetDlgItem(IDC_CMB_EDITON)->EnableWindow(TRUE);
GetDlgItem(IDC_CMB_EDITHEIGHT)->EnableWindow(TRUE);
GetDlgItem(IDC_BTN_EDITHEIGHT)->EnableWindow(TRUE);
GetDlgItem(IDC_CMB_EDITSTYLE)->EnableWindow(TRUE);
}
else
{
GetDlgItem(IDC_CMB_EDITON)->EnableWindow(FALSE);
GetDlgItem(IDC_CMB_EDITHEIGHT)->EnableWindow(FALSE);
GetDlgItem(IDC_BTN_EDITHEIGHT)->EnableWindow(FALSE);
GetDlgItem(IDC_CMB_EDITSTYLE)->EnableWindow(FALSE);
}
UpdateData(FALSE);
}
/*void CCloudLineDlg::createToolBar()//创建工具条
{
UINT buttonID[] = { ID_BTN_EDITIONA, ID_BTN_EDITIONB, ID_BTN_EDITIONC, ID_BTN_EDITIOND };
CAcModuleResourceOverride vTmp;
m_toolbar.Create(WS_VISIBLE | WS_CHILD | CCS_BOTTOM | TBSTYLE_TOOLTIPS
| CCS_ADJUSTABLE, CRect(0, 0, 0, 0), this, IDR_CLOUDLINE);
TBBUTTON *pIndex, *pRTF_Button = new TBBUTTON[20];
pIndex = pRTF_Button;
for (long lIndex = 0; lIndex < 4; lIndex++) //创建四个BUTTON
{
memset(pIndex, NULL, sizeof(TBBUTTON));
pIndex->iBitmap = lIndex;
pIndex->idCommand = buttonID[lIndex];
pIndex->fsStyle = TBSTYLE_CHECKGROUP;
pIndex->fsState = TBSTATE_ENABLED;
pIndex++;
}
CSize size(16, 15);
m_toolbar.SetButtonSize(size);
m_toolbar.AddButtons(4, pRTF_Button);
// sg delete 120613,解决64位下的崩溃问题
// delete pIndex;
delete[] pRTF_Button;
m_toolbar.SetBitmapSize(size);
m_toolbar.ModifyStyle(0, TBSTYLE_FLAT);
m_toolbar.AddBitmap(4, IDR_CLOUDLINE);
}*/
BOOL CCloudLineDlg::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)//工具条的button功能说明
{
ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);
if (GetRoutingFrame() != NULL) return FALSE;
TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
CString strTipText;
UINT nID = (UINT)pNMHDR->idFrom;
if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||
pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
{
return FALSE;
}
if (nID != 0)
{
{
CAcModuleResourceOverride vTmp;
strTipText.LoadString(nID);
}
#ifndef _UNICODE
if (pNMHDR->code == TTN_NEEDTEXTA) {
lstrcpyn(pTTTA->szText, strTipText, sizeof(pTTTA->szText));
}
else {
_mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
}
#else
if (pNMHDR->code == TTN_NEEDTEXTA) {
_wcstombsz(pTTTA->szText, strTipText, sizeof(pTTTA->szText));
}
else {
lstrcpyn(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
}
#endif
*pResult = 0;
::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0, SWP_NOACTIVATE |
SWP_NOSIZE | SWP_NOMOVE | SWP_NOOWNERZORDER); return TRUE;
}
return TRUE;
}
void CCloudLineDlg::OnClickEditionA()
{
UpdateData(TRUE);
m_iDrawLineStyle = 1; //绘制类型为矩形云线
m_bStyeChange = true;
//add by lgy 20120522 设置按钮状态
CheckTypeButton();
UpdateData(FALSE);
acedPostCommand(_T("\33"));//发送一个esc
}
void CCloudLineDlg::OnClickEditionB()
{
UpdateData(TRUE);
m_iDrawLineStyle = 0; //绘制类型为圆形云线
m_bStyeChange = true;
//add by lgy 20120522 设置按钮状态
CheckTypeButton();
UpdateData(FALSE);
acedPostCommand(_T("\33"));
}
void CCloudLineDlg::OnClickEditionC()
{
UpdateData(TRUE);
m_iDrawLineStyle = 2; //任意绘制
m_bStyeChange = true;
//add by lgy 20120522 设置按钮状态
CheckTypeButton();
UpdateData(FALSE);
acedPostCommand(_T("\33"));
}
void CCloudLineDlg::OnClickEditionD()
{
UpdateData(TRUE);
m_iDrawLineStyle = 3; //选择对象生成
m_bStyeChange = true;
//add by lgy 20120522 设置按钮状态
CheckTypeButton();
UpdateData(FALSE);
acedPostCommand(_T("\33"));
}
void CCloudLineDlg::OnClickBtnTextHeight()//字高
{
UpdateData(TRUE);
XPushAutoHide noAutoHide(this);
double dHeight = _tstof(m_strHeight);
dHeight = dHeight * GlobalFunc::DocGetPScale();
BeginEditorCommand();
if (GlobalFunc::GetDist(_T("\n字高"), dHeight, RSG_NOZERO | RSG_NONEG) == RTNORM)
{
dHeight /= GlobalFunc::DocGetPScale(); //将得到的字高长度除以当前图纸比例显示到对话框中
CString str;
str.Format(_T("%.1f"), dHeight);
m_strHeight = str;
}
CompleteEditorCommand();
UpdateData(FALSE);
}
BOOL CCloudLineDlg::DestroyWindow()
{
UpdateData(TRUE);
// sg delete 120613,无法理解下面4句话是什么意思
//m_iMinValue;
//m_iMaxValue;
//m_strEdition;
//m_strType;
return CModelessDialog::DestroyWindow();
}
void CCloudLineDlg::InitTextType()
{
XSymbolList lstStyle(_T("STYLE"));
for (int m = 0; m < lstStyle.Length(); m++) //初始化文字样式
{
m_cmbDrawStyle.AddString(lstStyle[m]);
}
// sg modify 120706,增加一个判断,如果当前记忆的样式没有的话,那么使用天正固定的文字样式
//m_cmbDrawStyle.SetCurSel(m_cmbDrawStyle.FindStringExact(0, m_strType));
int nRet = m_cmbDrawStyle.FindStringExact(0, m_strType);
if (nRet < 0)
{
nRet = m_cmbDrawStyle.FindStringExact(0, _T("_TCH_LABEL"));
}
m_cmbDrawStyle.SetCurSel(nRet);
}
void CCloudLineDlg::CheckTypeButton()
{
//m_toolbar.CheckButton(ID_BTN_EDITIONA, m_iDrawLineStyle == 1);
//m_toolbar.CheckButton(ID_BTN_EDITIONB, m_iDrawLineStyle == 0);
//m_toolbar.CheckButton(ID_BTN_EDITIONC, m_iDrawLineStyle == 2);
//m_toolbar.CheckButton(ID_BTN_EDITIOND, m_iDrawLineStyle == 3);
}
bool CCloudLineDlg::GetIsChangeType()
{
return m_bStyeChange;
}
void CCloudLineDlg::SetIsChangeType(bool bIs)
{
m_bStyeChange = bIs;
}
BOOL CCloudLineDlg::GetIsDrawing()
{
UpdateData(TRUE);
return m_bCommon;
}
int CCloudLineDlg::GetDrawLineStyle()
{
UpdateData(TRUE);
return m_iDrawLineStyle;
}
BOOL CCloudLineDlg::GetIsEdition()
{
UpdateData(TRUE);
return m_bEdit;
}
double CCloudLineDlg::GetMaxValue(BOOL bAsPaperUnit)
{
UpdateData(TRUE);
double dMax = m_iMaxValue;
if (bAsPaperUnit)
dMax *= GlobalFunc::DocGetPScale();
return dMax;
}
double CCloudLineDlg::GetMinValue(BOOL bAsPaperUnit)
{
UpdateData(TRUE);
double dMin = m_iMinValue;
if (bAsPaperUnit)
dMin *= GlobalFunc::DocGetPScale();
return dMin;
}
double CCloudLineDlg::GetEndWidth()
{
UpdateData(TRUE);
double dEndWidth = 0,
dMax = m_iMaxValue;
if (m_bCommon)
dEndWidth = dMax / 10;
return dEndWidth;
}
void CCloudLineDlg::GetTextParam(BOOL &bHasText, CString &csText, double &dHeight, AcDbObjectId &idTextStyle)
{
UpdateData(TRUE);
bHasText = m_bEdit;
csText = m_strEdition;
dHeight = _tstof(m_strHeight);
idTextStyle = InitTextStyle(m_strType);
}
void CCloudLineDlg::GetCloudLinePoly(const XCurveSegment &cvSegment, XPoly2D &polyModi)
{
UpdateData(TRUE);
double dMax = m_iMaxValue * GlobalFunc::DocGetPScale(),
dMin = m_iMinValue * GlobalFunc::DocGetPScale();
double dLengh(0.0),
nLast = polyModi.GetLength() - 1; // 当前的最后一个
while (dLengh < cvSegment.GetLength())
{
ADSGePointDir2d pt;
cvSegment.Polar(dLengh, pt);
polyModi.AppendNode(pt.AsAcGePoint3d());
double dTotalLen = (rand() % 10) / 10.000;
dTotalLen = dTotalLen * dMax;
if (dTotalLen < dMin)
{
dTotalLen += dMin;
}
dLengh = dLengh + dTotalLen;
}
}
void CCloudLineDlg::GetCloudLinePoly(const XPoly2D &polyOld, XPoly2D &polyModi)
{
XCurveSegment cvSegment,
cvPrevSegment;
XPoint ptPrevEnd;
BOOL bReverseArc(FALSE),
bReversePrevArc(FALSE);
int nSeg = polyOld.TotalSegments();
for (int i = 0; i < nSeg; i++)
{
polyOld.Nth(i, cvSegment);
if (cvSegment.Is(CURVE_ARC)) // 弧
{
int nPrev = i - 1;
nPrev = GlobalFunc::DePeriod(nSeg, nPrev);
polyOld.Nth(nPrev, cvPrevSegment);
if (bReversePrevArc) // 前一段的情况
ptPrevEnd = cvPrevSegment.StartPoint();
else
ptPrevEnd = cvPrevSegment.EndPoint();
XArc arc = cvSegment.GetArc();
XPoint ptStart;
arc.GetStartPoint(ptStart);
bReverseArc = ptPrevEnd != ptStart;
}
double dMax = m_iMaxValue * GlobalFunc::DocGetPScale(),
dMin = m_iMinValue * GlobalFunc::DocGetPScale();
double dLengh(0.0);
int nLast = polyModi.Length(); // 当前的最后一个
while (dLengh < cvSegment.GetLength())
{
ADSGePointDir2d pt;
cvSegment.Polar(dLengh, pt);
if (bReverseArc)
polyModi.InsertNodeAt(nLast, pt.AsAcGePoint3d());
else
polyModi.AppendNode(pt.AsAcGePoint3d());
double dTotalLen = (rand() % 10) / 10.000;
dTotalLen = dTotalLen * dMax;
if (dTotalLen < dMin)
{
dTotalLen += dMin;
}
dLengh = dLengh + dTotalLen;
}
bReversePrevArc = bReverseArc;
bReverseArc = FALSE;
}
}
#pragma endregion
#pragma region CCharToolbarDlg
IMPLEMENT_DYNAMIC(CCharToolbarDlg, CModelessDialog)
CCharToolbarDlg::CCharToolbarDlg(UINT IDD, CWnd* pParent /*=NULL*/)
: CModelessDialog(IDD, pParent)
{
m_nOperCode = -1;
m_bNeedSingleLineText = TRUE; // sg add 090324
}
void CCharToolbarDlg::DoDataExchange(CDataExchange* pDX)
{
CModelessDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CCharToolbarDlg, CModelessDialog)
ON_COMMAND_RANGE(ID_SPECIAL_CHAR, ID_PICKTEXT, OnChar)
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText)
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCharToolbarDlg message handlers
BOOL CCharToolbarDlg::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)
{
ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);
// if there is a top level routing frame then let it handle the message
if (GetRoutingFrame() != NULL) return FALSE;
// to be thorough we will need to handle UNICODE versions of the message also !!
TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
//TCHAR szFullText[512];
CString strTipText;
// Zyu modify on 100726,支持64位
//UINT nID = pNMHDR->idFrom;
UINT nID = (UINT)pNMHDR->idFrom;
if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||
pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
{
// idFrom is actually the HWND of the tool
//nID = ::GetDlgCtrlID((HWND)nID);
return FALSE; // shen rui add 对话框控件不显示
}
if (nID != 0) // will be zero on a separator
{
//LoadString(AfxGetResourceHandle(), nID, szFullText, 8);
//strTipText=szFullText;
CTemporaryResourceOverride vTmp;
strTipText.LoadString(nID); //=szFullText;
#ifndef _UNICODE
if (pNMHDR->code == TTN_NEEDTEXTA)
{
lstrcpyn(pTTTA->szText, strTipText, sizeof(pTTTA->szText));
}
else
{
_mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
}
#else
if (pNMHDR->code == TTN_NEEDTEXTA)
{
_wcstombsz(pTTTA->szText, strTipText, sizeof(pTTTA->szText));
}
else
{
lstrcpyn(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
}
#endif
*pResult = 0;
// bring the tooltip window above other popup windows
::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0, SWP_NOACTIVATE |
SWP_NOSIZE | SWP_NOMOVE | SWP_NOOWNERZORDER); return TRUE;
}
return TRUE;
}
BOOL CCharToolbarDlg::OnInitDialog()
{
CModelessDialog::OnInitDialog();
CTemporaryResourceOverride vTmp;
m_toolbar.Create(this);
m_toolbar.LoadToolBar(IDR_TOOLBAR_TEXT);
m_toolbar.ShowWindow(SW_SHOW);
m_toolbar.SetBarStyle(CBRS_ALIGN_TOP | CBRS_TOOLTIPS | CBRS_FLYBY);
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CCharToolbarDlg::OnChar(UINT nID)
{
UpdateData(TRUE);
int h, l;
if (!GetPosition(h, l))
return;
int i = 0;// Modify By Lcf On 2005-07-01
switch (nID)
{
case ID_DOWN_MARK:
if (h == l)
{
AfxMessageBox(_T("请先在文字框中选择字符!"));
return;
}
m_strInputText.Insert(l, _T("^L"));
m_strInputText.Insert(h + 2, _T("^L"));
i = h + 4;
break;
case ID_UP_MARK:
if (h == l)
{
AfxMessageBox(_T("请先在文字框中选择字符!"));
return;
}
m_strInputText.Insert(l, _T("^U"));
m_strInputText.Insert(h + 2, _T("^U"));
i = h + 4;
break;
case ID_CIRCLE:
if (h == l)
{
AfxMessageBox(_T("请先在文字框中选择字符!"));
return;
}
m_strInputText.Insert(l, _T("^C"));
m_strInputText.Insert(h + 2, _T("^C"));
i = h + 4;
break;
case ID_ANGLE_CHAR:
m_strInputText.Delete(l, h - l);
m_strInputText.Insert(l, _T("%%d"));
i = l + 3;
break;
case ID_DIA_CHAR:
m_strInputText.Delete(l, h - l);
m_strInputText.Insert(l, _T("%%c"));
i = l + 3;
break;
case ID_TOLERANCE_CHAR:
m_strInputText.Delete(l, h - l);
m_strInputText.Insert(l, _T("%%p"));
i = l + 3;
break;
case ID_PERCENT_CHAR:
m_strInputText.Delete(l, h - l);
m_strInputText.Insert(l, _T("%%%"));
i = l + 3;
break;
case ID_ONE_STEEL:
m_strInputText.Delete(l, h - l);
m_strInputText.Insert(l, _T("^1"));
i = l + 2;
break;
case ID_TWO_STEEL:
m_strInputText.Delete(l, h - l);
m_strInputText.Insert(l, _T("^2"));
i = l + 2;
break;
case ID_THREE_STEEL:
m_strInputText.Delete(l, h - l);
m_strInputText.Insert(l, _T("^3"));
i = l + 2;
break;
case ID_FOUR_STEEL:
m_strInputText.Delete(l, h - l);
m_strInputText.Insert(l, _T("^4"));
i = l + 2;
break;
case ID_SPECIAL_CHAR:// Add By Lcf On 2005-07-01
{
XPushAutoHide noAutoHide(this);
CCharDlg dlg(this);
CString str;
CTemporaryResourceOverride vTemp;
if (dlg.DoModal() != IDOK || dlg.m_character == _T(""))
return;
str = dlg.m_character;
m_strInputText.Delete(l, h - l);
m_strInputText.Insert(l, str);
i = l + str.GetLength();
}
break;
case ID_WORD://词库
{
/*XPushAutoHide noAutoHide(this);
CInsTextDlg dlg(this);
dlg.SetPreText(m_strInputText);
// sg add 090324,控制返回值是单行文字,还是多行文字
dlg.SetSingleText(m_bNeedSingleLineText);
if (dlg.DoModal() != IDOK || dlg.GetEditText() == _T(""))
return;
m_strInputText.Delete(l, h - l);
m_strInputText.Insert(l, dlg.GetEditText());
i = l + dlg.GetEditText().GetLength();;*/
}
break;
case ID_PICKTEXT://拾取文字Add By Lcf On 2005-07-01
{
if (m_bModeless)
{
m_nOperCode = 1;
GlobalFunc::PostCommand(_T("` "), false);
}
else
{
GetPickText();
acedGetAcadDwgView()->SetFocus();
}
}
return;
}
CComboBox *pComboBox = NULL;
CEdit *pEdit = NULL;
if (m_ctrlInputText->IsKindOf(RUNTIME_CLASS(CComboBox))) {
pComboBox = (CComboBox*)m_ctrlInputText;
int index = pComboBox->FindStringExact(0, m_strInputText);
if (index < 0)
pComboBox->InsertString(0, m_strInputText);
pComboBox->SelectString(0, m_strInputText);
pComboBox->SetEditSel(i, i);
}// 以上四行目的为了防止COMBOBOX在已有列表选择一个最匹配的,所加m_strInputText只是临时的。
if (m_ctrlInputText->IsKindOf(RUNTIME_CLASS(CEdit))) {
pEdit = (CEdit*)m_ctrlInputText;
pEdit->SetSel(i, i);
}
UpdateData(FALSE);
if (pEdit)
pEdit->SetSel(i, i);
else
pComboBox->SetEditSel(i, i);
}
// Add by lcf On 2005-07-01
BOOL CCharToolbarDlg::GetPickText()
{
BeginEditorCommand();
Entity ent;
RBList mask(RTDXF0, _T("TCH_*,TEXT,MTEXT"), NULL);
XPoint pt;
PickEntSet pickents;
for (;;)
{
XPushAutoHide noAutoHide(this);
m_nOperCode = -1;
int h, l;
if (!GetPosition(h, l))
return FALSE;
int i = 0;// Modify By Lcf On 2005-07-01
if (GlobalFunc::SelectEntity(_T("\n屏幕拾取文字内容:"), ent, pt, mask) != RTNORM)
{
pickents.Redraw(4);
CompleteEditorCommand();
return TRUE;
}
ent.Redraw(3);
pickents += ent;
PickSet ss(SS_FREE);
ss += ent;
SubText* pSubText = GlobalFunc::HitTestOnText(ss, GlobalFunc::Ucs2Wcs(pt));
if (pSubText != NULL)
{
CString sText = pSubText->GetText();
delete pSubText;
m_strInputText.Delete(l, h - l);
m_strInputText.Insert(l, sText);
i = l + sText.GetLength();
}
CComboBox *pComboBox = NULL;
CEdit *pEdit = NULL;
if (m_ctrlInputText->IsKindOf(RUNTIME_CLASS(CComboBox))) {
pComboBox = (CComboBox*)m_ctrlInputText;
int index = pComboBox->FindStringExact(0, m_strInputText);
if (index < 0)
pComboBox->InsertString(0, m_strInputText);
pComboBox->SelectString(0, m_strInputText);
pComboBox->SetEditSel(i, i);
}// 以上四行目的为了防止COMBOBOX在已有列表选择一个最匹配的,所加m_strInputText只是临时的。
if (m_ctrlInputText->IsKindOf(RUNTIME_CLASS(CEdit))) {
pEdit = (CEdit*)m_ctrlInputText;
pEdit->SetSel(i, i);
}
UpdateData(FALSE);
if (pEdit)
pEdit->SetSel(i, i);
else
pComboBox->SetEditSel(i, i);
}
pickents.Redraw(4);
CompleteEditorCommand();
return TRUE;
}
// Modify by lcf On 2005-07-05
BOOL CCharToolbarDlg::GetPosition(int& h, int& l)
{
DWORD n;
CComboBox *pComboBox = NULL;
CEdit *pEdit = NULL;
CWnd *pWnd1 = this->GetFocus();
if (m_ctrlInputText->IsKindOf(RUNTIME_CLASS(CComboBox))) {
pComboBox = (CComboBox*)m_ctrlInputText;
if (pComboBox->m_hWnd != pWnd1->GetParent()->m_hWnd)
{
int nSel = pComboBox->GetWindowTextLength();
pComboBox->SetEditSel(nSel, nSel);
}
n = pComboBox->GetEditSel();
}
else if (m_ctrlInputText->IsKindOf(RUNTIME_CLASS(CEdit))) {
pEdit = (CEdit*)m_ctrlInputText;
if (pEdit->m_hWnd != pWnd1->m_hWnd)
{
int nBegin = pEdit->LineIndex(pEdit->GetLineCount() - 1);
int nEnd = nBegin + pEdit->LineLength(nBegin);
pEdit->SetSel(nEnd, nEnd);
}
n = pEdit->GetSel();
}
else
return FALSE;
l = (int)LOWORD(n);
h = (int)HIWORD(n);
#if (ARX>15)
if (!GlobalFunc::FindRT_MANIFEST())
return TRUE;
OSVERSIONINFO osVer;
osVer.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
VERIFY(GetVersionEx(&osVer) == TRUE);
if (osVer.dwPlatformId == VER_PLATFORM_WIN32_NT && osVer.dwMajorVersion >= 5 && osVer.dwMinorVersion >= 1) {
CString csText;
m_ctrlInputText->GetWindowText(csText);
XString xsText;
xsText = csText;
// Zyu modify on 100726,去掉编译警告
//int nCount=_tcslen(xsText);
int nCount = (int)_tcslen(xsText);
int iLow = l, iUp = h;
for (int idx = 0; idx < nCount; idx++) {
if (idx >= iUp)
break;
TCHAR c = xsText[idx];
if (c < 0) { //汉字
if (idx < iLow)
iLow++;
if (idx < iUp)
iUp++;
idx++;
}
}
l = iLow;
h = iUp;
}
#endif
return TRUE;
}
#pragma endregion
#pragma region CDrawingNameDlg
int CDrawingNameDlg::m_nStyle = 1;
// sg modify 120706,9.0起不再使用当前样式,而是使用记忆上一次的样式
//CString CDrawingNameDlg::m_strFontStyle1=_T("STANDARD");
//CString CDrawingNameDlg::m_strFontStyle2=_T("STANDARD");
CString CDrawingNameDlg::m_strFontStyle1 = GetTextStyleName(TS_DRAWINGNAME);
CString CDrawingNameDlg::m_strFontStyle2 = GetTextStyleName(TS_DRAWINGNAME);
CString CDrawingNameDlg::m_strHeight2 = _T("5.0");
CString CDrawingNameDlg::m_strHeight1 = _T("7.0");
CString CDrawingNameDlg::m_csScaleText = _T("");
BOOL CDrawingNameDlg::m_bNoScale = FALSE;
BOOL CDrawingNameDlg::m_bContinue = TRUE;
IMPLEMENT_DYNAMIC(CDrawingNameDlg, CCharToolbarDlg)
CDrawingNameDlg::CDrawingNameDlg(BOOL bEdit, CWnd* pParent /*=NULL*/)
: CCharToolbarDlg(bEdit ? CDrawingNameDlg::IDD1 : CDrawingNameDlg::IDD, pParent)
//, mPreviewDb(true, true)
//, bPreviewReady(false)
{
m_bChangeCurTextStyle = false;
TCHAR sStyle[256] = _T("");
// sg delete 120706,9.0起不再使用当前样式,而是使用记忆上一次的样式
//xg_getvar(_T("TEXTSTYLE"), sStyle);
//m_strFontStyle1 = sStyle;
//m_strFontStyle2 = sStyle;
if (m_csScaleText == _T(""))
{
double bScale = GlobalFunc::DocGetPScale();
if (fabs(bScale - 1.0) < 1e-6)
m_csScaleText.Format(_T("1:%.0f"), 1000 * bScale);
else
m_csScaleText.Format(_T("1:%.0f"), bScale);
}
//AcDbRegAppTable *pTab = NULL;
//VERIFY(mPreviewDb.getSymbolTable(pTab, AcDb::kForWrite) == Acad::eOk);
//if (!pTab->has(TCHXD)) {
// AcDbRegAppTableRecord *pRec = new AcDbRegAppTableRecord();
// pRec->setName(TCHXD);
// pTab->add(pRec);
// pRec->close();
//}
//pTab->close();
// Add By Lcf On 2005-6-06-30
m_bPost = FALSE;
m_nOperCode = -1;
m_nHeightType = 1;
}
/*void CDrawingNameDlg::UpdatePreview()
{
if (m_bModeless)//add by whl on 060213
return;
mPreviewCtrl.clearAll();
mPreviewCtrl.init(true);
{
AcDbBlockTable *pBlockTab = NULL;
if (mPreviewDb.getSymbolTable(pBlockTab, AcDb::kForWrite) != Acad::eOk)
return;
AcDbBlockTableRecord*pMspace = new AcDbBlockTableRecord;
pMspace->setName(_T("*U"));
AcDbObjectId blockId;
pBlockTab->add(blockId, pMspace);
pBlockTab->close();
AcGePoint3d target;
double length, width;
Draw(pMspace, target, length, width);
AcGePoint3d position(target.x, target.y, 1);
mPreviewCtrl.view()->setView(position, target, AcGeVector3d(0.0, 1.0, 0.0), length, width);
mPreviewCtrl.view()->add(pMspace, mPreviewCtrl.model());
pMspace->close();
}
mPreviewCtrl.Invalidate();}
BOOL CDrawingNameDlg::DestroyWindow()
{
//mPreviewCtrl.clearAll();
return CCharToolbarDlg::DestroyWindow();
}
void CDrawingNameDlg::Draw(AcDbBlockTableRecord*pSpace, AcGePoint3d&center, double&length, double &width)
{
AecXDbDrawingName *pDrawingName = new AecXDbDrawingName;
Dlg2Obj(pDrawingName);
pDrawingName->SetRotation(0.0);
pDrawingName->setLayer(pDrawingName->GetDefaultLayer());
// pDrawingName->SetLocation(AcGePoint3d(0, 0, 0));
pDrawingName->SetMidLocation(AcGePoint3d(0, 0, 0));
pDrawingName->SetPScale(1);
//modify by xlc on 091019 解决2010平台编辑时对象不显示的问题
#if ARX<18
pSpace->appendAcDbEntity(pDrawingName);
XPoint ptMin, ptMax;
pDrawingName->GetExtents2d(ptMin, ptMax);
pDrawingName->close();
#else
XPoint ptMin, ptMax;
pDrawingName->GetExtents2d(ptMin, ptMax);
AcDbEntity *pClone = (AcDbEntity*)pDrawingName->clone();
delete pDrawingName;
pClone->setDatabaseDefaults(&mPreviewDb);
pSpace->appendAcDbEntity(pClone);
pClone->recordGraphicsModified();
pClone->close();
#endif
center.x = (ptMin.x + ptMax.x) / 2;
center.y = (ptMin.y + ptMax.y) / 2;
length = (ptMax.x - ptMin.x) * 1.2;
width = (ptMax.y - ptMin.y) * 1.2;
if (length > 2.5 * width)
width = length / 2.5;
else
length = width * 2.5;
}*/
void CDrawingNameDlg::DoDataExchange(CDataExchange* pDX)
{
CCharToolbarDlg::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDrawingNameDlg)
DDX_Control(pDX, IDC_COMBO_FONGSTYLE1, m_comboStyleName1);
DDX_Control(pDX, IDC_COMBO_FONGSTYLE2, m_comboStyleName2);
if (pDX->m_bSaveAndValidate)
{
DDX_CBString(pDX, IDC_NAME_LIST, m_strInputText);
DDX_CBString(pDX, IDC_SCALE_LIST, m_csScaleText);
DDX_CBString(pDX, IDC_COMBO_FONGSTYLE1, m_strFontStyle1);
DDX_CBString(pDX, IDC_COMBO_FONGSTYLE2, m_strFontStyle2);
}
else
{
GetDlgItem(IDC_NAME_LIST)->SetWindowText(m_strInputText);
GetDlgItem(IDC_SCALE_LIST)->SetWindowText(m_csScaleText);
//m_comboStyleName1.SetCurSel(m_comboStyleName1.FindStringExact(0, m_strFontStyle1));
//m_comboStyleName2.SetCurSel(m_comboStyleName2.FindStringExact(0, m_strFontStyle2));
}
DDX_CBString(pDX, IDC_COMBO_HEIGHT1, m_strHeight1);
DDX_CBString(pDX, IDC_COMBO_HEIGHT2, m_strHeight2);
if (pDX->m_bSaveAndValidate && _tstof(m_strHeight1) < 1.0E-3)
pDX->Fail();
if (pDX->m_bSaveAndValidate && _tstof(m_strHeight2) < 1.0E-3)
pDX->Fail();
DDX_Check(pDX, IDC_NO_SCALE, m_bNoScale);
DDX_Radio(pDX, IDC_STYLE1, m_nStyle);
DDX_Control(pDX, IDC_NAME_LIST, m_comboName);
DDX_Control(pDX, IDC_SCALE_LIST, m_comboScale);
DDX_Check(pDX, IDC_CONTINUE, m_bContinue);
//}}AFX_DATA_MAP
//if (bPreviewReady)
// UpdatePreview();
}
BEGIN_MESSAGE_MAP(CDrawingNameDlg, CCharToolbarDlg)
//{{AFX_MSG_MAP(CDrawingNameDlg)
ON_BN_CLICKED(IDC_STYLE1, OnBnClickedUpdate)
ON_BN_CLICKED(IDC_STYLE2, OnBnClickedUpdate)
ON_CBN_SELCHANGE(IDC_COMBO_FONGSTYLE1, OnBnClickedUpdate)
ON_CBN_SELCHANGE(IDC_COMBO_FONGSTYLE2, OnBnClickedUpdate)
ON_BN_CLICKED(IDC_NO_SCALE, OnBnClickedNoScale)
ON_CBN_SELCHANGE(IDC_COMBO_HEIGHT1, OnCbnSelchangeComboHeight1)
ON_CBN_SELCHANGE(IDC_COMBO_HEIGHT2, OnCbnSelchangeComboHeight2)
ON_BN_CLICKED(IDC_BUTTON_TEXT_HEIGHT1, OnButtonTextHeight1)
ON_BN_CLICKED(IDC_BUTTON_TEXT_HEIGHT2, OnButtonTextHeight2)
ON_CBN_SELCHANGE(IDC_NAME_LIST, OnCbnSelchangeNameList)
ON_CBN_SELCHANGE(IDC_SCALE_LIST, OnCbnSelchangeScaleList)
ON_WM_ACTIVATE()
ON_WM_CLOSE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDrawingNameDlg message handlers
const TCHAR *
CDrawingNameDlg::GetHistoryFileName()
{
return _T("drawingname.his");
}
void CDrawingNameDlg::LoadHisText()
{
TCHAR strTmpPath[100] = _T("");
GetTempPath(100, strTmpPath);
_tcscat(strTmpPath, GetHistoryFileName());
std:: ifstream in(strTmpPath);
while (!(!in)) {
char line[256];
in.getline(line, 255);
if (!in) break;
m_lstHistory.Append(tstrnew(TString(line)));
}
for (int m = 0; m < m_lstHistory.Length(); m++)
m_comboName.AddString(m_lstHistory[m]);
UpdateData(false);
}
void CDrawingNameDlg::LoadTextStyle()
{
XSymbolList lstStyle(_T("STYLE"));
for (int m = 0; m < lstStyle.Length(); m++)
{
m_comboStyleName1.AddString(lstStyle[m]);
m_comboStyleName2.AddString(lstStyle[m]);
}
}
BOOL CDrawingNameDlg::OnInitDialog()
{
CCharToolbarDlg::OnInitDialog();
//if (!mPreviewCtrl.SubclassDlgItem(IDC_PREVIEW, this))
// return FALSE;
LoadTextStyle();
LoadHisText();
// sg modify 120706,增加一个判断,如果当前记忆的样式没有的话,那么使用天正固定的文字样式
int nRet = m_comboStyleName1.FindStringExact(0, m_strFontStyle1);
if (nRet < 0)
{
nRet = m_comboStyleName1.FindStringExact(0, _T("STANDARD"));
}
m_comboStyleName1.SetCurSel(nRet);
nRet = m_comboStyleName2.FindStringExact(0, m_strFontStyle2);
if (nRet < 0)
{
nRet = m_comboStyleName2.FindStringExact(0, _T("STANDARD"));
}
m_comboStyleName2.SetCurSel(nRet);
//bPreviewReady = true;
m_ctrlInputText = GetDlgItem(IDC_NAME_LIST);
GetDlgItem(IDC_SCALE_LIST)->SetWindowText(m_csScaleText);
if (m_bModeless)
{
if (m_comboName.GetCount() == 0)
m_strInputText = _T("上华图名标注输入");
if (m_lstHistory.Length() > 0)
m_strInputText = m_lstHistory[0];
}
UpdateData(FALSE);
m_comboName.SetFocus();
GetDlgItem(IDC_SCALE_LIST)->EnableWindow(!m_bNoScale);
GetDlgItem(IDC_BUTTON_TEXT_HEIGHT2)->EnableWindow(!m_bNoScale);
GetDlgItem(IDC_COMBO_FONGSTYLE2)->EnableWindow(!m_bNoScale);
GetDlgItem(IDC_COMBO_HEIGHT2)->EnableWindow(!m_bNoScale);
// Add By Lcf On 2005-6-06-30
if (m_bModeless)
{
GetDlgItem(IDOK)->ShowWindow(SW_HIDE);
GetDlgItem(IDCANCEL)->ShowWindow(SW_HIDE);
}
else
GetDlgItem(IDC_CONTINUE)->ShowWindow(SW_HIDE);
return TRUE;
}
void CDrawingNameDlg::OnBnClickedUpdate()
{
UpdateData();
}
void CDrawingNameDlg::OnButtonTextHeight2()
{
m_nHeightType = 2;
if (m_bModeless && m_bPost)
{
m_nOperCode = 0;
GlobalFunc::PostCommand(_T("` "), false);
}
else
{
GetTextHeight();
acedGetAcadDwgView()->SetFocus();
}
}
void CDrawingNameDlg::OnButtonTextHeight1()
{
m_nHeightType = 1;
if (m_bModeless && m_bPost)
{
m_nOperCode = 0;
GlobalFunc::PostCommand(_T("` "), false);
}
else
{
GetTextHeight();
acedGetAcadDwgView()->SetFocus();
}
}
void CDrawingNameDlg::OnCbnSelchangeComboHeight1()
{
CComboBox*pBox = ((CComboBox*)GetDlgItem(IDC_COMBO_HEIGHT1));
if (pBox->GetCurSel() >= 0)
pBox->GetLBText(pBox->GetCurSel(), m_strHeight1);
pBox->SetWindowText(m_strHeight1);
UpdateData();
}
void CDrawingNameDlg::OnCbnSelchangeComboHeight2()
{
CComboBox*pBox = ((CComboBox*)GetDlgItem(IDC_COMBO_HEIGHT2));
if (pBox->GetCurSel() >= 0)
pBox->GetLBText(pBox->GetCurSel(), m_strHeight2);
pBox->SetWindowText(m_strHeight2);
UpdateData();
}
void CDrawingNameDlg::OnBnClickedNoScale()
{
UpdateData();
GetDlgItem(IDC_SCALE_LIST)->EnableWindow(!m_bNoScale);
GetDlgItem(IDC_BUTTON_TEXT_HEIGHT2)->EnableWindow(!m_bNoScale);
GetDlgItem(IDC_COMBO_FONGSTYLE2)->EnableWindow(!m_bNoScale);
GetDlgItem(IDC_COMBO_HEIGHT2)->EnableWindow(!m_bNoScale);
}
void CDrawingNameDlg::OnCbnSelchangeScaleList()
{
if (m_comboScale.GetCurSel() >= 0)
m_comboScale.GetLBText(m_comboScale.GetCurSel(), m_csScaleText);
m_comboScale.SetWindowText(m_csScaleText);
UpdateData();
}
void CDrawingNameDlg::OnCbnSelchangeNameList()
{
CComboBox*pBox = ((CComboBox*)GetDlgItem(IDC_NAME_LIST));
if (pBox->GetCurSel() >= 0)
pBox->GetLBText(pBox->GetCurSel(), m_strInputText);
pBox->SetWindowText(m_strInputText);
UpdateData();
}
void CDrawingNameDlg::OnOK()
{
AddToRecent();
CCharToolbarDlg::OnOK();
if (m_bModeless && m_bChangeCurTextStyle) // ZJQ modify on 2004/3/5
xg_setvar(_T("TEXTSTYLE"), m_strFontStyle1);
}
void CDrawingNameDlg::AddToRecent()
{
{
UpdateData(TRUE);
int len = m_lstHistory.Length();
TCHAR strTmpPath[256] = _T("");
GetTempPath(255, strTmpPath);
_tcscat(strTmpPath, GetHistoryFileName());
#if (ARX>15)
std::
#endif
ofstream out(strTmpPath);
if (m_strInputText != _T("")) {
out << (const char *)_AS(m_strInputText) << "\n";
int index = m_lstHistory.Index(m_strInputText);
if (index >= 0) {
m_lstHistory.Remove(index);
len--;
}
if (len > maxHisList - 1) len = maxHisList - 1;
}
for (int i = 0; i < len; i++)
out << _AS(m_lstHistory[i]) << "\n";
}
m_lstHistory.Reset();
m_comboName.ResetContent();
LoadHisText();
}
// Add by lcf 2004/12/01
void CDrawingNameDlg::Dlg2Obj(AecXDbDrawingName* pDrawingName)
{
AcDbObjectId idTextStyle1 = GlobalFunc::GetTextStyleId(m_strFontStyle1);
if (!idTextStyle1)
return;
pDrawingName->SetNameText(m_strInputText);
pDrawingName->SetNameStyleId(idTextStyle1);
pDrawingName->SetNameHeight(_tstof(m_strHeight1));
AcDbObjectId idTextStyle2 = GlobalFunc::GetTextStyleId(m_strFontStyle2);
if (!idTextStyle2)
return;
pDrawingName->SetScaleText(m_csScaleText);
pDrawingName->SetScaleStyleId(idTextStyle2);
pDrawingName->SetScaleHeight(_tstof(m_strHeight2));
pDrawingName->SetShowScale(!m_bNoScale);
pDrawingName->SetDrawStyle(m_nStyle);
}
void CDrawingNameDlg::Obj2Dlg(AecXDbDrawingName* pDrawingName)
{
if (pDrawingName == NULL)
return;
m_strInputText = pDrawingName->GetNameText();
m_csScaleText = pDrawingName->GetScaleText();
m_strFontStyle1 = GlobalFunc::GetSymbolName(pDrawingName->GetNameStyleId());
m_strFontStyle2 = GlobalFunc::GetSymbolName(pDrawingName->GetScaleStyleId());
m_strHeight1.Format(_T("%.1f"), pDrawingName->GetNameHeight());
m_strHeight2.Format(_T("%.1f"), pDrawingName->GetScaleHeight());
m_bNoScale = !pDrawingName->GetShowScale();
m_nStyle = pDrawingName->GetDrawStyle();
}
// Add By Lcf On 2005-6-06-30
void CDrawingNameDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
{
CCharToolbarDlg::OnActivate(nState, pWndOther, bMinimized);
if (!m_bModeless)//add by whl on 060213
return;
if (nState == WA_CLICKACTIVE)
{
int nSel = m_comboName.GetWindowTextLength();
m_comboName.SetEditSel(nSel, nSel);
}
else if (nState == WA_INACTIVE)
{
UpdateData();
if (m_bModeless && m_bPost)
GlobalFunc::PostCommand(_T("` "), false);
}
}
// Add By Lcf On 2005-6-06-30
void CDrawingNameDlg::OnClose()
{
if (m_bModeless)
{
m_bPost = FALSE;
GlobalFunc::PostCommand(_T(" "), false);
}
CCharToolbarDlg::OnClose();
}
// Add By Lcf On 2005-6-06-30
void CDrawingNameDlg::GetTextHeight()
{
XPushAutoHide noAutoHide(this);
XPushMemVar<BOOL> vTemp(m_bPost, FALSE);
m_nOperCode = -1;
UpdateData(TRUE);
double nHeight;
if (m_nHeightType == 1)
nHeight = _tstof(m_strHeight1) * GlobalFunc::DocGetPScale();
else
nHeight = _tstof(m_strHeight2) * GlobalFunc::DocGetPScale();
BeginEditorCommand();
if (GlobalFunc::GetDist(_T("\n字高"), nHeight, RSG_NOZERO | RSG_NONEG) == RTNORM)
{
nHeight /= GlobalFunc::DocGetPScale();
if (m_nHeightType == 1)
m_strHeight1.Format(_T("%.1f"), nHeight);
else
m_strHeight2.Format(_T("%.1f"), nHeight);
}
CompleteEditorCommand();
UpdateData(FALSE);
}
#pragma endregion
#pragma region CDrawingIndexDlg
IMPLEMENT_DYNAMIC(CDrawingIndexDlg, CModelessDialog)
CString CDrawingIndexDlg::s_sIndexLabel = _T("1"); //索引编号
CString CDrawingIndexDlg::s_sDrawingLabel = _T("-"); //索引图号
//modify by lgy 20120110 文字样式应有程序自动获得
//CString CDrawingIndexDlg::s_sTextStyle = _T("_TCH_LABEL"); //文字样式
CString CDrawingIndexDlg::s_sTextStyle = GetTextStyleName(TS_LABEL);//文字样式
//modify by lgy 20120206 索引图名中比例应该设置成为1:的形式
//int CDrawingIndexDlg:: s_iScale = 20; //比例值
CString CDrawingIndexDlg::s_strScale = _T("1:20"); //比例值
int CDrawingIndexDlg::s_iCheck = 1;
//double CDrawingIndexDlg::s_dTextHight = 3.5; //字高
double CDrawingIndexDlg::s_dTextHight = GetTextHeightByTs(TS_INDEXSCALE);//字高
//add by lgy 20120110 新添加的文字样式
CString CDrawingIndexDlg::s_sWorldStyle = GetTextStyleName(TS_INDEXSCALE);
CDrawingIndexDlg::CDrawingIndexDlg(CWnd* pParent)
: CModelessDialog(CDrawingIndexDlg::IDD, pParent),
m_bScale(TRUE),
m_bClose(false),
m_bTextHeight(FALSE)
{
}
CDrawingIndexDlg::~CDrawingIndexDlg()
{
}
void CDrawingIndexDlg::DoDataExchange(CDataExchange* pDX)
{
DDX_Text(pDX, IDC_EDT_INDEX, s_sIndexLabel);
DDX_Text(pDX, IDC_EDT_LAYNUM, s_sDrawingLabel);
DDX_Text(pDX, IDC_CMB_FONTSTYLE, s_sTextStyle);
//modify by lgy 20120206 索引图名中比例应该设置成为1:的形式
//DDX_Text(pDX,IDC_CMB_SCALE,s_iScale);
DDX_Text(pDX, IDC_CMB_SCALE, s_strScale);
DDX_Text(pDX, IDC_CMB_FONTHIGHT, s_dTextHight);
DDX_Check(pDX, IDC_CHK_SCALE, s_iCheck);
//add by lgy 20120110 将原来的索引编号变量与组合框关联起来
DDX_Text(pDX, IDC_CMB_INDEX, s_sIndexLabel);
DDX_Text(pDX, IDC_CMB_WORLDSTYLE, s_sWorldStyle);
CModelessDialog::DoDataExchange(pDX);
// sg add 120706,增加与文字样式相关联的控制变量
DDX_Control(pDX, IDC_CMB_FONTSTYLE, m_cmbFontStyle);
DDX_Control(pDX, IDC_CMB_WORLDSTYLE, m_cmbWordStyle);
}
BEGIN_MESSAGE_MAP(CDrawingIndexDlg, CModelessDialog)
ON_BN_CLICKED(IDC_CHK_SCALE, OnBnClickedChkScale)
ON_BN_CLICKED(IDC_BTN_FONTHIGHT, OnBnClickedBtnFonthight)
ON_BN_CLICKED(IDOK, OnBnClickedOk)
ON_WM_ACTIVATE()
ON_WM_CLOSE()
END_MESSAGE_MAP()
BOOL CDrawingIndexDlg::OnInitDialog()
{
CModelessDialog::OnInitDialog();
//add by lgy 20120110 索引图名对话框中索引编号控件变为组合框
GetDlgItem(IDC_EDT_INDEX)->ShowWindow(SW_HIDE);
if (m_bModeless)
{
GetDlgItem(IDOK)->ShowWindow(SW_HIDE);
GetDlgItem(IDCANCEL)->ShowWindow(SW_HIDE);
}
LoadTextStyle();
// sg modify 120706,增加一个判断,如果当前记忆的样式没有的话,那么使用天正固定的文字样式
int nRet = m_cmbFontStyle.FindStringExact(0, s_sTextStyle);
if (nRet < 0) // 当前图纸没有此样式
{
nRet = m_cmbFontStyle.FindStringExact(0, _T("_TCH_LABEL"));
}
m_cmbFontStyle.SetCurSel(nRet);
nRet = m_cmbWordStyle.FindStringExact(0, s_sWorldStyle);
if (nRet < 0) // 当前图纸没有此样式
{
nRet = m_cmbWordStyle.FindStringExact(0, _T("_TCH_DIM"));
}
m_cmbWordStyle.SetCurSel(nRet);
//add by lgy 20120110 第二次显示对话框是不能记忆是否显示比例
OnBnClickedChkScale();
//add by lgy 20120110 根据是模式对话框还是非模式对话框调整对话框大小
AdjustDlgRect();
//模态对话框显示时,检查对象是否包含比例属性
if (!m_bScale)
{
GetDlgItem(IDC_CMB_SCALE)->EnableWindow(FALSE);
GetDlgItem(IDC_CMB_FONTHIGHT)->EnableWindow(FALSE);
GetDlgItem(IDC_BTN_FONTHIGHT)->EnableWindow(FALSE);
//add by lgy 20120110 文字样式静态文本和组合框需要灰显
GetDlgItem(IDC_STATIC_STYLE)->EnableWindow(FALSE);
GetDlgItem(IDC_CMB_WORLDSTYLE)->EnableWindow(FALSE);
}
UpdateData(FALSE);
return TRUE;
}
//把对象属性显示在对话框上
void CDrawingIndexDlg::Obj2Dlg(AecXDbSymbDrawingIndex *pEnt)
{
if (!pEnt)
{
return;
}
// 图号
s_sDrawingLabel = pEnt->GetDrawingLabel();
if (s_sDrawingLabel == _T(""))
{
s_sDrawingLabel = _T("-");
}
// 编号
s_sIndexLabel = pEnt->GetIndexLabel();
// 比例
CString sScaleText = (LPCTSTR)pEnt->GetScaleText();
// sg add 120612,只要是对象编辑对话框,无论是否显示比例,对话框上的值,应该从对象中读取,而不是使用最后一次对话框中记忆值
s_strScale = sScaleText;
m_bScale = pEnt->IsDrawScale();
//if (m_bScale)
//{
// CString csTmp = sScaleText;
// int nFind = csTmp.Find(_T("1:"), 0);
// if (nFind < 0)
// {
//注释 by lgy 20120206 索引图名中对象编辑时指出文字
//m_bScale = FALSE;
//}
//else
//{
//modify by lgy 20120206 索引图名中比例应该设置成为1:的形式
//int nNum = csTmp.GetLength() - (nFind + 2);
//csTmp = csTmp.Right(nNum);
//s_iScale = _ttoi(csTmp);
// s_strScale = csTmp;
// }
//}
// sg modify 120612,从对象中获取比例文字样式
s_sWorldStyle = GlobalFunc::GetSymbolName(pEnt->GetScaleStyleId());
//比例选框
if (m_bScale)
{
s_iCheck = 1;
}
else
{
s_iCheck = 0;
}
//文字样式
s_sTextStyle = GlobalFunc::GetSymbolName(pEnt->GetTextStyleId());
//字高
s_dTextHight = pEnt->GetScaleTextHeight();
}
//把对话框上的数据与对象属性关联
void CDrawingIndexDlg::Dlg2Obj(AecXDbSymbDrawingIndex* pEnt)
{
if (!pEnt)
{
return;
}
AcDbObjectId idTextStyle = InitTextStyle(s_sTextStyle);
//add by lgy 20120111 增加比例文字样式
AcDbObjectId idScaleStyle = InitTextStyle(s_sWorldStyle);
//修改属性
if ((s_sDrawingLabel == _T("-")))
{
s_sDrawingLabel = _T("");
}
pEnt->SetDrawingLabel(s_sDrawingLabel); //图号
pEnt->SetIndexLabel(s_sIndexLabel); //编号
pEnt->SetTextStyleId(idTextStyle); //文字样式
//modify by lgy 20120111 修改比例文字样式
//pEnt->SetScaleStyleId(idTextStyle);
pEnt->SetScaleStyleId(idScaleStyle);
pEnt->SetScaleTextHeight(s_dTextHight); //字高
pEnt->SetDrawScale(IsDrawScale()); //是否画比例
pEnt->SetScaleText(GetScaleText()); //比例内容
//add by lgy 20120110 将s_sDrawingLabel改变之后要记得还原
if ((s_sDrawingLabel == _T("")))
{
s_sDrawingLabel = _T("-");
}
}
//加载现有的字体样式
void CDrawingIndexDlg::LoadTextStyle()
{
XSymbolList lstStyle(_T("STYLE"));
for (int i = 0; i < lstStyle.Length(); i++)
{
m_cmbFontStyle.AddString(lstStyle[i]);
// add by lgy 20120110 增加索引图名比例的文字样式
m_cmbWordStyle.AddString(lstStyle[i]);
}
}
bool CDrawingIndexDlg::IsDrawScale()
{
bool bRe = (s_iCheck == BST_CHECKED);
return bRe;
}
void CDrawingIndexDlg::UpdateDataEx()
{
UpdateData();
}
CString CDrawingIndexDlg::GetDrawingLabel()
{
return s_sDrawingLabel;
}
CString CDrawingIndexDlg::GetIndexLabel()
{
return s_sIndexLabel;
}
CString CDrawingIndexDlg::GetTextStyle()
{
return s_sTextStyle;
}
CString CDrawingIndexDlg::GetScaleText()
{
//modify by lgy 20120206 比例已经改成cstring类型
// CString sScale;
// sScale.Format(_T("1:%d"), s_iScale);
// return sScale;
return s_strScale;
}
double CDrawingIndexDlg::GetTextHight()
{
return s_dTextHight;
}
void CDrawingIndexDlg::OnBnClickedChkScale()
{
if ((((CButton*)GetDlgItem(IDC_CHK_SCALE))->GetCheck()) == BST_CHECKED)
{
GetDlgItem(IDC_CMB_SCALE)->EnableWindow(TRUE);
GetDlgItem(IDC_CMB_FONTHIGHT)->EnableWindow(TRUE);
GetDlgItem(IDC_BTN_FONTHIGHT)->EnableWindow(TRUE);
//add by lgy 20120110 新增文字样式受单选框控制
GetDlgItem(IDC_STATIC_STYLE)->EnableWindow(TRUE);
GetDlgItem(IDC_CMB_WORLDSTYLE)->EnableWindow(TRUE);
}
else
{
GetDlgItem(IDC_CMB_SCALE)->EnableWindow(FALSE);
GetDlgItem(IDC_CMB_FONTHIGHT)->EnableWindow(FALSE);
GetDlgItem(IDC_BTN_FONTHIGHT)->EnableWindow(FALSE);
//add by lgy 20120110 新增文字样式受单选框控制
GetDlgItem(IDC_STATIC_STYLE)->EnableWindow(FALSE);
GetDlgItem(IDC_CMB_WORLDSTYLE)->EnableWindow(FALSE);
}
UpdateDataEx();
}
void CDrawingIndexDlg::OnBnClickedBtnFonthight()
{
if (m_bModeless)
{
m_bTextHeight = TRUE;
GlobalFunc::PostCommand(_T("` "), false);
}
else
{
TextHight();
acedGetAcadDwgView()->SetFocus();
}
}
void CDrawingIndexDlg::TextHight()
{
XPushAutoHide noAutoHide(this);
double dHeight = s_dTextHight * GlobalFunc::DocGetPScale();
BeginEditorCommand();
if (GlobalFunc::GetDist(_T("\n字高"), dHeight, RSG_NOZERO | RSG_NONEG) == RTNORM)
{
dHeight /= GlobalFunc::DocGetPScale();
CString str;
str.Format(_T("%.1f"), dHeight);
s_dTextHight = _tstof(str);
}
CompleteEditorCommand();
m_bTextHeight = FALSE;
UpdateData(FALSE);
}
void CDrawingIndexDlg::OnBnClickedOk()
{
UpdateDataEx();
OnOK();
}
void CDrawingIndexDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
{
CModelessDialog::OnActivate(nState, pWndOther, bMinimized);
if (!m_bModeless)
{
return;
}
if (nState == WA_CLICKACTIVE)
{
}
else if (nState == WA_INACTIVE)
{
UpdateDataEx();
if (!m_bClose && !m_bTextHeight)
{
GlobalFunc::PostCommand(_T("` "), false);
}
}
}
void CDrawingIndexDlg::OnClose()
{
if (m_bModeless)
{
m_bClose = true;
GlobalFunc::PostCommand(_T(" "), false);
}
CModelessDialog::OnClose();
}
BOOL CDrawingIndexDlg::IsOpTextHeight()
{
return m_bTextHeight;
}
//add by lgy 20120110 根据是模式对话框还是非模式对话框调整对话框大小
void CDrawingIndexDlg::AdjustDlgRect()
{
if (!m_bModeless)
{
return;
}
CRect rcExpansion;
GetWindowRect(&rcExpansion);
CWnd *pWnd = GetDlgItem(IDOK);
if (pWnd)
{
CRect rect;
pWnd->GetWindowRect(&rect);
rcExpansion.bottom -= rect.Height() * 1.3;
MoveWindow(rcExpansion);
}
}
//add by lgy 20120111 返回比例文字样式
CString CDrawingIndexDlg::GetScaleStyle()
{
//if (BST_CHECKED == s_iCheck)
//{
// return s_sWorldStyle;
//}
//else
//{
// return _T("");
//}
// sg modify 120612,文字样式不允许是空的
return s_sWorldStyle;
}
#pragma endregion
#pragma region CIndexDimDlg
CString CIndexDimDlg::m_strInputUp = _T("");
CString CIndexDimDlg::m_strInputDown = _T("");
CString CIndexDimDlg::m_strDrawing = _T("-");
CString CIndexDimDlg::m_strIndex = _T("1");
int CIndexDimDlg::m_iIndexType = 0;
// add by cwk on 060706
extern CString g_sIndexDimFixAngle = _T("90");// [11/12/2007 nsh]
extern BOOL g_bIndexDimFixAngle = FALSE;
BOOL CIndexDimDlg::m_bContinue = TRUE; // Add by lcf on 2005-06-29
BOOL CIndexDimDlg::m_bAddIndex = TRUE; // sg add 090122
int CIndexDimDlg::m_nTextAlign = 2; // sg add 090402
BOOL CIndexDimDlg::m_bDimOnExtent = FALSE; // lgh add 101216, 是否在延长线上标注文字
BOOL CIndexDimDlg::m_bMoreCut = FALSE; // lgh add 101216,是否绘制多段剖切线
BOOL CIndexDimDlg::m_bAddTurn = FALSE; // lgh add 101216, 是否添加一个转折点
// modify by lgy 20120111 标注文字样式要从文字管理中初始化
// CString CIndexDimDlg::m_strDimStyle = _T(""); // lgh add 101216, 标注文字样式。
CString CIndexDimDlg::m_strDimStyle = GetTextStyleName(TS_LABEL);// lgh add 101216, 圆圈文字样式。
IMPLEMENT_DYNAMIC(CIndexDimDlg, CBaseTextDlg)
CIndexDimDlg::CIndexDimDlg(BOOL bEdit, CWnd* pParent /*=NULL*/)
: CBaseTextDlg(CIndexDimDlg::IDD, pParent), m_bEditObj(bEdit)
{
//{{AFX_DATA_INIT(CIndexDimDlg)
// add by cwk on 060706
m_sFixAngle = g_sIndexDimFixAngle;
m_bFixAngle = g_bIndexDimFixAngle;
//}}AFX_DATA_INIT
}
CIndexDimDlg::CIndexDimDlg(BOOL bEdit, UINT Id, CWnd* pParent)
: CBaseTextDlg(Id, pParent), m_bEditObj(bEdit)
{
//{{AFX_DATA_INIT(CIndexDimDlg)
// add by cwk on 060706
m_sFixAngle = g_sIndexDimFixAngle;
m_bFixAngle = g_bIndexDimFixAngle;
//}}AFX_DATA_INIT
}
void CIndexDimDlg::DoDataExchange(CDataExchange* pDX)
{
CBaseTextDlg::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CIndexDimDlg)
// sg modify 090507,仿照图名标注,试着解决“对象编辑中,有时候文字显示有问题”的BUG
if (pDX->m_bSaveAndValidate)
{
DDX_CBString(pDX, IDC_COMBO_INPUTTEXT, m_strInputUp);
DDX_CBString(pDX, IDC_COMBO_INPUTTEXT1, m_strInputDown);
DDX_CBString(pDX, IDC_CMB_DIMTEXT_STYLE, m_strDimStyle); // add by lgh 101216
}
else
{
GetDlgItem(IDC_COMBO_INPUTTEXT)->SetWindowText(m_strInputUp);
GetDlgItem(IDC_COMBO_INPUTTEXT1)->SetWindowText(m_strInputDown);
GetDlgItem(IDC_CMB_DIMTEXT_STYLE)->SetWindowText(m_strDimStyle); // add by lgh 101216
}
DDX_Control(pDX, IDC_COMBO_INPUTTEXT, m_comboInputText);
DDX_Control(pDX, IDC_COMBO_INPUTTEXT1, m_comboInputText1);
// modify by cwk on 060706
if (!m_bEditObj)
{
// [11/12/2007 nsh]
/*DDX_Text(pDX, IDC_EDIT_ANGLE, m_sFixAngle);*/
DDX_Text(pDX, IDC_COMBO1, m_sFixAngle); // 对固定角度的combox映射
}
DDX_Text(pDX, IDC_DRAWING_LABEL, m_strDrawing);
DDX_CBString(pDX, IDC_INDEX_LABEL, m_strIndex);
//Modify by cwk on 060706
DDX_Check(pDX, IDC_CONTINUE, m_bContinue);
DDX_Radio(pDX, IDC_INDEX_RADIO, m_iIndexType);
if (!m_bEditObj)
DDX_Check(pDX, IDC_CHECK1, m_bFixAngle);
// sg add 090122
DDX_Check(pDX, IDC_ADD_INDEX, m_bAddIndex);
DDX_CBIndex(pDX, IDC_COMBO_TEXTALIGN, m_nTextAlign); // sg add 090402
// lgh add 101216
DDX_Check(pDX, IDC_CHK_EXTTEXT, m_bDimOnExtent);
DDX_Check(pDX, IDC_CHK_MORE_CUT, m_bMoreCut);
DDX_Check(pDX, IDC_CHK_ADD_TURN, m_bAddTurn);
DDX_Control(pDX, IDC_CMB_DIMTEXT_STYLE, m_cmbDimStyle);
//}}AFX_DATA_MAP
}
// [11/12/2007 nsh]-------------------
void CIndexDimDlg::ShowFixAngle()
{
this->UpdateData(TRUE);
if (m_iIndexType == 0)
{
this->GetDlgItem(IDC_COMBO1)->ShowWindow(SW_SHOW); // 固定角度
this->GetDlgItem(IDC_CHECK1)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_ADD_INDEX)->ShowWindow(SW_SHOW); // sg add 090122,索引范围
GetDlgItem(IDC_CHK_ADD_TURN)->ShowWindow(SW_HIDE); // lgh add 101216
GetDlgItem(IDC_CHK_MORE_CUT)->ShowWindow(SW_HIDE); // lgh ...
}
else if (m_iIndexType == 1)
{
this->GetDlgItem(IDC_COMBO1)->ShowWindow(SW_HIDE);
this->GetDlgItem(IDC_CHECK1)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_ADD_INDEX)->ShowWindow(SW_HIDE); // sg add 090122
GetDlgItem(IDC_CHK_ADD_TURN)->ShowWindow(SW_SHOW); // lgh add 101216
GetDlgItem(IDC_CHK_MORE_CUT)->ShowWindow(SW_SHOW); // lgh ...
}
this->UpdateData(FALSE);
}//---------------------------------------
BEGIN_MESSAGE_MAP(CIndexDimDlg, CBaseTextDlg)
//{{AFX_MSG_MAP(CIndexDimDlg)
ON_BN_CLICKED(IDC_CHECK1, OnCheckAngle)
// [11/12/2007 nsh]
ON_BN_CLICKED(IDC_SECT_RADIO, ShowFixAngle)
ON_BN_CLICKED(IDC_INDEX_RADIO, ShowFixAngle)
//-----------------------
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CIndexDimDlg message handlers
BOOL CIndexDimDlg::OnInitDialog()
{
CBaseTextDlg::OnInitDialog();
// [11/12/2007 nsh]
if (m_bFixAngle)
{
this->GetDlgItem(IDC_COMBO1)->EnableWindow(m_bFixAngle);
this->UpdateData(FALSE);
}
else
{
this->GetDlgItem(IDC_COMBO1)->EnableWindow(m_bFixAngle);
this->UpdateData(FALSE);
}
if (m_iIndexType == 0)
{
if (!m_bModeless)
{
this->GetDlgItem(IDC_COMBO1)->ShowWindow(SW_HIDE);
this->GetDlgItem(IDC_CHECK1)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_ADD_INDEX)->ShowWindow(SW_HIDE);
}
else
{
this->GetDlgItem(IDC_COMBO1)->ShowWindow(SW_SHOW);
this->GetDlgItem(IDC_CHECK1)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_ADD_INDEX)->ShowWindow(SW_SHOW);
}
GetDlgItem(IDC_CHK_ADD_TURN)->ShowWindow(SW_HIDE); // lgh add 101216
GetDlgItem(IDC_CHK_MORE_CUT)->ShowWindow(SW_HIDE); // lgh ...
}
else if (m_iIndexType == 1)
{
this->GetDlgItem(IDC_COMBO1)->ShowWindow(SW_HIDE);
this->GetDlgItem(IDC_CHECK1)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_ADD_INDEX)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_CHK_ADD_TURN)->ShowWindow(SW_SHOW); // lgh add 101216
GetDlgItem(IDC_CHK_MORE_CUT)->ShowWindow(SW_SHOW); // lgh ...
}
//////////////////////////////////////////////////
LoadHisText();
LoadDimTextStyle(); // lgh add 101216,初始化标注文字样式。
// sg modify 120706,增加一个判断,如果当前记忆的样式没有的话,那么使用天正固定的文字样式
//m_cmbDimStyle.SetCurSel(m_cmbDimStyle.FindString(0, m_strDimStyle));
int nRet = m_cmbDimStyle.FindStringExact(0, m_strDimStyle);
if (nRet < 0) // 当前图纸没有此样式
{
nRet = m_cmbDimStyle.FindStringExact(0, _T("_TCH_LABEL"));
}
m_cmbDimStyle.SetCurSel(nRet);
m_comboInputText.SetFocus();
UpdateVisible(!m_bEditObj);
return FALSE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
// Modify by lcf On 2005-07-05
CWnd* CIndexDimDlg::GetCurWnd()
{
UpdateData(TRUE);
CWnd *pWnd = this->GetFocus();
CWnd *pWnd2 = NULL;
if (m_comboInputText.m_hWnd == pWnd->GetParent()->m_hWnd) {
pWnd2 = GetDlgItem(IDC_COMBO_INPUTTEXT); // 把CWnd 回传给基类
m_strInputText = m_strInputUp;
}
else if (m_comboInputText1.m_hWnd == pWnd->GetParent()->m_hWnd) {
pWnd2 = GetDlgItem(IDC_COMBO_INPUTTEXT1); // 把CWnd 回传给基类
m_strInputText = m_strInputDown;
}
else
{
int nSel = m_comboInputText.GetWindowTextLength();
m_comboInputText.SetEditSel(nSel, nSel);
pWnd2 = GetDlgItem(IDC_COMBO_INPUTTEXT);
}
return(pWnd2);
}
void CIndexDimDlg::UpdateInputText()
{
CWnd *pWnd = this->GetFocus();
if (m_comboInputText.m_hWnd == pWnd->GetParent()->m_hWnd) {
m_strInputUp = m_strInputText;
}
if (m_comboInputText1.m_hWnd == pWnd->GetParent()->m_hWnd) {
m_strInputDown = m_strInputText;
}
UpdateData(FALSE);
}
void CIndexDimDlg::LoadDimTextStyle()
{
XSymbolList lstStyle(_T("STYLE"));
for (int m = 0; m < lstStyle.Length(); m++)
m_cmbDimStyle.AddString(lstStyle[m]);
}
void CIndexDimDlg::OnOK()
{
AddToRecent();
CBaseTextDlg::OnOK();
}
// Add by lcf on 20050708
void CIndexDimDlg::AddToRecent()
{
UpdateData(TRUE);
{
int len = m_lstHistory.Length();
TCHAR strTmpPath[256] = _T("");
GetTempPath(255, strTmpPath);
_tcscat(strTmpPath, _T("index.his"));
std:: ofstream out(strTmpPath);
if (m_strInputUp != _T("")) {
out << (const char *)_AS(m_strInputUp) << "\n";
int index = m_lstHistory.Index(m_strInputUp);
if (index >= 0) {
m_lstHistory.Remove(index);
len--;
}
if (len > maxHisList - 1) len = maxHisList - 1;
}
for (int i = 0; i < len; i++)
out << _AS(m_lstHistory[i]) << "\n";
}
{
int len1 = m_lstHistory1.Length();
TCHAR strTmpPath1[256] = _T("");
GetTempPath(255, strTmpPath1);
_tcscat(strTmpPath1, _T("index1.his"));
std:: ofstream out1(strTmpPath1);
if (m_strInputDown != _T("")) {
out1 << (const char *)_AS(m_strInputDown) << "\n";
int index = m_lstHistory1.Index(m_strInputDown);
if (index >= 0) {
m_lstHistory1.Remove(index);
len1--;
}
if (len1 > maxHisList - 1) len1 = maxHisList - 1;
}
for (int i = 0; i < len1; i++)
out1 << _AS(m_lstHistory1[i]) << "\n";
}
m_lstHistory.Reset();
m_lstHistory1.Reset();
m_comboInputText.ResetContent();
m_comboInputText1.ResetContent();
LoadHisText();
}
void CIndexDimDlg::LoadHisText()
{
{
TCHAR strTmpPath[256] = _T("");
GetTempPath(255, strTmpPath);
_tcscat(strTmpPath, _T("index.his"));
#if (ARX>15)
std::
#endif
ifstream in(strTmpPath);
while (!(!in)) {
char line[256];
in.getline(line, 255);
if (!in) break;
m_lstHistory.Append(tstrnew(TString(line)));
}
for (int m = 0; m < m_lstHistory.Length(); m++)
m_comboInputText.AddString(m_lstHistory[m]);
}
{
TCHAR strTmpPath[256] = _T("");
GetTempPath(255, strTmpPath);
_tcscat(strTmpPath, _T("index1.his"));
#if (ARX>15)
std::
#endif
ifstream in(strTmpPath);
while (!(!in)) {
char line[256];
in.getline(line, 255);
if (!in) break;
m_lstHistory1.Append(tstrnew(TString(line)));
}
for (int m = 0; m < m_lstHistory1.Length(); m++)
m_comboInputText1.AddString(m_lstHistory1[m]);
}
UpdateData(false);
}
// Add by lcf on 20050713,设置“指向索引”、“剖切索引”是否可见
void CIndexDimDlg::UpdateVisible(BOOL bVisible)
{
if (bVisible)
{
GetDlgItem(IDC_INDEX_RADIO)->ShowWindow(SW_SHOW); // 指向索引
GetDlgItem(IDC_SECT_RADIO)->ShowWindow(SW_SHOW); // 剖切索引
}
else
{
GetDlgItem(IDC_INDEX_RADIO)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_SECT_RADIO)->ShowWindow(SW_HIDE);
}
}
// sg add 090415,设置“添加索引范围”是否可见
void CIndexDimDlg::SetSourceExtentVisible(BOOL bVisible)
{
if (bVisible && m_iIndexType == 0)
GetDlgItem(IDC_ADD_INDEX)->ShowWindow(SW_SHOW);
else
GetDlgItem(IDC_ADD_INDEX)->ShowWindow(SW_HIDE);
}
void CIndexDimDlg::SetSectRunView(BOOL bVisible)
{
if (bVisible && m_iIndexType == 1)
{
GetDlgItem(IDC_CHK_MORE_CUT)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_CHK_ADD_TURN)->ShowWindow(SW_SHOW);
}
else
{
GetDlgItem(IDC_CHK_MORE_CUT)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_CHK_ADD_TURN)->ShowWindow(SW_HIDE);
}
}
double CIndexDimDlg::GetUpDimLen()
{
AcDbObjectId textStyle = GlobalFunc::GetTextStyleId(m_strFontStyle);
if (!textStyle)
return 0.0;
double dHei = _tstof(m_strHeight);
// 初始化宽度,按照单字节计算
int iMoreText = m_strInputUp.IsEmpty() ? 0 : 1; // 如果为空则不计算多余长度,否则多计算一个字符的长度
return AecXDbSymbIndexPointer::CalcTextLen(m_strInputUp, textStyle, dHei, iMoreText);
}
double CIndexDimDlg::GetDownDimLen()
{
AcDbObjectId textStyle = GlobalFunc::GetTextStyleId(m_strFontStyle);
if (!textStyle)
return 0.0;
double dHei = _tstof(m_strHeight);
// 初始化宽度,按照单字节计算
int iMoreText = m_strInputDown.IsEmpty() ? 0 : 1;
return AecXDbSymbIndexPointer::CalcTextLen(m_strInputDown, textStyle, dHei, iMoreText);
}
BOOL CIndexDimDlg::GetExtendsProp(CString &strUp, CString &strDown, double &dHei, AcDbObjectId &textStyle)
{
UpdateData();
if (m_bDimOnExtent)
{
strUp = m_strInputUp;
strDown = m_strInputDown;
textStyle = GlobalFunc::GetTextStyleId(m_strFontStyle);
if (!textStyle)
return FALSE;
dHei = _tstof(m_strHeight);
return TRUE;
}
return FALSE;
}
void CIndexDimDlg::Dlg2Obj(AecXDbSymbIndexPointer *pText)
{
/*
AcDbObjectId idTextStyle = GetTextStyleId(sTextStyle);
if (!idTextStyle)
return;
pText->SetTextStyleId(idTextStyle);
g_nHeight = _tstof(m_strHeight);
pText->SetTextHeight(g_nHeight);
*/
CBaseTextDlg::Dlg2Obj(pText);
pText->SetText1(m_strInputUp);
pText->SetText2(m_strInputDown);
pText->SetIndexLabel(m_strIndex);
pText->SetDrawingLabel(m_strDrawing);
if (m_bModeless) // add by whl on 060324,设置索引符号类型
pText->SetIndexPointer(m_iIndexType == 0);
// sg add 090402,增加文字相对于基线的对齐方式
AecXDbSymbIndexPointer::TSymbIPTextAlign nAlign =
(AecXDbSymbIndexPointer::TSymbIPTextAlign)(m_nTextAlign + 1);
pText->SetTextAlign(nAlign);
AcDbObjectId idFontStyle = GlobalFunc::GetTextStyleId(m_strFontStyle);
if (!idFontStyle)
return;
pText->SetDimTextStyle(idFontStyle);
AcDbObjectId idCircleTextStyle = GlobalFunc::GetTextStyleId(m_strDimStyle);
if (!idCircleTextStyle)
return;
pText->SetTextStyleId(idCircleTextStyle);
}
void CIndexDimDlg::Obj2Dlg(AecXDbSymbIndexPointer *pText)
{
CBaseTextDlg::Obj2Dlg(pText);
m_strInputUp = pText->GetText1();
m_strInputDown = pText->GetText2();
m_strDrawing = pText->GetDrawingLabel();
m_strIndex = pText->GetIndexLabel();
// sg add 090402,增加文字相对于基线的对齐方式
m_nTextAlign = (int)(pText->GetTextAlign() - 1);
m_strDimStyle = m_strFontStyle;
// lgh add 101224,标注文字样式
AcDbObjectId idDimStyle = pText->GetDimTextStyle();
OPENOBJ_BEGIN(idDimStyle, AcDb::kForRead, AcDbTextStyleTableRecord, pStyle);
ASSERT(pStyle);
const TCHAR* pName = NULL;
if (pStyle->getName(pName) == Acad::eOk && pName != NULL)
m_strFontStyle = pName;
else
AfxMessageBox(_T("文字风格已删除!"));
OPENOBJ_END();
// lgh add 101224,是否在延长线上标注文字
if (pText->GetDimPos() == 1)
m_bDimOnExtent = TRUE;
else
m_bDimOnExtent = FALSE;
}
// add by cwk on 060705
void CIndexDimDlg::OnCheckAngle()
{
// TODO: Add your control notification handler code here
if (m_bFixAngle)
{
m_bFixAngle = false;
/*GetDlgItem(IDC_EDIT_ANGLE)->EnableWindow(FALSE);*/
GetDlgItem(IDC_COMBO1)->EnableWindow(FALSE);// [11/12/2007 nsh]
}
else
{
m_bFixAngle = true;
/*GetDlgItem(IDC_EDIT_ANGLE)->EnableWindow();*/
GetDlgItem(IDC_COMBO1)->EnableWindow();// [11/12/2007 nsh]
}
}
#pragma endregion
#pragma region CComposingDlg
extern double g_nHeiht;
static CString g_strOldText = "";
BOOL CComposingDlg::m_bContinue = TRUE;// Add by lcf on 2005-06-29
int CComposingDlg::m_nSide = 1; // sg add 081103
BOOL CComposingDlg::m_bHasCirPoint = FALSE;// add by xly on 100916
CString CComposingDlg::m_csPointSize = _T("0.8");// add by xly on 100916
IMPLEMENT_DYNAMIC(CComposingDlg, CBaseTextDlg)
CComposingDlg::CComposingDlg(CWnd* pParent /*=NULL*/)
: CBaseTextDlg(CComposingDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CComposingDlg)
// m_nSide = 1; // sg delete 081103
//}}AFX_DATA_INIT
// sg add 090324,做法标注支持多行文字
m_bNeedSingleLineText = FALSE;
}
void CComposingDlg::DoDataExchange(CDataExchange* pDX)
{
CBaseTextDlg::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CComposingDlg)
DDX_Control(pDX, IDC_INPUT_TEXT, m_editInputText);
DDX_Text(pDX, IDC_INPUT_TEXT, m_strInputText);
DDX_Radio(pDX, IDC_RADIO_UPLINE, m_nSide);
DDX_Check(pDX, IDC_CONTINUE, m_bContinue);
DDX_Check(pDX, IDC_CHK_CIRPOINTSIZE, m_bHasCirPoint);// add by xly on 100916
//DDX_Text(pDX, IDC_CMB_CIRPOINTSIZE, m_csPointSize);// add by xly on 100916
DDX_Text(pDX, IDC_CMB_CIRPOINTSIZE, m_csPointSizeTemp);// add by xly on 110314
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CComposingDlg, CBaseTextDlg)
//{{AFX_MSG_MAP(CComposingDlg)
ON_BN_CLICKED(IDC_CHK_CIRPOINTSIZE, OnHasPoint)// add by xly on 100916
ON_BN_CLICKED(IDC_BUT_ADDPOINT, OnButtonAddPoint)// add by xly on 100921
ON_CBN_KILLFOCUS(IDC_CMB_CIRPOINTSIZE, OnKillFocusPointSize)// add by xly on 101221
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CComposingDlg message handlers
BOOL CComposingDlg::OnInitDialog()
{
CBaseTextDlg::OnInitDialog();
m_editInputText.GetFocus();
if (m_strInputText == "")
m_strInputText = g_strOldText;
// add by xly on 100916 是否圆点标注
if (!m_bHasCirPoint)
{
GetDlgItem(IDC_CMB_CIRPOINTSIZE)->EnableWindow(FALSE);
}
// add by xly on 10921 做法标注对象编辑时,添加一个按钮和一个静态文本标签
GetDlgItem(IDC_STC_POINTSIZE)->ShowWindow(SW_HIDE);
if (!m_bModeless)
{
GetDlgItem(IDC_STC_POINTSIZE)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_CHK_CIRPOINTSIZE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_CMB_CIRPOINTSIZE)->EnableWindow(TRUE);
// 对象编辑时没有没标注点的情况
if (!m_bHasPoint)
{
GetDlgItem(IDC_STC_POINTSIZE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_CMB_CIRPOINTSIZE)->ShowWindow(SW_HIDE);
}
}
// add by xly on 110311 初始化圆点的大小
m_csPointSizeTemp = m_csPointSize;
// add by xly on 110328 增加对象编辑的圆点大小的设置
if (!m_bModeless)
{
double dSize = m_pComposing->GetCirPointSize();
m_csPointSizeTemp.Format(_T("%.1f"), dSize);
}
UpdateData(FALSE);
m_editInputText.SetSel(0, -1);
return FALSE; // return TRUE unless you set the focus to a control
}
CWnd* CComposingDlg::GetCurWnd()
{
CWnd *pWnd = GetDlgItem(IDC_INPUT_TEXT);// 把CWnd 回传给基类
return (pWnd);
}
extern void TrimTail(CString &str);
// add by xly on 101109 判断csStr中是否含有字母
bool IsAllDigital(CString csStr)
{
int nLen = csStr.GetLength(),
nTemp(0);
for (int i = 0; i < nLen; i++)
{
nTemp = (int)csStr.GetAt(i);
if ((nTemp <= 'z' && nTemp >= 'a') || (nTemp <= 'Z' && nTemp >= 'A'))
{
return false;
}
}
return true;
}
void CComposingDlg::Dlg2Obj(AecXDbSymbComposing *pText)
{
CBaseTextDlg::Dlg2Obj(pText);
g_strOldText = m_strInputText;
pText->SetText(m_strInputText);
pText->SetSideText(m_nSide);
// add by xly on 101210 解决对象编辑时出现的对话框提示“视图执行不支持的操作”
pText->SetCirPointSize(_tstof(m_csPointSize));
}
void CComposingDlg::Obj2Dlg(AecXDbSymbComposing *pText)
{
CBaseTextDlg::Obj2Dlg(pText);
m_strInputText = pText->GetText();
m_nSide = pText->IsSideText();
// add by xly on 100926 对象编辑使用,存在标注点与不存在标注点对话框显示不同
m_bHasPoint = pText->HasOtherPoint();
// delete by xly on 1104 提到初始化中设置
//// add by xly on 110327 增加对象编辑的圆点大小的设置
//double dSize = pText->GetCirPointSize();
//m_csPointSizeTemp.Format(_T("%.1f"),dSize);
//m_csPointSize = m_csPointSizeTemp;
// add by xly on 101227 增加做法标注对象
m_pComposing = pText;
}
// add by xly on 100916 是否有圆点标注
void CComposingDlg::OnHasPoint()
{
UpdateData(TRUE);
GetDlgItem(IDC_CMB_CIRPOINTSIZE)->EnableWindow(m_bHasCirPoint);
UpdateData(FALSE);
}
// add by xly on 100916 设置对话框控件不可用
void CComposingDlg::SetLableEnable(BOOL bShow)
{
UpdateData(TRUE);
GetDlgItem(IDC_CHK_CIRPOINTSIZE)->EnableWindow(bShow);
UpdateData(FALSE);
}
// add by xly on 101227 编辑时增加其他标注点
void AddOtherPoint(AecXDbSymbComposing *pComposing)
{
AcGePoint3d ptDim = pComposing->GetStartPoint(),
ptBase = pComposing->GetTurnPoint();
while (1)
{
// jig
// modify by xly on 110314 支持用户坐标系
//TComposingAddOtherPtJig jig2(Ucs2Wcs(ptDim),ptBase);
ComposingAddOtherPtJig jig2(ptDim, ptBase);
jig2.SetPrompt(_T("\n请点取要增加的标注点<退出>:"));
jig2.SetKeyword(_T("`"));
int nRet = jig2.DoIt();
if (nRet == RTNORM)
{
// 将其他标注点添加到实体中
XPoint ptNew = jig2.GetPickPoint();
AcGePoint3d ptS = pComposing->GetStartPoint(),
ptTurn = pComposing->GetTurnPoint();
// 引线长度
double dLineLen = ptS.distanceTo(ptTurn);
// 新进入点的长度
double dNewLineLen = ptNew.Distance(ptTurn);
if (pComposing->upgradeOpen() == Acad::eOk)
{
// 新进入点的长度大于引线长度,更新m_ptStart
if (dLineLen < dNewLineLen)
{
pComposing->SetStartPoint(ptNew);
pComposing->AddDotLoc(ptS);
}
else
{
pComposing->AddDotLoc(ptNew);
}
pComposing->downgradeOpen();
}
}
else
{
pComposing->downgradeOpen();
break;
}
}
}
// add by xly on 100921 做法标注对象编辑是添加“增加标注点<”按钮事件
void CComposingDlg::OnButtonAddPoint()
{
// 隐藏对话框,设置软件的环境可用
CWnd * pWnd = acedGetAcadFrame();
pWnd->EnableWindow(TRUE);
pWnd->SetFocus();
pWnd->SetActiveWindow();
this->ShowWindow(SW_HIDE);
// 修改实体的添加夹点
m_pComposing->upgradeOpen();
Dlg2Obj(m_pComposing);
m_pComposing->downgradeOpen();
// 增加标注点
AddOtherPoint(m_pComposing);
// 恢复对话框可见
pWnd->EnableWindow(FALSE);
this->ShowWindow(SW_SHOW);
this->EnableWindow(TRUE);
this->SetActiveWindow();
// sg add 101228,解决添加其他圆点标注点后,对话框的显示问题
if (m_pComposing->HasOtherPoint())
{
GetDlgItem(IDC_STC_POINTSIZE)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_CHK_CIRPOINTSIZE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_CMB_CIRPOINTSIZE)->EnableWindow(TRUE);
GetDlgItem(IDC_CMB_CIRPOINTSIZE)->ShowWindow(SW_SHOW);
}
}
// add by xly on 101221 圆点大小的编辑框设置焦点
void CComposingDlg::OnKillFocusPointSize()
{
// 记录修改前的值
CString csSize = m_csPointSizeTemp;
UpdateData(TRUE);
int nPointPos(-1);
double dSize = _tstof(m_csPointSizeTemp);
nPointPos = m_csPointSizeTemp.Find(_T('.'));
if (m_csPointSizeTemp == _T("") || dSize < -1E-6 || !IsAllDigital(m_csPointSizeTemp))
{
// modify by xly on 110223 修改提示语
//MessageBox(_T("圆点大小请给出一个不小于0的数值。"));
AfxMessageBox(_T("请输入不小于0的数值。"));
m_csPointSizeTemp = m_csPointSize;
}
else if (nPointPos > -1)
{
m_csPointSizeTemp = m_csPointSizeTemp.Left(nPointPos + 2);
}
m_csPointSize = m_csPointSizeTemp;
UpdateData(FALSE);
}
#pragma endregion
#pragma region
/////////////////////////////////////////////////////////
IMPLEMENT_DYNAMIC(CEditLeaderDlg, CLeaderDlg)
CEditLeaderDlg::CEditLeaderDlg(CWnd *pParent)
: CLeaderDlg(TRUE, CEditLeaderDlg::IDD, pParent)
{
}
BEGIN_MESSAGE_MAP(CEditLeaderDlg, CLeaderDlg)
ON_BN_CLICKED(IDC_ADDDIM, OnBnClickedAdddim)
ON_BN_CLICKED(IDC_CHECK_ONLINE, OnBnClickedCheckOnline)
ON_BN_CLICKED(IDC_CHK_LERDER, OnBnClickedChkEditleaer)
END_MESSAGE_MAP()
void CEditLeaderDlg::OnBnClickedAdddim()
{
EndDialog(1000);
}
//add by lxb 111228
void CEditLeaderDlg::OnBnClickedCheckOnline()
{
CButton *pBtn1 = ((CButton *)GetDlgItem(IDC_CHECK_ONLINE));
CButton *pBtn2 = ((CButton *)GetDlgItem(IDC_CHK_LERDER));
if (pBtn1->GetCheck() == BST_CHECKED)
{
pBtn2->SetCheck(BST_UNCHECKED);
}
UpdateData();
}
//add by lxb 111228
void CEditLeaderDlg::OnBnClickedChkEditleaer()
{
CButton *pBtn1 = ((CButton *)GetDlgItem(IDC_CHECK_ONLINE));
CButton *pBtn2 = ((CButton *)GetDlgItem(IDC_CHK_LERDER));
if (pBtn2->GetCheck() == BST_CHECKED)
{
pBtn1->SetCheck(BST_UNCHECKED);
}
UpdateData();
}
#pragma endregion
#pragma region
CEditIndexDimDlg::CEditIndexDimDlg(CWnd *pParent /*=NULL*/)
: CIndexDimDlg(TRUE, CEditIndexDimDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CEditIndexDimDlg)
//}}AFX_DATA_INIT
}
void CEditIndexDimDlg::DoDataExchange(CDataExchange *pDX)
{
CIndexDimDlg::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CEditIndexDimDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CEditIndexDimDlg, CIndexDimDlg)
//{{AFX_MSG_MAP(CEditIndexDimDlg)
ON_BN_CLICKED(IDC_BTN_ADD_CUT, OnAddCut)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CEditIndexDimDlg::AttachObject(AecXDbSymbIndexPointer *pText)
{
m_pTextAttached = pText;
}
BOOL CEditIndexDimDlg::OnInitDialog()
{
ASSERT(m_pTextAttached != NULL);
CBaseTextDlg::OnInitDialog();
//////////////////////////////////////////////////
LoadHisText();
LoadDimTextStyle(); // lgh add 101216,初始化标注文字样式。
m_cmbDimStyle.SetCurSel(m_cmbDimStyle.FindString(0, m_strDimStyle));
m_comboInputText.SetFocus();
UpdateVisible(!m_bEditObj);
if (m_pTextAttached->IsIndexPointer())
{
GetDlgItem(IDC_BTN_ADD_CUT)->ShowWindow(SW_HIDE);
}
else
{
GetDlgItem(IDC_BTN_ADD_CUT)->ShowWindow(SW_NORMAL);
}
return TRUE;
}
void CEditIndexDimDlg::OnAddCut()
{
GetParent()->EnableWindow(TRUE);
GetParent()->SetFocus();
GetParent()->SetActiveWindow();
ShowWindow(SW_HIDE);
// 动态绘制命令
AddCutLineForIndexPointer(m_pTextAttached);
m_pTextAttached->draw();
// 调用CAD窗口立即更新
acedGetAcadDwgView()->Invalidate();
acedGetAcadDwgView()->UpdateWindow();
// 显示对话框
GetParent()->EnableWindow(FALSE);
EnableWindow(TRUE);
SetActiveWindow();
ShowWindow(SW_SHOW);
}
void CEditIndexDimDlg::AdjustExtentProp()
{
AecXDbSymbIndexPointer *pText = m_pTextAttached;
// if (!pText->HasExtendLine() && m_bDimOnExtent)
if (m_bDimOnExtent)
{ // 原先没有延长线,现在需要表在延长线上,需要计算延长线的长度,其他不管
CString sUpDim = m_strInputUp, sDownDim = m_strInputDown;
AcDbObjectId idDim = GlobalFunc::GetTextStyleId(m_strDimStyle);
if (!idDim)
return;
double dHei = _tstof(m_strHeight);
double dUpLen = 0.0, dDownLen = 0.0;
if (pText->IsSingleLineText(true))
{
dUpLen = AecXDbSymbIndexPointer::CalcTextLen(sUpDim, idDim, dHei, 1);
}
else
{
dUpLen = CalcMTextLen(sUpDim, idDim, dHei, pText->GetTextWidthUp(), 1);
}
if (pText->IsSingleLineText(false))
{
dDownLen = AecXDbSymbIndexPointer::CalcTextLen(sDownDim, idDim, dHei, 1);
}
else
{
dDownLen = CalcMTextLen(sDownDim, idDim, dHei, pText->GetTextWidthDown(), 1);
}
double dLen = max(dUpLen, dDownLen) / pText->GetPScale();
const double dMinLen = AecXDbSymbIndexPointer::GetDefaultExtendLineLen();
if (dLen < dMinLen)
dLen = dMinLen;
if (pText->GetExtendLineLen() < dLen)
pText->SetExtendLineLen(dLen);
}
else
pText->SetExtendLineLen(0.0);
pText->SetDimPos(m_bDimOnExtent ? 1 : 0);
}
#pragma endregion
#pragma region
CString CEditSectionDlg::m_strSectionNum = _T("1");
CString CEditSectionDlg::m_strStyle = GetTextStyleName(TS_SECTION); //获得默认剖切编号的文字样式
CString CEditSectionDlg::m_strHeight = _T("5.0");
int CEditSectionDlg::m_bCheck = FALSE;
CString CEditSectionDlg::m_strDrawingNum = _T("1");
int CEditSectionDlg::m_iLocal = 0;
int CEditSectionDlg::m_iDirect = 0;
CString CEditSectionDlg::m_strDrawingHeight = _T("3.5");
CString CEditSectionDlg::m_strTextStyle = GetTextStyleName(TS_INDEXSCALE);//获得默认剖切图号文字样式
BOOL CEditSectionDlg::m_bSection = FALSE;
IMPLEMENT_DYNAMIC(CEditSectionDlg, CModelessDialog)
CEditSectionDlg::CEditSectionDlg(CWnd *pParent)
:CModelessDialog(CEditSectionDlg::IDD, pParent)
{
}
CEditSectionDlg::~CEditSectionDlg(void)
{
}
BEGIN_MESSAGE_MAP(CEditSectionDlg, CModelessDialog)
ON_BN_CLICKED(IDC_CHK_EDRAWING, OnBnClickDrawNum)
ON_BN_CLICKED(IDC_BTN_EWORDHIGHT, OnBnClickedBtnWordhight)
ON_BN_CLICKED(IDC_BTN_EDRAWINGHEIGHT, OnBnClickedBtnDrawingheight)
END_MESSAGE_MAP()
void CEditSectionDlg::DoDataExchange(CDataExchange *pDX)
{
CModelessDialog::DoDataExchange(pDX);
DDX_CBString(pDX, IDC_CMB_ESECTIONNUM, m_strSectionNum);
if (pDX->m_bSaveAndValidate)
{
DDX_CBString(pDX, IDC_CMB_ESECTIONTEXT, m_strStyle);
}
DDX_CBString(pDX, IDC_CMB_EWORDHEIGHT, m_strHeight);
DDX_Text(pDX, IDC_EDT_EDRAWINGNUM, m_strDrawingNum);
DDX_CBIndex(pDX, IDC_CMB_ESECTIONPOSITION, m_iLocal);
DDX_CBIndex(pDX, IDC_CMB_ESECTIONDIRECT, m_iDirect);
DDX_CBString(pDX, IDC_CMB_EDRAWINGHEIGHT, m_strDrawingHeight);
if (pDX->m_bSaveAndValidate)
{
DDX_CBString(pDX, IDC_CMB_EDRAWTEXTSTYLE, m_strTextStyle);
}
DDX_Check(pDX, IDC_CHK_EDRAWING, m_bCheck);
DDX_Control(pDX, IDC_CMB_EDRAWTEXTSTYLE, m_cmbDrawStyle);
DDX_Control(pDX, IDC_CMB_ESECTIONTEXT, m_cmbStyleName);
DDX_Radio(pDX, IDC_RAD_SECTION, m_bSection);
}
BOOL CEditSectionDlg::OnInitDialog()
{
CModelessDialog::OnInitDialog();
AddTip(IDC_STATIC_LOCAL, _T("设置剖面图号是标注在剖切符号的两端还是其中一端"));
AddTip(IDC_STATIC_DIRECT, _T("设置剖面图号的文字方向是沿剖切方向还是剖视方向"));
LoadTextStyle(); //加载文字样式
OnBnClickDrawNum();
UpdateData(FALSE);
return TRUE;
}
void CEditSectionDlg::LoadTextStyle()
{
XSymbolList lstStyle(_T("STYLE"));
for (int m = 0; m < lstStyle.Length(); m++) //初始化文字样式
{
m_cmbStyleName.AddString(lstStyle[m]);
m_cmbDrawStyle.AddString(lstStyle[m]);
}
m_cmbStyleName.SetCurSel(m_cmbStyleName.FindStringExact(0, m_strStyle));
m_cmbDrawStyle.SetCurSel(m_cmbDrawStyle.FindStringExact(0, m_strTextStyle));
}
CString CEditSectionDlg::GetSectionNum()
{
UpdateData(TRUE);
return m_strSectionNum;
}
CString CEditSectionDlg::GetNumStyle()
{
UpdateData(TRUE);
return m_strStyle;
}
double CEditSectionDlg::GetNumHeight()
{
UpdateData(TRUE);
return _tstof(m_strHeight);
}
CString CEditSectionDlg::GetDrawNum()
{
UpdateData(TRUE);
return m_strDrawingNum;
}
int CEditSectionDlg::GetLocal()
{
UpdateData(TRUE);
return m_iLocal;
}
int CEditSectionDlg::GetDirect()
{
UpdateData(TRUE);
return m_iDirect;
}
CString CEditSectionDlg::GetDrawingStyle()
{
UpdateData(TRUE);
return m_strTextStyle;
}
double CEditSectionDlg::GetDrawHeight()
{
UpdateData(TRUE);
return _tstof(m_strDrawingHeight);
}
void CEditSectionDlg::OnBnClickDrawNum()
{
UpdateData(TRUE);
if (!m_bCheck) //是否编辑剖切图号
{
GetDlgItem(IDC_CMB_EDRAWTEXTSTYLE)->EnableWindow(FALSE);
GetDlgItem(IDC_EDT_EDRAWINGNUM)->EnableWindow(FALSE);
GetDlgItem(IDC_CMB_ESECTIONPOSITION)->EnableWindow(FALSE);
GetDlgItem(IDC_CMB_ESECTIONDIRECT)->EnableWindow(FALSE);
GetDlgItem(IDC_CMB_EDRAWINGHEIGHT)->EnableWindow(FALSE);
GetDlgItem(IDC_BTN_EDRAWINGHEIGHT)->EnableWindow(FALSE);
}
else
{
GetDlgItem(IDC_CMB_EDRAWTEXTSTYLE)->EnableWindow(TRUE);
GetDlgItem(IDC_EDT_EDRAWINGNUM)->EnableWindow(TRUE);
GetDlgItem(IDC_CMB_ESECTIONPOSITION)->EnableWindow(TRUE);
GetDlgItem(IDC_CMB_ESECTIONDIRECT)->EnableWindow(TRUE);
GetDlgItem(IDC_CMB_EDRAWINGHEIGHT)->EnableWindow(TRUE);
GetDlgItem(IDC_BTN_EDRAWINGHEIGHT)->EnableWindow(TRUE);
}
UpdateData(FALSE);
}
BOOL CEditSectionDlg::GetIsShowDrawText()
{
return m_bCheck;
}
void CEditSectionDlg::Dlg2Obj(AecXDbSymbSection *pSection)//将对话框中内容设置到实体中
{
pSection->SetText(m_strSectionNum);
pSection->SetTextStyleId(InitTextStyle(m_strStyle));//设置剖切编号文字样式
pSection->SetTextHeight(_tstof(m_strHeight));
if (m_bCheck)
{
pSection->SetIndexStyleId(InitTextStyle(m_strTextStyle));
pSection->SetIndexHeight(_tstof(m_strDrawingHeight));
pSection->SetDrawingIndex(m_strDrawingNum);
if (m_iDirect == 0)//沿剖切线
{
pSection->SetDimDirection(0);
}
else
{
pSection->SetDimDirection(1);
}
if (m_iLocal == 0)//两端
{
pSection->SetIsHasIndexS(TRUE);
pSection->SetIsHasIndexE(TRUE);
}
else if (m_iLocal == 1)//始端
{
pSection->SetIsHasIndexS(TRUE);
pSection->SetIsHasIndexE(FALSE);
}
else if (m_iLocal == 2)//终端
{
pSection->SetIsHasIndexS(FALSE);
pSection->SetIsHasIndexE(TRUE);
}
}
else
{
pSection->SetIsHasIndexE(FALSE);
pSection->SetIsHasIndexS(FALSE);
}
pSection->SetViewLine(!m_bSection);//是否是断面剖切还是剖面剖切
}
void CEditSectionDlg::Obj2Dlg(AecXDbSymbSection *pSection)
{
m_strSectionNum = pSection->GetText();
double dHeight = pSection->GetTextHeight();
m_strHeight.Format(_T("%0.1f"), dHeight);
dHeight = pSection->GetIndexHeight();
m_strDrawingHeight.Format(_T("%0.1f"), dHeight);
m_strStyle = GlobalFunc::GetSymbolName(pSection->GetTextStyleId());
if (!pSection->GetIsHasIndexS() && !pSection->GetIsHasIndexE())//判断是否编辑剖切图号
{
m_bCheck = FALSE;
}
else
{
m_bCheck = TRUE;
}
// sg modify 120612,以下数据从“m_bCheck = TRUE”分支中移出,无论是否标注图号,数据都是要来自对象的
if (pSection->GetIsHasIndexS() && pSection->GetIsHasIndexE())
{
m_iLocal = 0; //两端标注
}
if (pSection->GetIsHasIndexS() && !pSection->GetIsHasIndexE())
{
m_iLocal = 1; //首端标注
}
if (!pSection->GetIsHasIndexS() && pSection->GetIsHasIndexE())
{
m_iLocal = 2; //尾端标注
}
m_strTextStyle = GlobalFunc::GetSymbolName(pSection->GetIndexStyleId());
m_strDrawingNum = pSection->GetDrawingIndex();
m_iDirect = pSection->GetDimDirection();
m_bSection = !pSection->HasViewLine();
}
void CEditSectionDlg::OnBnClickedBtnWordhight()
{
UpdateData(TRUE);
XPushAutoHide noAutoHide(this);
double dHeight = _tstof(m_strHeight);
dHeight = dHeight * GlobalFunc::DocGetPScale();
BeginEditorCommand();
if (GlobalFunc::GetDist(_T("\n字高"), dHeight, RSG_NOZERO | RSG_NONEG) == RTNORM)
{
dHeight /= GlobalFunc::DocGetPScale();//获得的字高除以当前图纸比例
CString str;
str.Format(_T("%.1f"), dHeight);
m_strHeight = str;
}
CompleteEditorCommand();
UpdateData(FALSE);
}
void CEditSectionDlg::OnBnClickedBtnDrawingheight()
{
UpdateData(TRUE);
XPushAutoHide noAutoHide(this);
double dHeight = _tstof(m_strDrawingHeight);
dHeight = dHeight * GlobalFunc::DocGetPScale();
BeginEditorCommand();
if (GlobalFunc::GetDist(_T("\n字高"), dHeight, RSG_NOZERO | RSG_NONEG) == RTNORM)
{
dHeight /= GlobalFunc::DocGetPScale();
CString str;
str.Format(_T("%.1f"), dHeight);
m_strDrawingHeight = str;
}
CompleteEditorCommand();
UpdateData(FALSE);
}
#pragma endregion