8044 lines
207 KiB
C++
8044 lines
207 KiB
C++
#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¢er, 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
|