|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246 |
- // ************************************************************************** //
- // SelectTarget.cpp : implementation of the CSelectTarget class
- // Copyright(c)2010 Naiky Company. All rights reserved.
- //
- // Abstract:
- // ļʵCSelectTarget࣬ͼεѡܡ
- //
- // ******************** Version 1 *******************
- // [άԱ]: § [ά]: 2010-05-20
- // [ά]: 档
- // ************************************************************************** //
-
- #include "stdafx.h"
- #include "SelectTarget.h"
-
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
-
- // ͼжʱֻȷСλ ---- ƺ 2016-01-07
- #define DOUBLE_ROUGHEQU(nX_, nY_) ncmath::IsEqual(nX_, nY_, 1e-3)
-
- using namespace nce;
- using namespace ncmath;
-
- CS_T s_szLAYERN = _DEFCS(_CSV(17152),
- _CHINESE("ͼ%d")
- _ENGLISH("Layer %d"));
- CS_T s_szTITLE = _DEFCS(_CSV(17160),
- _CHINESE("ѡСͼ")
- _ENGLISH("Select Tiny"));
- CS_T s_szSELECT_X = _DEFCS(_CSV(17161),
- _CHINESE("XߴС")
- _ENGLISH("X less than"));
- CS_T s_szSELECT_Y = _DEFCS(_CSV(17162),
- _CHINESE("YߴС")
- _ENGLISH("Y less than"));
- CS_T s_szOK = _DEFCS(_CSV(17163),
- _CHINESE("ȷ")
- _ENGLISH("OK"));
- CS_T s_szCANCEL = _DEFCS(_CSV(17164),
- _CHINESE("ȡ")
- _ENGLISH("Cancel"));
-
- ////////////////////////////////////////////////////////////////////////////////
- // ѡСͼεĶԻ ---- 2015-11-29
- //
- class CSelectTinyDlg : public CDialog
- {
- DECLARE_DYNAMIC(CSelectTinyDlg)
-
- public:
- CSelectTinyDlg(CWnd* pParent_ = NULL);
- virtual ~CSelectTinyDlg();
-
- GUARD_BEGIN(CSelectTinyDlg);
- double m_nWidth;
- double m_nHeight;
- GUARD_END(CSelectTinyDlg);
-
- protected:
- virtual void DoDataExchange(CDataExchange* pDX_);
- virtual BOOL OnInitDialog();
- };
-
- IMPLEMENT_DYNAMIC(CSelectTinyDlg, CDialog)
-
- CSelectTinyDlg::CSelectTinyDlg(CWnd* pParent_/* = NULL*/)
- : CDialog(IDD_DLG_SELECTTINY, pParent_)
- {
- m_nWidth = 1.0;
- m_nHeight = 1.0;
- LOAD_PARAM(this, CSelectTinyDlg);
- }
-
- CSelectTinyDlg::~CSelectTinyDlg()
- {
- SAVE_PARAM(this, CSelectTinyDlg);
- }
-
- void CSelectTinyDlg::DoDataExchange(CDataExchange* pDX_)
- {
- CDialog::DoDataExchange(pDX_);
-
- DDX_Text(pDX_, IDC_EDT_SELECTTINY_X, m_nWidth);
- DDV_MinMaxDouble(pDX_, m_nWidth, 0.1, 100.0);
- DDX_Text(pDX_, IDC_EDT_SELECTTINY_Y, m_nHeight);
- DDV_MinMaxDouble(pDX_, m_nHeight, 0.1, 100.0);
- }
-
- BOOL CSelectTinyDlg::OnInitDialog()
- {
- if (!__super::OnInitDialog())
- return FALSE;
-
- // ΪԻӢĽ ---- ߿ϼ 2016-01-25
- SetWindowText(_GETCS(s_szTITLE));
- SetDlgItemText(IDC_STC_SELECTTINY_X, _GETCS(s_szSELECT_X));
- SetDlgItemText(IDC_STC_SELECTTINY_Y, _GETCS(s_szSELECT_Y));
- SetDlgItemText(IDOK, _GETCS(s_szOK));
- SetDlgItemText(IDCANCEL, _GETCS(s_szCANCEL));
-
- return TRUE;
- }
-
- ////////////////////////////////////////////////////////////////////////////////
- // Local function declarations
- //
- // һĹ۲촰һCADΪֵ֣жϰ취
- // ӾΣȻӾεİཻϵжϡ
- // FullInside : ȫڹ۲촰
- // PartInside : ڹ۲촰
- // NotInside : ȫڹ۲촰
- // ۲촰ViewPortӦΪЧλõӦΪЧӦΪǸOUTָ
- // ΪNULLΪNULLʱʾҪռһֵĶ ---- 2011-07-16
- static void _DivideObjectsIntoThree(const CadObjectList* plistSource_, const DRECT& rcViewport_,
- CadObjectList* plistFullInside_, CadObjectList* plistPartInside_, CadObjectList* plistNotInside_);
-
- ////////////////////////////////////////////////////////////////////////////////
- // CSelectTarget ---- 2011-07-16
- //
- CSelectTarget* CSelectTarget::ms_pSelectTarget = NULL;
-
- CSelectTarget* GetSelectTarget()
- {
- return CSelectTarget::ms_pSelectTarget;
- }
-
- IMPLEMENT_DYNAMIC(CSelectTarget, CMouseMsgTarget)
- BEGIN_MESSAGE_MAP(CSelectTarget, CMouseMsgTarget)
- ON_COMMAND(IDCMD_SELECTTARGET_SELECT, OnSelect)
- ON_UPDATE_COMMAND_UI(IDCMD_SELECTTARGET_SELECT, OnUpdateSelect)
- ON_COMMAND(IDCMD_SELECTTARGET_SELECTALL, OnSelectAll)
- ON_UPDATE_COMMAND_UI(IDCMD_SELECTTARGET_SELECTALL, OnUpdateSelectAll)
- ON_COMMAND(IDCMD_SELECTTARGET_SELECTUNCLOSE, OnSelectUnclose)
- ON_UPDATE_COMMAND_UI(IDCMD_SELECTTARGET_SELECTUNCLOSE, OnUpdateSelectUnclose)
- ON_COMMAND(IDCMD_SELECTTARGET_SELECTTINY, OnSelectTiny)
- ON_UPDATE_COMMAND_UI(IDCMD_SELECTTARGET_SELECTTINY, OnUpdateSelectTiny)
- ON_COMMAND_RANGE(IDCMD_SELECTTARGET_SELECTBYCOLOR0, IDCMD_SELECTTARGET_SELECTBYCOLOR7, OnSelectByColor)
- ON_UPDATE_COMMAND_UI_RANGE(IDCMD_SELECTTARGET_SELECTBYCOLOR0, IDCMD_SELECTTARGET_SELECTBYCOLOR7, OnUpdateSelectByColor)
- ON_COMMAND_RANGE(IDCMD_SELECTTARGET_SELECTBYTYPE0, IDCMD_SELECTTARGET_SELECTBYTYPE15, OnSelectByType)
- ON_UPDATE_COMMAND_UI_RANGE(IDCMD_SELECTTARGET_SELECTBYTYPE0, IDCMD_SELECTTARGET_SELECTBYTYPE15, OnUpdateSelectByType)
- ON_COMMAND(IDCMD_SELECTTARGET_SELECTREV, OnSelectRev)
- ON_UPDATE_COMMAND_UI(IDCMD_SELECTTARGET_SELECTREV, OnUpdateSelectRev)
- ON_COMMAND(IDCMD_SELECTTARGET_CLEARSELECT, OnClearSelect)
- ON_UPDATE_COMMAND_UI(IDCMD_SELECTTARGET_CLEARSELECT, OnUpdateClearSelect)
- ON_TARGET_MESSAGE(TM_SELECT_SELECTALL, SelectAll)
- ON_TARGET_MESSAGE(TM_SELECT_SELECTBYCOLORE, SelectByColore)
- ON_COMMAND(IDCMD_SELECTTARGET_SELECTSIMILAR, OnSelectSimilar)
- ON_UPDATE_COMMAND_UI(IDCMD_SELECTTARGET_SELECTSIMILAR, OnUpdateSelectSimilar)
- END_MESSAGE_MAP()
-
- CSelectTarget::CSelectTarget(CNceDC* pNceDC_)
- {
- ASSERT(ms_pSelectTarget == NULL);
- ms_pSelectTarget = this;
-
- m_pFileTarget = NULL;
- m_pNceDC = pNceDC_;
- m_nSeleToleranceDP = 6;
- m_ptLButtonDown = DPOINT2(c_nINVALID_DOUBLE, c_nINVALID_DOUBLE);
- m_ptTemp = DPOINT2(c_nINVALID_DOUBLE, c_nINVALID_DOUBLE);
- m_rcSelObjsBoundRect = DRECT(c_nINVALID_DOUBLE, c_nINVALID_DOUBLE, c_nINVALID_DOUBLE, c_nINVALID_DOUBLE);
-
- // Ҽ˵ ---- 2010-08-16
- m_pRButtonMenu_NoneSelected = NULL;
- m_pRButtonMenu_SingleSelected = NULL;
- m_pRButtonMenu_MultiSelected = NULL;
-
- m_hCursor = AfxGetApp()->LoadCursor(IDC_CUR_SELECT);
- }
-
- CSelectTarget::~CSelectTarget()
- {
- ASSERT(ms_pSelectTarget == this);
- ms_pSelectTarget = NULL;
- }
-
- void CSelectTarget::Initialize()
- {
- __super::Initialize();
-
- m_pFileTarget = GetFileTarget();
- ASSERT(m_pFileTarget);
-
- // ѡTargetϢеTargetʱжѡTargetǷ
- // Wanglou 2010-06-13
- MouseMsgTargetList* _pMsgTargetList = GetMouseMsgTargetList();
- _pMsgTargetList->remove(this);
- _pMsgTargetList->push_back(this);
- }
-
- // ػ棬ѡжѡвοѡжӾεȡ ---- 2011-06-10
- BOOL CSelectTarget::Update(UINT nSenderID_, WPARAM nHint_, LPARAM pObject_)
- {
- GetSelectedCadObjects(true);
- GetSelectedRefLines(true);
- GetSelObjsBoundRect(true);
-
- // Ϣ ---- 2015-11-29
- m_nCloseCount = 0;
- m_nUncloseCount = 0;
- m_nColorMask = 0;
- m_nTypeMask = 0;
- CCadGroup* _pCadGroup = m_pFileTarget->GetCurrentCadGroup();
- ASSERT(_pCadGroup);
- int _nCount = _pCadGroup->GetNumOfChild();
- for (int _i = 0; _i < _nCount; _i++)
- {
- CCadObject* _pCad = _pCadGroup->GetAt(_i);
- ASSERT(_pCad);
- if (_pCad->IsClose())
- m_nCloseCount++;
- else
- m_nUncloseCount++;
-
- m_nColorMask |= (1 << _pCad->GetParamIndex());
-
- if (_pCad->GetType() == caddot) m_nTypeMask |= 0x0001;
- if (_pCad->GetType() == cadline) m_nTypeMask |= 0x0002;
- if (_pCad->GetType() == cadbeeline) m_nTypeMask |= 0x0004;
- if (_pCad->GetType() == cadcircle) m_nTypeMask |= 0x0008;
- if (_pCad->GetType() == cadarc) m_nTypeMask |= 0x0010;
- if (_pCad->GetType() == cadellipse) m_nTypeMask |= 0x0020;
- if (_pCad->GetType() == cadellipsearc) m_nTypeMask |= 0x0040;
- if (_pCad->GetType() == cadrectangle) m_nTypeMask |= 0x0100;
- if (_pCad->GetType() == cadpolygon) m_nTypeMask |= 0x0200;
- if (_pCad->GetType() == cadstar) m_nTypeMask |= 0x0400;
- if (_pCad->GetType() == cadpolyline) m_nTypeMask |= 0x0800;
- if (_pCad->GetType() == cadgroup) m_nTypeMask |= 0x2000;
- if (_pCad->GetType() == cadtext) m_nTypeMask |= 0x4000;
- }
-
- return TRUE;
- }
-
- void CSelectTarget::Activate()
- {
- // Base class first ---- 2010-07-14
- __super::Activate();
-
- // ѡģʽģʽ ---- 2010-05-28
- while (!ms_stackPreMouseMsgTargets.empty())
- ms_stackPreMouseMsgTargets.pop();
- }
-
- void CSelectTarget::OnSelect()
- {
- Activate();
- }
-
- void CSelectTarget::OnUpdateSelect(CCmdUI *pCmdUI_)
- {
- if (IsActive() || GetActiveTarget() == NULL)
- pCmdUI_->SetCheck(TRUE);
- else
- pCmdUI_->SetCheck(FALSE);
- }
-
- void CSelectTarget::OnSelectAll()
- {
- // ѡ ---- 2010-07-17
- if (!IsActive() && GetActiveTarget() != NULL)
- return;
-
- SelectAll();
- UpdateAllVisions();
- }
-
- void CSelectTarget::OnUpdateSelectAll(CCmdUI* pCmdUI_)
- {
- // ѡ ---- 2010-07-17
- if (!IsActive() && GetActiveTarget() != NULL)
- {
- pCmdUI_->Enable(FALSE);
- return;
- }
-
- pCmdUI_->Enable((m_nCloseCount + m_nUncloseCount) > 0);
- }
-
- void CSelectTarget::OnSelectRev()
- {
- // ѡ ---- 2010-07-17
- if (!IsActive() && GetActiveTarget() != NULL)
- return;
-
- SelectRev();
- UpdateAllVisions();
- }
-
- void CSelectTarget::OnUpdateSelectRev(CCmdUI* pCmdUI_)
- {
- // ѡ ---- 2010-07-17
- if (!IsActive() && GetActiveTarget() != NULL)
- {
- pCmdUI_->Enable(FALSE);
- return;
- }
-
- pCmdUI_->Enable((m_nCloseCount + m_nUncloseCount) > 0);
- }
-
- void CSelectTarget::OnClearSelect()
- {
- // ѡ ---- 2010-07-17
- if (!IsActive() && GetActiveTarget() != NULL)
- return;
-
- ClearSelect();
- UpdateAllVisions();
- }
-
- void CSelectTarget::OnUpdateClearSelect(CCmdUI* pCmdUI_)
- {
- // ѡ ---- 2010-07-17
- if (!IsActive() && GetActiveTarget() != NULL)
- {
- pCmdUI_->Enable(FALSE);
- return;
- }
-
- pCmdUI_->Enable(m_listSelectedCadObjects.size() > 0 || GetSelectedRefLines()->size() > 0);
- }
-
- void CSelectTarget::OnSelectUnclose()
- {
- if (!IsActive() && GetActiveTarget() != NULL)
- return;
-
- ASSERT(m_pFileTarget);
- CCadGroup* _pCadGroup = m_pFileTarget->GetCurrentCadGroup();
- for (int _i = 0; _i < _pCadGroup->GetNumOfChild(); _i++)
- {
- CCadObject* _pCad = _pCadGroup->GetAt(_i);
- ASSERT(_pCad);
- _pCad->Select(_pCad->GetType() != cadgroup && !_pCad->IsClose());
- }
-
- GetSelectedCadObjects(true);
- UpdateAllVisions();
- }
-
- void CSelectTarget::OnUpdateSelectUnclose(CCmdUI* pCmdUI_)
- {
- if (!IsActive() && GetActiveTarget() != NULL)
- {
- pCmdUI_->Enable(FALSE);
- return;
- }
-
- pCmdUI_->Enable(m_nUncloseCount > 0);
- }
-
- void CSelectTarget::OnSelectTiny()
- {
- if (!IsActive() && GetActiveTarget() != NULL)
- return;
-
- // ҪԻߴ ---- 2015-11-29
- CSelectTinyDlg _dlg;
- if (_dlg.DoModal() != IDOK)
- return;
-
- double _nWidth = max(0.1, _dlg.m_nWidth);
- double _nHeight = max(0.1, _dlg.m_nHeight);
- ASSERT(m_pFileTarget);
- CCadGroup* _pCadGroup = m_pFileTarget->GetCurrentCadGroup();
- for (int _i = 0; _i < _pCadGroup->GetNumOfChild(); _i++)
- {
- CCadObject* _pCad = _pCadGroup->GetAt(_i);
- ASSERT(_pCad);
- DRECT _rc = _pCad->GetBoundRect();
- _pCad->Select(DOUBLE_LESS(_rc.width, _nWidth) && DOUBLE_LESS(_rc.height, _nHeight));
- }
-
- GetSelectedCadObjects(true);
- UpdateAllVisions();
- }
-
- void CSelectTarget::OnUpdateSelectTiny(CCmdUI* pCmdUI_)
- {
- if (!IsActive() && GetActiveTarget() != NULL)
- {
- pCmdUI_->Enable(FALSE);
- return;
- }
-
- pCmdUI_->Enable((m_nCloseCount + m_nUncloseCount) > 0);
- }
-
- void CSelectTarget:: OnSelectByColor(UINT nID_)
- {
- if (!IsActive() && GetActiveTarget() != NULL)
- return;
-
- // Ҫѡڼͼ㣬Base0 ---- 2015-11-29
- int _nParamIndex = nID_ - IDCMD_SELECTTARGET_SELECTBYCOLOR0;
-
- ASSERT(m_pFileTarget);
- CCadGroup* _pCadGroup = m_pFileTarget->GetCurrentCadGroup();
- for (int _i = 0; _i < _pCadGroup->GetNumOfChild(); _i++)
- {
- CCadObject* _pCad = _pCadGroup->GetAt(_i);
- ASSERT(_pCad);
- _pCad->Select(_pCad->GetParamIndex() == _nParamIndex);
- }
-
- GetSelectedCadObjects(true);
- UpdateAllVisions();
- }
-
- void CSelectTarget::OnUpdateSelectByColor(CCmdUI* pCmdUI_)
- {
- // POPUP˵ ---- 2015-11-29
- if (pCmdUI_->m_pSubMenu != NULL)
- {
- bool _bEnable = (IsActive() || GetActiveTarget() == NULL) && m_nColorMask != 0;
- pCmdUI_->m_pMenu->EnableMenuItem(pCmdUI_->m_nIndex, MF_BYPOSITION | (_bEnable ? MF_ENABLED : MF_GRAYED));
- return;
- }
-
- if (m_nColorMask == 0)
- {
- return;
- }
-
- // Ӳ˵ʱʾǰЩɫͼ ---- 2015-11-29
- CMenu* pMenu_ = pCmdUI_->m_pMenu;
- if (pMenu_ == NULL || pCmdUI_->m_nIndex != 0)
- {
- return;
- }
-
- for (int _i = 0; _i < 8; _i++)
- {
- pMenu_->DeleteMenu(IDCMD_SELECTTARGET_SELECTBYCOLOR0 + _i, MF_BYCOMMAND);
- }
-
- for (int _i = 0; _i < 8; _i++)
- {
- if (!(m_nColorMask & (1 << _i)))
- continue;
-
- CString _strName;
- _strName.Format(_GETCS(s_szLAYERN), _i + 1);
- pMenu_->InsertMenu(pCmdUI_->m_nIndex++, MF_STRING | MF_BYPOSITION, IDCMD_SELECTTARGET_SELECTBYCOLOR0 + _i, _strName);
- }
-
- // update end menu count
- pCmdUI_->m_nIndex--; // point to last menu added
- pCmdUI_->m_nIndexMax = pMenu_->GetMenuItemCount();
-
- pCmdUI_->m_bEnableChanged = TRUE; // all the added items are enabled
- }
-
- void CSelectTarget::OnSelectByType(UINT nID_)
- {
- if (!IsActive() && GetActiveTarget() != NULL)
- return;
-
- // Ҫѡ͵ ---- 2015-11-29
- cad_t _nType = cadobject;
- if (nID_ == IDCMD_SELECTTARGET_SELECTBYTYPE0 + 0) _nType = caddot;
- if (nID_ == IDCMD_SELECTTARGET_SELECTBYTYPE0 + 1) _nType = cadline;
- if (nID_ == IDCMD_SELECTTARGET_SELECTBYTYPE0 + 2) _nType = cadbeeline;
- if (nID_ == IDCMD_SELECTTARGET_SELECTBYTYPE0 + 3) _nType = cadcircle;
- if (nID_ == IDCMD_SELECTTARGET_SELECTBYTYPE0 + 4) _nType = cadarc;
- if (nID_ == IDCMD_SELECTTARGET_SELECTBYTYPE0 + 5) _nType = cadellipse;
- if (nID_ == IDCMD_SELECTTARGET_SELECTBYTYPE0 + 6) _nType = cadellipsearc;
- if (nID_ == IDCMD_SELECTTARGET_SELECTBYTYPE0 + 8) _nType = cadrectangle;
- if (nID_ == IDCMD_SELECTTARGET_SELECTBYTYPE0 + 9) _nType = cadpolygon;
- if (nID_ == IDCMD_SELECTTARGET_SELECTBYTYPE0 + 10) _nType = cadstar;
- if (nID_ == IDCMD_SELECTTARGET_SELECTBYTYPE0 + 11) _nType = cadpolyline;
- if (nID_ == IDCMD_SELECTTARGET_SELECTBYTYPE0 + 13) _nType = cadgroup;
- if (nID_ == IDCMD_SELECTTARGET_SELECTBYTYPE0 + 14) _nType = cadtext;
-
- ASSERT(m_pFileTarget);
- CCadGroup* _pCadGroup = m_pFileTarget->GetCurrentCadGroup();
- for (int _i = 0; _i < _pCadGroup->GetNumOfChild(); _i++)
- {
- CCadObject* _pCad = _pCadGroup->GetAt(_i);
- ASSERT(_pCad);
- _pCad->Select(_pCad->GetType() == _nType);
- }
-
- GetSelectedCadObjects(true);
- UpdateAllVisions();
- }
-
- void CSelectTarget:: OnUpdateSelectByType(CCmdUI* pCmdUI_)
- {
- // POPUP˵ ---- 2015-11-29
- if (pCmdUI_->m_pSubMenu != NULL)
- {
- bool _bEnable = (IsActive() || GetActiveTarget() == NULL) && m_nTypeMask != 0;
- pCmdUI_->m_pMenu->EnableMenuItem(pCmdUI_->m_nIndex, MF_BYPOSITION | (_bEnable ? MF_ENABLED : MF_GRAYED));
- return;
- }
-
- if (m_nTypeMask == 0)
- {
- return;
- }
-
- // Ӳ˵ʱʾǰЩɫͼ ---- 2015-11-29
- CMenu* pMenu_ = pCmdUI_->m_pMenu;
- if (pMenu_ == NULL || pCmdUI_->m_nIndex != 0)
- {
- return;
- }
-
- for (int _i = 0; _i < 15; _i++)
- {
- pMenu_->DeleteMenu(IDCMD_SELECTTARGET_SELECTBYTYPE0 + _i, MF_BYCOMMAND);
- }
-
- static const CString c_sstrNames[] =
- {
- CCadDot().GetName(),
- CCadLine().GetName(),
- CCadBeeline().GetName(),
- CCadCircle().GetName(),
- CCadArc().GetName(),
- CCadEllipse().GetName(),
- CCadEllipseArc().GetName(),
- _T("CadMmultiSegments"),
- CCadRectangle().GetName(),
- CCadPolygon().GetName(),
- CCadStar().GetName(),
- CCadPolyline().GetName(),
- _T("CadPath"),
- CCadGroup().GetName(),
- CCadText().GetName(),
- _T("CadBmp"),
- };
- for (int _i = 0; _i < 15; _i++)
- {
- if (!(m_nTypeMask & (1 << _i)))
- continue;
-
- CString _strName = c_sstrNames[_i];
- pMenu_->InsertMenu(pCmdUI_->m_nIndex++, MF_STRING | MF_BYPOSITION, IDCMD_SELECTTARGET_SELECTBYTYPE0 + _i, _strName);
- }
-
- // update end menu count
- pCmdUI_->m_nIndex--; // point to last menu added
- pCmdUI_->m_nIndexMax = pMenu_->GetMenuItemCount();
-
- pCmdUI_->m_bEnableChanged = TRUE; // all the added items are enabled
- }
-
- // µӦ Wanglou 2010-06-13
- BOOL CSelectTarget::OnLButtonDown(UINT nFlags_, DPOINT2 point_)
- {
- if (!IsActive() && GetActiveTarget() != NULL)
- return FALSE;
-
- if (IsInvalidDouble(m_ptLButtonDown.x) || IsInvalidDouble(m_ptLButtonDown.y))
- m_ptLButtonDown = point_;
- return TRUE;
- }
-
- // Ӧ Wanglou 2010-06-13
- BOOL CSelectTarget::OnLButtonUp(UINT nFlags_, DPOINT2 point_)
- {
- if (!IsActive() && GetActiveTarget() != NULL)
- return FALSE;
-
- if (IsInvalidDouble(m_ptLButtonDown.x) || IsInvalidDouble(m_ptLButtonDown.y))
- return FALSE;
-
- CadObjectList _listSelectedCads = *GetSelectedCadObjects();
- CadObjectList _listSelectedRefs = *GetSelectedRefLines();
-
- // ſжº͵ĵطԲͬһ㣬㹻
- // º͵ľ벻ѡݲ1/2ΪǵΪǵѡ
- // Ϊѡ ---- 2011-07-16
- double _nTolerance = GetSelectToleranceLP();
- if (abs(m_ptLButtonDown.x - point_.x) <= _nTolerance / 2.
- && abs(m_ptLButtonDown.y - point_.y) <= _nTolerance / 2.)
- {
- SelectByPoint(nFlags_, point_, _nTolerance);
- }
- else
- {
- SelectByRect(nFlags_, m_ptLButtonDown, point_);
- }
-
- // ϢTargetѡĶ˸ı Wanglou 2010-06-13
- //SendTargetMessage(ID_TARGET_BROADCAST, TN_SELECT_CHANGE, (WPARAM)GetSelectedCadObjects());//&m_listSelectedCadObjects);
- Reset();
-
- bool _bChanged = _listSelectedCads != *GetSelectedCadObjects() || _listSelectedRefs != *GetSelectedRefLines();
- if (_bChanged)
- {
- // Ϊ仯 ---- 2013.06.17
- UpdateAllVisions();
- }
- else
- {
- // ûб仯ҲҪԼ(ѡ) ---- 2013.06.17
- UpdateVisions();
- }
- return TRUE;
- }
-
- BOOL CSelectTarget::OnRButtonUp(UINT nFlags_, DPOINT2 point_)
- {
- if (!IsActive() && GetActiveTarget() != NULL)
- return FALSE;
-
- if (IsValidDouble(m_ptLButtonDown.x) || IsValidDouble(m_ptLButtonDown.y))
- {
- Reset();
- UpdateVisions();
- }
- else
- {
- // λ(Screen) ---- 2010-08-16
- ASSERT(m_pNceDC);
- CPoint _ptPos = m_pNceDC->LPtoDP_Point(point_);
- CWnd* _pWnd = m_pNceDC->GetWindow();
- ASSERT(_pWnd);
- _pWnd->ClientToScreen(&_ptPos);
-
- // Ҽ˵ ---- 2010-08-16
- // ѡвοʱҼ˵-------liangyan 2013-10-23
- if (m_listSelectedCadObjects.size() == 0 && m_pRButtonMenu_NoneSelected && m_listSelectedRefLines.size() == 0)
- m_pRButtonMenu_NoneSelected->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON , _ptPos.x, _ptPos.y, AfxGetMainWnd());
- else if (m_listSelectedCadObjects.size() == 1 && m_pRButtonMenu_SingleSelected)
- m_pRButtonMenu_SingleSelected->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON , _ptPos.x, _ptPos.y, AfxGetMainWnd());
- else if (m_pRButtonMenu_MultiSelected || m_listSelectedRefLines.size() != 0)
- m_pRButtonMenu_MultiSelected->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON , _ptPos.x, _ptPos.y, AfxGetMainWnd());
- }
-
- return TRUE;
- }
-
- BOOL CSelectTarget::OnMouseMove(UINT nFlags_, DPOINT2 point_)
- {
- if (!IsActive() && GetActiveTarget() != NULL)
- return FALSE;
-
- if (IsInvalidDouble(m_ptLButtonDown.x) || IsInvalidDouble(m_ptLButtonDown.y))
- return FALSE;
-
- m_ptTemp = point_;
- UpdateVisions();
- return TRUE;
- }
-
- BOOL CSelectTarget::OnKeyDown(UINT nChar_, UINT nRepCnt_, UINT nFlags_)
- {
- if (nChar_ == VK_ESCAPE && (IsActive() || GetActiveTarget() == NULL))
- {
- // Escѡ ---- 崺 2012-5-27
- ClearSelect();
- UpdateAllVisions();
- return TRUE;
- }
-
- return FALSE;
- }
-
- // ѡʵ: ȿѡοߣѡοctrlshift״̬
- // Ϊͨѡѡѡ
- // ѡֻһͼΣ㵽1㲻0 ---- 2011-07-16
- // οҲctrlshift״̬ Ϊͨѡѡѡ-----liangyan 2013-10-19
- BOOL CSelectTarget::SelectByPoint(UINT nFlags_, const DPOINT2& point_, double nTolerance_)
- {
- bool _bCtrlKeyDown = (nFlags_ & MK_CONTROL) != 0;
- bool _bShiftKeyDown = (nFlags_ & MK_SHIFT) != 0;
- BOOL _nRet = FALSE;
-
- // ֵѡģʽ ---- 2011-07-16
- if (!_bCtrlKeyDown && !_bShiftKeyDown)
- {
- if (SelectRefLine(point_, nTolerance_))
- _nRet = TRUE;
- else
- _nRet = _SelectByPoint_Normal(point_, nTolerance_);
- }
- else if (_bCtrlKeyDown && !_bShiftKeyDown)
- {
- _nRet = _SelectByPoint_Increase(point_, nTolerance_);
- }
- else if (!_bCtrlKeyDown && _bShiftKeyDown)
- {
- _nRet = _SelectByPoint_Decrease(point_, nTolerance_);
- }
- else
- {
- ASSERT(_bCtrlKeyDown && _bShiftKeyDown);
- _nRet = _SelectByPoint_Reverse(point_, nTolerance_);
- }
-
- // ѡж ---- 2011-07-16
- GetSelectedCadObjects(true);
- GetSelectedRefLines(true);
- return _nRet;
- }
-
- // ѡ--ͨģʽ 㵽ѡе㵽ͼΣȥѡУ㲻оȥ
- // ѡС
- // õѡ͵ѡݲһ۲촰ΣȻݸͼ۲촰
- // ཻϵͼνзཻ࣬ͼȫԼͼ
- // ɸ ---- 2011-07-16
- BOOL CSelectTarget::_SelectByPoint_Normal(const DPOINT2& point_, double nTolerance_)
- {
- ASSERT(nTolerance_ >= 0.);
- ASSERT(m_pFileTarget);
-
- // ۲촰β ---- 2011-07-16
- DRECT _rcViewport(point_.x - nTolerance_, point_.y - nTolerance_,
- 2. * nTolerance_, 2. * nTolerance_);
- const CadObjectList* _plistCurrentGroup = m_pFileTarget->GetCurrentCadGroup()->GetObjectsList();
- ASSERT(_plistCurrentGroup);
- CadObjectList _listFullInside;
- CadObjectList _listPartInside;
- _DivideObjectsIntoThree(_plistCurrentGroup, _rcViewport, &_listFullInside, &_listPartInside, NULL);
-
- // ռǵͼμ ---- 2011-07-16
- CadObjectList _listTarget;
- const int _c_nMaxCount = 10; // FullInsideеN
- int _nCurCount = 0;
- for (CadObjectList::iterator _it = _listFullInside.begin(); _it != _listFullInside.end(); _it++)
- {
- CCadObject* _pCad = *_it;
- ASSERT(_pCad);
- _listTarget.push_back(_pCad);
- _nCurCount++;
-
- if (_nCurCount >= _c_nMaxCount)
- {
- break;
- }
- }
- for (CadObjectList::iterator _it = _listPartInside.begin(); _it != _listPartInside.end(); _it++)
- {
- CCadObject* _pCad = *_it;
- ASSERT(_pCad);
- _listTarget.push_back(_pCad);
- }
-
- // в ---- 2011-07-16
- CCadObject* _pCadSelected = nce::Hit(&_listTarget, point_, nTolerance_, NULL);
-
- // Carry out ---- 2011-07-16
- for (CadObjectList::const_iterator _it = _plistCurrentGroup->begin(); _it != _plistCurrentGroup->end(); _it++)
- {
- CCadObject* _pCad = *_it;
- ASSERT(_pCad);
- _pCad->Select(false);
- }
-
- if (_pCadSelected)
- {
- _pCadSelected->Select(true);
- }
-
- return (_pCadSelected != NULL);
- }
-
- // ѡ--ѡģʽ 㵽ѡе㵽ͼΣ㲻
- // ΪǼѡ뿼ǵǰδѡеͼΣѡеͼβǣͬǰõѡ
- // ͵ѡݲһ۲촰ΣȻݸͼ۲촰İཻ
- // ϵδѡͼνзཻ࣬ͼȫԼͼɸ
- // ---- 2011-07-16
- BOOL CSelectTarget::_SelectByPoint_Increase(const DPOINT2& point_, double nTolerance_)
- {
- ASSERT(nTolerance_ >= 0.);
- ASSERT(m_pFileTarget);
-
- // ۲촰β ---- 2011-07-16
- DRECT _rcViewport(point_.x - nTolerance_, point_.y - nTolerance_,
- 2. * nTolerance_, 2. * nTolerance_);
- const CadObjectList* _plistCurrentGroup = m_pFileTarget->GetCurrentCadGroup()->GetObjectsList();
- CCadGroup* _pRefLines = m_pFileTarget->GetCurrentRefLines();
- ASSERT(_plistCurrentGroup || _pRefLines);;
- CadObjectList _listFullInside;
- CadObjectList _listPartInside;
- _DivideObjectsIntoThree(_plistCurrentGroup, _rcViewport, &_listFullInside, &_listPartInside, NULL);
-
- // ռǵͼμ ---- 2011-07-16
- CadObjectList _listTarget;
- const int _c_nMaxCount = 10; // FullInsideеN
- int _nCurCount = 0;
- for (CadObjectList::iterator _it = _listFullInside.begin(); _it != _listFullInside.end(); _it++)
- {
- CCadObject* _pCad = *_it;
- ASSERT(_pCad);
- if (_pCad->IsSelected())
- {
- continue;
- }
-
- _listTarget.push_back(_pCad);
- _nCurCount++;
-
- if (_nCurCount >= _c_nMaxCount)
- {
- break;
- }
- }
- for (CadObjectList::iterator _it = _listPartInside.begin(); _it != _listPartInside.end(); _it++)
- {
- CCadObject* _pCad = *_it;
- ASSERT(_pCad);
- if (!_pCad->IsSelected())
- {
- _listTarget.push_back(_pCad);
- }
- }
- // в ---- 2011-07-16
- CCadObject* _pCadSelected = nce::Hit(&_listTarget, point_, nTolerance_, NULL);
- CCadObject* _pRefLinesSelected = Hit(_pRefLines, point_, nTolerance_);
- // ѡʱCadͲο߲ͬʱѡУCadӦвοߵѡ״̬
- // οУӦCadѡ״̬-----liangyan 2013-10-19
- int _nCount = _pRefLines->GetNumOfChild();
- if (_pCadSelected)
- {
- for (int _i = 0; _i < _nCount; _i++)
- _pRefLines->GetAt(_i)->Select(false);
- _pCadSelected->Select(true);
- }
- if(_pRefLinesSelected)
- {
- for (CadObjectList::const_iterator _iter = _plistCurrentGroup->begin(); _iter != _plistCurrentGroup->end(); _iter++)
- {
- if ((*_iter)->IsSelected())
- (*_iter)->Select(false);
- }
- _pRefLinesSelected->Select(true);
- }
- return (_pCadSelected != NULL|| _pRefLinesSelected != NULL);
- }
-
- // ѡ--ѡģʽ 㵽ȥѡе㵽ͼΣ㲻
- // ΪǼѡ뿼ǵǰѡеͼΣδѡеͼβǣͬǰõѡ
- // ͵ѡݲһ۲촰ΣȻݸͼ۲촰İཻ
- // ϵѡͼνзཻ࣬ͼȫԼͼɸ
- // ---- 2011-07-16
- BOOL CSelectTarget::_SelectByPoint_Decrease(const DPOINT2& point_, double nTolerance_)
- {
- ASSERT(nTolerance_ >= 0.);
- ASSERT(m_pFileTarget);
-
- // ۲촰β ---- 2011-07-16
- DRECT _rcViewport(point_.x - nTolerance_, point_.y - nTolerance_,
- 2. * nTolerance_, 2. * nTolerance_);
- const CadObjectList* _plistSelectedCadObjects = GetSelectedCadObjects();
- CCadGroup* _pRefLines = m_pFileTarget->GetCurrentRefLines();
- ASSERT(_plistSelectedCadObjects || _pRefLines);
- CadObjectList _listFullInside;
- CadObjectList _listPartInside;
- _DivideObjectsIntoThree(_plistSelectedCadObjects, _rcViewport, &_listFullInside, &_listPartInside, NULL);
-
- // ռǵͼμ ---- 2011-07-16
- CadObjectList _listTarget;
- const int _c_nMaxCount = 10; // FullInsideеN
- int _nCurCount = 0;
- for (CadObjectList::iterator _it = _listFullInside.begin(); _it != _listFullInside.end(); _it++)
- {
- CCadObject* _pCad = *_it;
- ASSERT(_pCad);
- _listTarget.push_back(_pCad);
- _nCurCount++;
-
- if (_nCurCount >= _c_nMaxCount)
- {
- break;
- }
- }
- for (CadObjectList::iterator _it = _listPartInside.begin(); _it != _listPartInside.end(); _it++)
- {
- CCadObject* _pCad = *_it;
- ASSERT(_pCad);
- _listTarget.push_back(_pCad);
- }
-
- // в ---- 2011-07-16
- CCadObject* _pCadSelected = nce::Hit(&_listTarget, point_, nTolerance_, NULL);
- // Carry out ---- 2011-07-16
- if (_pCadSelected)
- {
- _pCadSelected->Select(false);
- }
- // shiftοߵļѡ ---liangyan 2013-10-19
- CCadObject* _pRefLinesSelected = Hit(_pRefLines, point_, nTolerance_);
- if (_pRefLinesSelected)
- {
- _pRefLinesSelected->Select(false);
- }
- return (_pCadSelected != NULL || _pRefLinesSelected != NULL);
- }
-
- // ѡ--ѡģʽ 㵽תѡ״̬㲻
- // ͬǰõѡ͵ѡݲһ۲촰ΣȻݸͼ۲
- // İཻϵͼνзཻ࣬ͼȫԼ
- // ͼɸ
- // ---- 2011-07-16
- BOOL CSelectTarget::_SelectByPoint_Reverse(const DPOINT2& point_, double nTolerance_)
- {
- ASSERT(nTolerance_ >= 0.);
- ASSERT(m_pFileTarget);
-
- // ۲촰β ---- 2011-07-16
- DRECT _rcViewport(point_.x - nTolerance_, point_.y - nTolerance_,
- 2. * nTolerance_, 2. * nTolerance_);
- const CadObjectList* _plistCurrentGroup = m_pFileTarget->GetCurrentCadGroup()->GetObjectsList();
- CCadGroup* _pRefLines = m_pFileTarget->GetCurrentRefLines();
- ASSERT(_plistCurrentGroup || _pRefLines);
- CadObjectList _listFullInside;
- CadObjectList _listPartInside;
- _DivideObjectsIntoThree(_plistCurrentGroup, _rcViewport, &_listFullInside, &_listPartInside, NULL);
-
- // ռǵͼμ ---- 2011-07-16
- CadObjectList _listTarget;
- const int _c_nMaxCount = 10; // FullInsideеN
- int _nCurCount = 0;
- for (CadObjectList::iterator _it = _listFullInside.begin(); _it != _listFullInside.end(); _it++)
- {
- CCadObject* _pCad = *_it;
- ASSERT(_pCad);
- _listTarget.push_back(_pCad);
- _nCurCount++;
-
- if (_nCurCount >= _c_nMaxCount)
- {
- break;
- }
- }
- for (CadObjectList::iterator _it = _listPartInside.begin(); _it != _listPartInside.end(); _it++)
- {
- CCadObject* _pCad = *_it;
- ASSERT(_pCad);
- _listTarget.push_back(_pCad);
- }
-
- // в ---- 2011-07-16
- // ctrl + shiftѡʱCadͲο߲ͬʱѡУCadӦвοߵѡ״̬
- // οУӦCadѡ״̬-----liangyan 2013-10-19
- CCadObject* _pCadSelected = nce::Hit(&_listTarget, point_, nTolerance_, NULL);
- CCadObject* _pRefLinesSelected = Hit(_pRefLines, point_, nTolerance_);
- int _nCount = _pRefLines->GetNumOfChild();
- if (_pCadSelected)
- {
- for (int _i = 0; _i < _nCount; _i++)
- _pRefLines->GetAt(_i)->Select(false);
- _pCadSelected->Select(!_pCadSelected->IsSelected());
- }
- if(_pRefLinesSelected)
- {
- for (CadObjectList::const_iterator _iter = _plistCurrentGroup->begin(); _iter != _plistCurrentGroup->end(); _iter++)
- {
- if ((*_iter)->IsSelected())
- (*_iter)->Select(false);
- }
- _pRefLinesSelected->Select(!_pRefLinesSelected->IsSelected());
- }
- return (_pCadSelected != NULL || _pRefLinesSelected != NULL);
- }
-
- // ѡܵʵֺptFirst_ptSecond_ΪѡһԽߵ˵ Wanglou 2010-06-13
- UINT CSelectTarget::SelectByRect(UINT nFlags_, const DPOINT2& ptFirst_, const DPOINT2& ptSecond_)
- {
- // ѡѡвοߣһѲοߵѡ״̬ Wanglou 2010-08-21
- ASSERT(m_pFileTarget);
- CCadGroup* _pRefLines = m_pFileTarget->GetCurrentRefLines();
- ASSERT(_pRefLines);
- for (int _i = 0; _i < _pRefLines->GetNumOfChild(); _i++)
- {
- CCadObject* _pCad = _pRefLines->GetAt(_i);
- ASSERT(_pCad);
- _pCad->Select(false);
- }
-
- bool _bCtrlKeyDown = (nFlags_ & MK_CONTROL) != 0;
- bool _bShiftKeyDown = (nFlags_ & MK_SHIFT) != 0;
-
- // ֿѡģʽ ---- 2011-07-16
- UINT _nRet = 0;
- if (!_bCtrlKeyDown && !_bShiftKeyDown)
- {
- _nRet = _SelectByRect_Normal(ptFirst_, ptSecond_);
- }
- else if (_bCtrlKeyDown && !_bShiftKeyDown)
- {
- _nRet = _SelectByRect_Increase(ptFirst_, ptSecond_);
- }
- else if (!_bCtrlKeyDown && _bShiftKeyDown)
- {
- _nRet = _SelectByRect_Decrease(ptFirst_, ptSecond_);
- }
- else
- {
- ASSERT(_bCtrlKeyDown && _bShiftKeyDown);
- _nRet = _SelectByRect_Reverse(ptFirst_, ptSecond_);
- }
-
- // ѡж ---- 2011-07-16
- GetSelectedCadObjects(true);
- GetSelectedRefLines(true);
-
- return _nRet;
- }
-
- // ѡ--ͨģʽ ͼѡѡУȥѡС ---- 2011-07-16
- UINT CSelectTarget::_SelectByRect_Normal(const DPOINT2& ptFirst_, const DPOINT2& ptSecond_)
- {
- // ѡ ---- 2011-07-16
- ASSERT(m_pFileTarget);
- CCadGroup* _pCadGroup = m_pFileTarget->GetCurrentCadGroup();
- ASSERT(_pCadGroup);
- UINT _nRet = 0;
- for (int _i = 0; _i < _pCadGroup->GetNumOfChild(); _i++)
- {
- CCadObject* _pCadObject = _pCadGroup->GetAt(_i);
- ASSERT(_pCadObject);
- if (_SelectCadObjectByRect(_pCadObject, ptFirst_, ptSecond_))
- {
- _pCadObject->Select(true);
- _nRet++;
- }
- else
- {
- _pCadObject->Select(false);
- }
- }
-
- return _nRet;
- }
-
- // ѡ--ѡģʽ ͼѡѡУ ---- 2011-07-16
- UINT CSelectTarget::_SelectByRect_Increase(const DPOINT2& ptFirst_, const DPOINT2& ptSecond_)
- {
- // ѡ ---- 2011-07-16
- ASSERT(m_pFileTarget);
- CCadGroup* _pCadGroup = m_pFileTarget->GetCurrentCadGroup();
- ASSERT(_pCadGroup);
- UINT _nRet = 0;
- for (int _i = 0; _i < _pCadGroup->GetNumOfChild(); _i++)
- {
- CCadObject* _pCadObject = _pCadGroup->GetAt(_i);
- ASSERT(_pCadObject);
- if (_SelectCadObjectByRect(_pCadObject, ptFirst_, ptSecond_))
- {
- _pCadObject->Select(true);
- _nRet++;
- }
- }
-
- return _nRet;
- }
-
- // ѡ--ѡģʽ ͼѡȥѡУ ---- 2011-07-16
- UINT CSelectTarget::_SelectByRect_Decrease(const DPOINT2& ptFirst_, const DPOINT2& ptSecond_)
- {
- // ѡ ---- 2011-07-16
- ASSERT(m_pFileTarget);
- CCadGroup* _pCadGroup = m_pFileTarget->GetCurrentCadGroup();
- ASSERT(_pCadGroup);
- UINT _nRet = 0;
- for (int _i = 0; _i < _pCadGroup->GetNumOfChild(); _i++)
- {
- CCadObject* _pCadObject = _pCadGroup->GetAt(_i);
- ASSERT(_pCadObject);
- if (_SelectCadObjectByRect(_pCadObject, ptFirst_, ptSecond_))
- {
- _pCadObject->Select(false);
- _nRet++;
- }
- }
-
- return _nRet;
- }
-
- // ѡ--ѡģʽ ͼѡתѡ״̬ ---- 2011-07-16
- UINT CSelectTarget::_SelectByRect_Reverse(const DPOINT2& ptFirst_, const DPOINT2& ptSecond_)
- {
- // ѡ ---- 2011-07-16
- ASSERT(m_pFileTarget);
- CCadGroup* _pCadGroup = m_pFileTarget->GetCurrentCadGroup();
- ASSERT(_pCadGroup);
- UINT _nRet = 0;
- for (int _i = 0; _i < _pCadGroup->GetNumOfChild(); _i++)
- {
- CCadObject* _pCadObject = _pCadGroup->GetAt(_i);
- ASSERT(_pCadObject);
- if (_SelectCadObjectByRect(_pCadObject, ptFirst_, ptSecond_))
- {
- bool _bSelected = _pCadObject->IsSelected();
- _pCadObject->Select(!_bSelected);
- _nRet++;
- }
- }
-
- return _nRet;
- }
-
- UINT CSelectTarget::_SelectCadObjectByColore(int nColoreIndex_)
- {
- ASSERT(m_pFileTarget);
- ASSERT(nColoreIndex_ >= 0);
- CCadGroup* _pCadGroup = m_pFileTarget->GetCurrentCadGroup();
-
- UINT _nRet = 0;
- for (int _i = 0; _i < _pCadGroup->GetNumOfChild(); _i++)
- {
- CCadObject* _pCadObject = _pCadGroup->GetAt(_i);
- ASSERT(_pCadObject);
- if(_pCadObject->GetParamIndex() == nColoreIndex_)
- {
- _pCadObject->Select();
- _nRet++;
- }
- else
- {
- _pCadObject->Select(false);
- }
- }
-
- return _nRet;
- }
-
- LRESULT CSelectTarget::SelectByColore(WPARAM wParam_, LPARAM lParam_)
- {
- int _nIndex = (int)wParam_;
- ASSERT(_nIndex >= 0);
-
- return _SelectCadObjectByColore(_nIndex);
- }
-
- void CSelectTarget::OnSelectSimilar()
- {
- // ѡͼΣָһͼΣѡ߶ѡѡ鶼ܡ --- ƺ 2015-12-22
- const CadObjectList* _plistRefObjs = GetSelectedCadObjects();
- if (_plistRefObjs->size() != 1
- || (*_plistRefObjs->begin())->GetType() == cadgroup
- || (*_plistRefObjs->begin())->GetType() == cadtext)
- {
- return;
- }
-
- CCadObject* _pRefObj = *(_plistRefObjs->begin());
- switch(_pRefObj->GetType())
- {
- case caddot:
- {
- _SelectSimilarDot((CCadDot*)_pRefObj);
- break;
- }
- case cadline:
- {
- _SelectSimilarLine((CCadLine*)_pRefObj);
- break;
- }
-
- case cadcircle:
- {
- _SelectSimilarCircle((CCadCircle*)_pRefObj);
- break;
- }
-
- case cadarc:
- {
- _SelectSimilarArc((CCadArc*)_pRefObj);
- break;
- }
-
- case cadellipse:
- {
- _SelectSimilarEllipse((CCadEllipse*)_pRefObj);
- break;
- }
-
- case cadellipsearc:
- {
- _SelectSimilarEllipseArc((CCadEllipseArc*)_pRefObj);
- break;
- }
-
- case cadrectangle:
- {
- _SelectSimilarRectangle((CCadRectangle*)_pRefObj);
- break;
- }
-
- case cadpolygon:
- {
- _SelectSimilarPolygon((CCadPolygon*)_pRefObj);
- break;
- }
-
- case cadstar:
- {
- _SelectSimilarStar((CCadStar*)_pRefObj);
- break;
- }
-
- case cadpolyline:
- {
- _SelectSimilarPolyline((CCadPolyline*)_pRefObj);
- break;
- }
-
- default:
- {
- // do noting
- }
- }
-
- UpdateAllVisions();
- }
-
- void CSelectTarget::OnUpdateSelectSimilar(CCmdUI* pCmdUI_)
- {
- const CadObjectList* _pSelectObjs = GetSelectedCadObjects();
- pCmdUI_->Enable(_pSelectObjs && _pSelectObjs->size() > 0);
- }
-
- // еĵ㶼Ƶġ ---- ƺ 2015-12-22
- void CSelectTarget::_SelectSimilarDot(const nce::CCadDot* pRefDot_)
- {
- if (!pRefDot_)
- {
- ASSERT(FALSE);
- return;
- }
-
- ASSERT(m_pFileTarget);
- CCadGroup* _pCadGroup = m_pFileTarget->GetCurrentCadGroup();
- UINT _nRet = 0;
- for (int _i = 0; _i < _pCadGroup->GetNumOfChild(); _i++)
- {
- CCadObject* _pCadObject = _pCadGroup->GetAt(_i);
- ASSERT(_pCadObject);
- // Լ϶ԼǰÿIDΨһġ ---- ƺ 2016-01-07
- if (_pCadObject->GetID() == pRefDot_->GetID())
- {
- _pCadObject->Select(true);
- continue;
- }
-
- if(_pCadObject->GetType() == caddot)
- {
- _pCadObject->Select();
- }
- else
- {
- _pCadObject->Select(false);
- }
- }
- }
-
- // ƽҳȵΪͼΡ ---- ƺ 2015-12-22
- void CSelectTarget::_SelectSimilarLine(const nce::CCadLine* pRefLine_)
- {
- if (!pRefLine_)
- {
- ASSERT(FALSE);
- return;
- }
-
- ASSERT(m_pFileTarget);
- CCadGroup* _pCadGroup = m_pFileTarget->GetCurrentCadGroup();
- for (int _i = 0; _i < _pCadGroup->GetNumOfChild(); _i++)
- {
- CCadObject* _pCadObject = _pCadGroup->GetAt(_i);
- ASSERT(_pCadObject);
- if(_pCadObject->GetType() != cadline)
- {
- _pCadObject->Select(false);
- continue;
- }
-
- // Լ϶ԼǰÿIDΨһġ ---- ƺ 2016-01-07
- if (_pCadObject->GetID() == pRefLine_->GetID())
- {
- _pCadObject->Select(true);
- continue;
- }
-
- CCadLine* _pLine = (CCadLine*)_pCadObject;
- DPOINT2 _ptV1 = DPOINT2(_pLine->GetStartPoint() - _pLine->GetEndPoint());
- DPOINT2 _ptV2 = DPOINT2(pRefLine_->GetStartPoint() - pRefLine_->GetEndPoint());
- if (DOUBLE_EQU_ZERO(_ptV1.x * _ptV2.y - _ptV1.y * _ptV2.x)
- && DOUBLE_ROUGHEQU(_ptV1.GetLength(), _ptV2.GetLength()))
- {
- _pLine->Select();
- }
- else
- {
- _pLine->Select(false);
- }
- }
- }
-
- // 뾶ȵԲΪͼΡ ---- ƺ 2015-12-22
- void CSelectTarget::_SelectSimilarCircle(const nce::CCadCircle* pRefCircle_)
- {
- if (!pRefCircle_)
- {
- ASSERT(FALSE);
- return;
- }
-
- ASSERT(m_pFileTarget);
- CCadGroup* _pCadGroup = m_pFileTarget->GetCurrentCadGroup();
- for (int _i = 0; _i < _pCadGroup->GetNumOfChild(); _i++)
- {
- CCadObject* _pCadObject = _pCadGroup->GetAt(_i);
- ASSERT(_pCadObject);
- if(_pCadObject->GetType() != cadcircle)
- {
- _pCadObject->Select(false);
- continue;
- }
-
- // Լ϶ԼǰÿIDΨһġ ---- ƺ 2016-01-07
- if (_pCadObject->GetID() == pRefCircle_->GetID())
- {
- _pCadObject->Select(true);
- continue;
- }
-
- CCadCircle* _pCircle = (CCadCircle*)_pCadObject;
- if (DOUBLE_ROUGHEQU(_pCircle->GetRadius(), pRefCircle_->GetRadius()))
- {
- _pCircle->Select(true);
- }
- else
- {
- _pCircle->Select(false);
- }
- }
- }
-
- // 뾶ȳȵԲΪͼΡ ---- ƺ 2015-12-22
- void CSelectTarget::_SelectSimilarArc(const nce::CCadArc* pRefArc_)
- {
- if (!pRefArc_)
- {
- ASSERT(FALSE);
- return;
- }
-
- ASSERT(m_pFileTarget);
- CCadGroup* _pCadGroup = m_pFileTarget->GetCurrentCadGroup();
- for (int _i = 0; _i < _pCadGroup->GetNumOfChild(); _i++)
- {
- CCadObject* _pCadObject = _pCadGroup->GetAt(_i);
- ASSERT(_pCadObject);
- if(_pCadObject->GetType() != cadarc)
- {
- _pCadObject->Select(false);
- continue;
- }
-
- // Լ϶ԼǰÿIDΨһġ ---- ƺ 2016-01-07
- if (_pCadObject->GetID() == pRefArc_->GetID())
- {
- _pCadObject->Select(true);
- continue;
- }
-
- CCadArc* _pArc = (CCadArc*)_pCadObject;
- if (DOUBLE_ROUGHEQU(_pArc->GetRadius(), pRefArc_->GetRadius())
- && DOUBLE_ROUGHEQU(_pArc->GetLength(), pRefArc_->GetLength()))
- {
- _pArc->Select(true);
- }
- else
- {
- _pArc->Select(false);
- }
- }
- }
-
- // Ͷ̰ȵԲΪͼΡ ---- ƺ 2015-12-22
- void CSelectTarget::_SelectSimilarEllipse(const nce::CCadEllipse* pRefEllipse_)
- {
- if (!pRefEllipse_)
- {
- ASSERT(FALSE);
- return;
- }
-
- ASSERT(m_pFileTarget);
- CCadGroup* _pCadGroup = m_pFileTarget->GetCurrentCadGroup();
- for (int _i = 0; _i < _pCadGroup->GetNumOfChild(); _i++)
- {
- CCadObject* _pCadObject = _pCadGroup->GetAt(_i);
- ASSERT(_pCadObject);
- if(_pCadObject->GetType() != cadellipse)
- {
- _pCadObject->Select(false);
- continue;
- }
-
- // Լ϶ԼǰÿIDΨһġ ---- ƺ 2016-01-07
- if (_pCadObject->GetID() == pRefEllipse_->GetID())
- {
- _pCadObject->Select(true);
- continue;
- }
-
- CCadEllipse* _pEllipse = (CCadEllipse*)_pCadObject;
- if ((DOUBLE_ROUGHEQU(_pEllipse->GetLongRadius(), pRefEllipse_->GetLongRadius())
- && DOUBLE_ROUGHEQU(_pEllipse->GetShortRadius(), pRefEllipse_->GetShortRadius())))
- {
- _pEllipse->Select(true);
- }
- else
- {
- _pEllipse->Select(false);
- }
- }
- }
-
- // ᡢ̰ᡢбǡʼǺֹȵԲΪͼΡ ---- ƺ 2015-12-22
- void CSelectTarget::_SelectSimilarEllipseArc(const nce::CCadEllipseArc* pRefEllipseArc_)
- {
- if (!pRefEllipseArc_)
- {
- ASSERT(FALSE);
- return;
- }
-
- ASSERT(m_pFileTarget);
- CCadGroup* _pCadGroup = m_pFileTarget->GetCurrentCadGroup();
- for (int _i = 0; _i < _pCadGroup->GetNumOfChild(); _i++)
- {
- CCadObject* _pCadObject = _pCadGroup->GetAt(_i);
- ASSERT(_pCadObject);
- if(_pCadObject->GetType() != cadellipsearc)
- {
- _pCadObject->Select(false);
- continue;
- }
-
- // Լ϶ԼǰÿIDΨһġ ---- ƺ 2016-01-07
- if (_pCadObject->GetID() == pRefEllipseArc_->GetID())
- {
- _pCadObject->Select(true);
- continue;
- }
-
- bool _bSelect = false;
- CCadEllipseArc* _pEllipseArc = (CCadEllipseArc*)_pCadObject;
- if (DOUBLE_ROUGHEQU(_pEllipseArc->GetLongRadius(), pRefEllipseArc_->GetLongRadius())
- && DOUBLE_ROUGHEQU(_pEllipseArc->GetShortRadius(), pRefEllipseArc_->GetShortRadius())
- && DOUBLE_ROUGHEQU(_pEllipseArc->GetCentralAngle(), pRefEllipseArc_->GetCentralAngle()))
- {
- if (DOUBLE_ROUGHEQU(_pEllipseArc->GetStartAngle(), pRefEllipseArc_->GetStartAngle())
- && _pEllipseArc->IsNormalDir() == pRefEllipseArc_->IsNormalDir())
- {
- _bSelect = true;
- }
- if (DOUBLE_ROUGHEQU(_pEllipseArc->GetEndAngle(), pRefEllipseArc_->GetStartAngle())
- && _pEllipseArc->IsNormalDir() == !pRefEllipseArc_->IsNormalDir())
- {
- _bSelect = true;
- }
-
- double _nStartAngle = _pEllipseArc->GetStartAngle() + ncmath::c_nPIE;
- if (_nStartAngle >= 2 * ncmath::c_nPIE)
- {
- _nStartAngle -= 2 * ncmath::c_nPIE;
- }
- if (DOUBLE_ROUGHEQU(_nStartAngle, pRefEllipseArc_->GetStartAngle())
- && _pEllipseArc->IsNormalDir() == pRefEllipseArc_->IsNormalDir())
- {
- _bSelect = true;
- }
- if (DOUBLE_ROUGHEQU(_nStartAngle, pRefEllipseArc_->GetEndAngle())
- && _pEllipseArc->IsNormalDir() == !pRefEllipseArc_->IsNormalDir())
- {
- _bSelect = true;
- }
-
- _nStartAngle = 2 * ncmath::c_nPIE - _pEllipseArc->GetStartAngle();
- if (_nStartAngle >= 2 * ncmath::c_nPIE)
- {
- _nStartAngle -= 2 * ncmath::c_nPIE;
- }
- if (DOUBLE_ROUGHEQU(_nStartAngle, pRefEllipseArc_->GetStartAngle())
- && _pEllipseArc->IsNormalDir() == !pRefEllipseArc_->IsNormalDir())
- {
- _bSelect = true;
- }
- if (DOUBLE_ROUGHEQU(_nStartAngle, pRefEllipseArc_->GetEndAngle())
- && _pEllipseArc->IsNormalDir() == pRefEllipseArc_->IsNormalDir())
- {
- _bSelect = true;
- }
-
- _nStartAngle += ncmath::c_nPIE;
- if (_nStartAngle >= 2 * ncmath::c_nPIE)
- {
- _nStartAngle -= 2 * ncmath::c_nPIE;
- }
- if (DOUBLE_ROUGHEQU(_nStartAngle, pRefEllipseArc_->GetStartAngle())
- && _pEllipseArc->IsNormalDir() == !pRefEllipseArc_->IsNormalDir())
- {
- _bSelect = true;
- }
- if (DOUBLE_ROUGHEQU(_nStartAngle, pRefEllipseArc_->GetEndAngle())
- && _pEllipseArc->IsNormalDir() == pRefEllipseArc_->IsNormalDir())
- {
- _bSelect = true;
- }
- }
- _pEllipseArc->Select(_bSelect);
- }
- }
-
- // ͿȵľΪͼΡ ---- ƺ 2015-12-22
- void CSelectTarget::_SelectSimilarRectangle(const nce::CCadRectangle* pRefRectangle_)
- {
- if (!pRefRectangle_)
- {
- ASSERT(FALSE);
- return;
- }
-
- ASSERT(m_pFileTarget);
- CCadGroup* _pCadGroup = m_pFileTarget->GetCurrentCadGroup();
- for (int _i = 0; _i < _pCadGroup->GetNumOfChild(); _i++)
- {
- CCadObject* _pCadObject = _pCadGroup->GetAt(_i);
- ASSERT(_pCadObject);
- if(_pCadObject->GetType() != cadrectangle)
- {
- _pCadObject->Select(false);
- continue;
- }
-
- // Լ϶ԼǰÿIDΨһġ ---- ƺ 2016-01-07
- if (_pCadObject->GetID() == pRefRectangle_->GetID())
- {
- _pCadObject->Select(true);
- continue;
- }
-
- CCadRectangle* _pRectangle = (CCadRectangle*)_pCadObject;
- if ((DOUBLE_ROUGHEQU(_pRectangle->GetWidth(), pRefRectangle_->GetWidth())
- && DOUBLE_ROUGHEQU(_pRectangle->GetHeitht(), pRefRectangle_->GetHeitht()))
- || (DOUBLE_ROUGHEQU(_pRectangle->GetWidth(), pRefRectangle_->GetHeitht())
- && DOUBLE_ROUGHEQU(_pRectangle->GetHeitht(), pRefRectangle_->GetWidth())))
- {
- _pRectangle->Select(true);
- }
- else
- {
- _pRectangle->Select(false);
- }
- }
- }
-
- // Բ뾶ڽԲ뾶ͬȵΪͼΡ ---- ƺ 2015-12-22
- void CSelectTarget::_SelectSimilarPolygon(const nce::CCadPolygon* pRefPolygon_)
- {
- if (!pRefPolygon_)
- {
- ASSERT(FALSE);
- return;
- }
-
- ASSERT(m_pFileTarget);
- CCadGroup* _pCadGroup = m_pFileTarget->GetCurrentCadGroup();
- for (int _i = 0; _i < _pCadGroup->GetNumOfChild(); _i++)
- {
- CCadObject* _pCadObject = _pCadGroup->GetAt(_i);
- ASSERT(_pCadObject);
- if(_pCadObject->GetType() != cadpolygon)
- {
- _pCadObject->Select(false);
- continue;
- }
-
- // Լ϶ԼǰÿIDΨһġ ---- ƺ 2016-01-07
- if (_pCadObject->GetID() == pRefPolygon_->GetID())
- {
- _pCadObject->Select(true);
- continue;
- }
-
- CCadPolygon* _pPolygon = (CCadPolygon*)_pCadObject;
- if (_pPolygon->GetNumOfVertexes() == pRefPolygon_->GetNumOfVertexes()
- && DOUBLE_ROUGHEQU(_pPolygon->GetCircumRadius(), pRefPolygon_->GetCircumRadius())
- && DOUBLE_ROUGHEQU(_pPolygon->GetInscribedRadius(), pRefPolygon_->GetInscribedRadius()))
- {
- _pPolygon->Select(true);
- }
- else
- {
- _pPolygon->Select(false);
- }
- }
- }
-
- // Բ뾶ڽԲ뾶ͬȵΪͼΡ ---- ƺ 2015-12-22
- void CSelectTarget::_SelectSimilarStar(const nce::CCadStar* pRefStar_)
- {
- if (!pRefStar_)
- {
- ASSERT(FALSE);
- return;
- }
-
- ASSERT(m_pFileTarget);
- CCadGroup* _pCadGroup = m_pFileTarget->GetCurrentCadGroup();
- for (int _i = 0; _i < _pCadGroup->GetNumOfChild(); _i++)
- {
- CCadObject* _pCadObject = _pCadGroup->GetAt(_i);
- ASSERT(_pCadObject);
- if(_pCadObject->GetType() != cadstar)
- {
- _pCadObject->Select(false);
- continue;
- }
-
- // Լ϶ԼǰÿIDΨһġ ---- ƺ 2016-01-07
- if (_pCadObject->GetID() == pRefStar_->GetID())
- {
- _pCadObject->Select(true);
- continue;
- }
-
- CCadStar* _pStar = (CCadStar*)_pCadObject;
- if (_pStar->GetNumOfVertexes() == pRefStar_->GetNumOfVertexes()
- && DOUBLE_ROUGHEQU(_pStar->GetCircumRadius(), pRefStar_->GetCircumRadius())
- && DOUBLE_ROUGHEQU(_pStar->GetInscribedRadius(), pRefStar_->GetInscribedRadius()))
- {
- _pStar->Select(true);
- }
- else
- {
- _pStar->Select(false);
- }
- }
- }
-
- // һģһĶ߲ơ ---- ƺ 2015-12-22
- void CSelectTarget::_SelectSimilarPolyline(const nce::CCadPolyline* pRefPolyline_)
- {
- if (!pRefPolyline_)
- {
- ASSERT(FALSE);
- return;
- }
-
- ASSERT(m_pFileTarget);
- CCadGroup* _pCadGroup = m_pFileTarget->GetCurrentCadGroup();
- for (int _i = 0; _i < _pCadGroup->GetNumOfChild(); _i++)
- {
- CCadObject* _pCadObject = _pCadGroup->GetAt(_i);
- ASSERT(_pCadObject);
- if(_pCadObject->GetType() != cadpolyline)
- {
- _pCadObject->Select(false);
- continue;
- }
-
- // Լ϶ԼǰÿIDΨһġ ---- ƺ 2016-01-07
- if (_pCadObject->GetID() == pRefPolyline_->GetID())
- {
- _pCadObject->Select(true);
- continue;
- }
-
- // Ƚϡ
- CCadPolyline* _pPolyline = (CCadPolyline*)_pCadObject;
- if (_pPolyline->GetNodeCount() != pRefPolyline_->GetNodeCount()
- || !DOUBLE_ROUGHEQU(_pPolyline->GetLength(), pRefPolyline_->GetLength()))
- {
- _pPolyline->Select(false);
- continue;
- }
-
- if (_pPolyline->GetNodeCount() == 1)
- {
- bool _bSelect = false;
- CCadPolyline::ARCNODE _node = _pPolyline->GetAt(0);
- CCadPolyline::ARCNODE _nodeRef = pRefPolyline_->GetAt(0);
- if (!DOUBLE_EQU_ZERO(_node.nBulge)
- && DOUBLE_ROUGHEQU(_node.nBulge, _nodeRef.nBulge)
- && DOUBLE_ROUGHEQU(_pPolyline->GetLength(), pRefPolyline_->GetLength()))
- {
- _bSelect = true;
- }
-
- DPOINT2 _ptV1 = _node.ptEnd - _pPolyline->GetStartPoint();
- DPOINT2 _ptV2 = _nodeRef.ptEnd - pRefPolyline_->GetStartPoint();
- if (DOUBLE_EQU_ZERO(_node.nBulge)
- && DOUBLE_ROUGHEQU(_node.nBulge, _nodeRef.nBulge)
- && DOUBLE_EQU_ZERO(_ptV1.x * _ptV2.y - _ptV1.y * _ptV2.x))
- {
- _bSelect = true;
- }
- _pPolyline->Select(_bSelect);
- continue;
- }
-
- // ڽϸıȶ֮ǰҪȷϴжͼԭͼελǷǺϣ
- // Ƿִλֻзͼλ֣˳ߵ ---- ˼ 2017-03-17
- bool _bSelect;
- CCadPolyline _RefPolylineCopy = *pRefPolyline_; // ԭָ洢Ķconst͵ģһԭߵ
- int _nCount = _pPolyline->GetNodeCount();
- int _nDeviationRange = 1;
- // ǷǷͼξͲڴλˣֻǷߵƫƷΧΪ1
- if(_pPolyline->IsClose())
- {
- _nDeviationRange = _nCount;
- }
- for(int _nDeviation = 0; _nDeviation < _nDeviationRange; ++_nDeviation)
- {
- _bSelect = true;
- DPOINT2 _ptStart = _pPolyline->GetStartPoint();
- DPOINT2 _ptStartRef;
- if(_nDeviation == 0)
- {
- _ptStartRef = _RefPolylineCopy.GetStartPoint();
- }
- else
- {
- _ptStartRef = (_RefPolylineCopy.GetAt(_nDeviation - 1)).ptEnd;
- }
- // һƾĿأδ֪Ϊ0Ϊ1رΪ2
- int _nMirror = 0;
- for(int _i = 1; _i < _nCount; _i++)
- {
- CCadPolyline::ARCNODE _nodeFirst = _pPolyline->GetAt(_i - 1);
- CCadPolyline::ARCNODE _nodeSecond = _pPolyline->GetAt(_i);
-
- CCadPolyline::ARCNODE _nodeRefFirst = _RefPolylineCopy.GetAt((_i - 1 + _nDeviation) % _nCount);
- CCadPolyline::ARCNODE _nodeRefSecond = _RefPolylineCopy.GetAt((_i + _nDeviation) % _nCount);
-
- // ֵȣǿ϶
- if (!DOUBLE_ROUGHEQU(abs(_nodeFirst.nBulge), abs(_nodeRefFirst.nBulge)))
- {
- _bSelect = false;
- break;
- }
-
- // ״̬δ֪ʱ־ֵȵ״ʱӦΪ෴شȣر
- // ߶Ϊ0жϳDzǾ_nMirrorΪ0䣬һѭж
- if(_nMirror == 0)
- {
- if(_nodeFirst.nBulge * _nodeRefFirst.nBulge < 0)
- {
- _nMirror = 1;
- }
-
- if(_nodeFirst.nBulge * _nodeRefFirst.nBulge > 0)
- {
- _nMirror = 2;
- }
- continue;
- }
-
- // ھشʱӦȲȣ
- else if(_nMirror == 1)
- {
- if(_nodeFirst.nBulge * _nodeRefFirst.nBulge > 0)
- {
- _bSelect = false;
- break;
- }
- }
- // ھعرյʱӦȲΪһΪ෴
- else
- {
- if(_nodeFirst.nBulge * _nodeRefFirst.nBulge < 0)
- {
- _bSelect = false;
- break;
- }
- }
-
- DPOINT2 _ptFirstV = _nodeFirst.ptEnd - _ptStart;
- DPOINT2 _ptSecondV = _nodeSecond.ptEnd - _nodeFirst.ptEnd;
- DPOINT2 _ptFirstVRef = _nodeRefFirst.ptEnd - _ptStartRef;
- DPOINT2 _ptSecondVRef = _nodeRefSecond.ptEnd - _nodeRefFirst.ptEnd;
- if (!DOUBLE_ROUGHEQU(_ptFirstV.GetLength(), _ptFirstVRef.GetLength())
- || !DOUBLE_ROUGHEQU(_ptSecondV.GetLength(), _ptSecondVRef.GetLength()))
- {
- _bSelect = false;
- break;
- }
-
- if (!DOUBLE_ROUGHEQU(ncmath::D2GetIncludeAngle(_ptFirstV, _ptSecondV), ncmath::D2GetIncludeAngle(_ptFirstVRef, _ptSecondVRef)))
- {
- _bSelect = false;
- break;
- }
- _ptStart = _nodeFirst.ptEnd;
- _ptStartRef = _nodeRefFirst.ptEnd;
- }
- if(_bSelect)
- {
- break;
- }
- }
-
- // һζԱȲǺϣжͼεķߵһκٱȶ ---- ˼ 2017-03-17
- if(!_bSelect)
- {
- _RefPolylineCopy.ReverseDir();
- for(int _nDeviation = 0; _nDeviation < _nCount; ++_nDeviation)
- {
- _bSelect = true;
- DPOINT2 _ptStart = _pPolyline->GetStartPoint();
- DPOINT2 _ptStartRef;
- if(_nDeviation == 0)
- {
- _ptStartRef = _RefPolylineCopy.GetStartPoint();
- }
- else
- {
- _ptStartRef = (_RefPolylineCopy.GetAt(_nDeviation - 1)).ptEnd;
- }
- // һƾĿأδ֪Ϊ0Ϊ1رΪ2
- int _nMirror = 0;
- for(int _i = 1; _i < _nCount; _i++)
- {
- CCadPolyline::ARCNODE _nodeFirst = _pPolyline->GetAt(_i - 1);
- CCadPolyline::ARCNODE _nodeSecond = _pPolyline->GetAt(_i);
-
- CCadPolyline::ARCNODE _nodeRefFirst = _RefPolylineCopy.GetAt((_i - 1 + _nDeviation) % _nCount);
- CCadPolyline::ARCNODE _nodeRefSecond = _RefPolylineCopy.GetAt((_i + _nDeviation) % _nCount);
-
-
- // ֵȣǿ϶
- if (!DOUBLE_ROUGHEQU(abs(_nodeFirst.nBulge), abs(_nodeRefFirst.nBulge)))
- {
- _bSelect = false;
- break;
- }
-
- // ״̬δ֪ʱ־ֵȵ״ʱӦΪ෴شȣر
- // ߶Ϊ0жϳDzǾ_nMirrorΪ0䣬һѭж
- if(_nMirror == 0)
- {
- if(_nodeFirst.nBulge * _nodeRefFirst.nBulge < 0)
- {
- _nMirror = 1;
- }
-
- if(_nodeFirst.nBulge * _nodeRefFirst.nBulge > 0)
- {
- _nMirror = 2;
- }
- continue;
- }
-
- // ھشʱӦȲȣ
- else if(_nMirror == 1)
- {
- if(_nodeFirst.nBulge * _nodeRefFirst.nBulge > 0)
- {
- _bSelect = false;
- break;
- }
- }
- // ھعرյʱӦȲΪһΪ෴
- else
- {
- if(_nodeFirst.nBulge * _nodeRefFirst.nBulge < 0)
- {
- _bSelect = false;
- break;
- }
- }
-
- DPOINT2 _ptFirstV = _nodeFirst.ptEnd - _ptStart;
- DPOINT2 _ptSecondV = _nodeSecond.ptEnd - _nodeFirst.ptEnd;
- DPOINT2 _ptFirstVRef = _nodeRefFirst.ptEnd - _ptStartRef;
- DPOINT2 _ptSecondVRef = _nodeRefSecond.ptEnd - _nodeRefFirst.ptEnd;
- if (!DOUBLE_ROUGHEQU(_ptFirstV.GetLength(), _ptFirstVRef.GetLength())
- || !DOUBLE_ROUGHEQU(_ptSecondV.GetLength(), _ptSecondVRef.GetLength()))
- {
- _bSelect = false;
- break;
- }
-
- if (!DOUBLE_ROUGHEQU(ncmath::D2GetIncludeAngle(_ptFirstV, _ptSecondV), ncmath::D2GetIncludeAngle(_ptFirstVRef, _ptSecondVRef)))
- {
- _bSelect = false;
- break;
- }
- _ptStart = _nodeFirst.ptEnd;
- _ptStartRef = _nodeRefFirst.ptEnd;
- }
- if(_bSelect)
- {
- break;
- }
- }
- }
- _pPolyline->Select(_bSelect);
- }
- }
-
- // ѡǷѡͼΣѡͷѡ ---- DingQiang 2011-12-9
- BOOL CSelectTarget::_SelectCadObjectByRect(const nce::CCadObject* pCadObject_,
- const DPOINT2& ptFirst_,
- const DPOINT2& ptSecond_)
- {
- ASSERT(pCadObject_);
- DRECT _rcSelect(ptFirst_, ptSecond_); // ѡ
- DRECT _rcBound = pCadObject_->GetBoundRect(); // ͼӾ
-
- // ѡȫΧͼΣѡTRUE ---- DingQiang 2011-12-9
- if (_rcSelect.Contains(_rcBound))
- {
- return TRUE;
- }
-
- // ѡûȫΧͼΣѡΪѡFALSE ---- DingQiang 2011-12-9
- if (ptSecond_.x >= ptFirst_.x)
- {
- return FALSE;
- }
-
- // ΪѡжѡͼεӾǷཻཻFALSE,
- // ˮƽ߶κʹֱ߶Ӿѡһûн㣬ʹһ㼸
- // ԵijȣԷжѡǷཻ ---- DingQiang 2011-12-9
- if (_rcBound.width == 0)
- {
- _rcBound.width = 1.0e-9;
- }
-
- if (_rcBound.height == 0)
- {
- _rcBound.height = 1.0e-9;
- }
-
- if (!_rcSelect.Intersect(_rcBound))
- {
- return FALSE;
- }
-
- // ΪѡѡͼεӾཻжѡǷͼཻ
- // ѡιһCADΣٵGetIntersectionжǷͼ
- // н㡣 ---- DingQiang 2011-12-9
- DPOINT2 _ptPoint0 = ptFirst_;
- DPOINT2 _ptPoint1(ptFirst_.x, ptSecond_.y);
- DPOINT2 _ptPoint2 = ptSecond_;
- DPOINT2 _ptPoint3(ptSecond_.x, ptFirst_.y);
- CCadRectangle _CadRectangle(_ptPoint0, _ptPoint1, _ptPoint2, _ptPoint3);
-
- int _nIntersectionCounts = GetIntersection(&_CadRectangle, pCadObject_, NULL);
- return (_nIntersectionCounts > 0);
- }
-
- BOOL CSelectTarget::SelectRefLine(const DPOINT2& point_, double nTolerance_)
- {
- ASSERT(m_pFileTarget);
- CCadGroup* _pRefLines = m_pFileTarget->GetCurrentRefLines();
- if (!_pRefLines || _pRefLines->IsEmpty())
- return FALSE;
-
- // οֻѡһѡڶοߵѡ״̬ Wanglou 2010-08-21
- int _nCount = _pRefLines->GetNumOfChild();
- for (int _i = 0; _i < _nCount; _i++)
- _pRefLines->GetAt(_i)->Select(false);
-
- CCadObject* _pCadObject = Hit(_pRefLines, point_, nTolerance_);
- if (!_pCadObject)
- return FALSE;
-
- // вο߶Ϊֱ,ѡ˲οߣеCadѡ״̬ Wanglou 2010-08-21
- ASSERT(_pCadObject->GetType() == cadbeeline);
- ClearSelect();
- _pCadObject->Select(true);
- return TRUE;
- }
-
- // ȫѡ
- void CSelectTarget::SelectAll()
- {
- ASSERT(m_pFileTarget);
- CCadGroup* _pCadGroup = m_pFileTarget->GetCurrentCadGroup();
- if (_pCadGroup->IsEmpty())
- return;
- const CadObjectList* _pCadObjList = _pCadGroup->GetObjectsList();
- bool _bChanged = false;
-
- // ---- DingQiang 2013-09-23
- m_listSelectedCadObjects.clear();
- for (CadObjectList::const_iterator _iter = _pCadObjList->begin(); _iter != _pCadObjList->end(); _iter++)
- {
- m_listSelectedCadObjects.push_back(*_iter);
- if (!(*_iter)->IsSelected())
- {
- (*_iter)->Select(true);
- _bChanged = true;
- }
- }
- }
-
- // ѡ
- void CSelectTarget::SelectRev()
- {
- // תѡ״̬ ---- 2011-07-18
- ASSERT(m_pFileTarget);
- CCadGroup* _pCadGroup = m_pFileTarget->GetCurrentCadGroup();
- for (int _i = 0; _i < _pCadGroup->GetNumOfChild(); _i++)
- {
- CCadObject* _pCad = _pCadGroup->GetAt(_i);
- ASSERT(_pCad);
- bool _bSelected = _pCad->IsSelected();
- _pCad->Select(!_bSelected);
- }
-
- // ѡж ---- 2011-07-18
- GetSelectedCadObjects(true);
- }
-
- //
- void CSelectTarget::ClearSelect()
- {
- ASSERT(m_pFileTarget);
- CCadGroup* _pCadGroup = m_pFileTarget->GetCurrentCadGroup();
- if (_pCadGroup && !_pCadGroup->IsEmpty())
- {
- // Cadѡ״̬
- const CadObjectList* _pCadObjList = _pCadGroup->GetObjectsList();
- for (CadObjectList::const_iterator _iter = _pCadObjList->begin(); _iter != _pCadObjList->end(); _iter++)
- {
- if ((*_iter)->IsSelected())
- (*_iter)->Select(false);
- }
- m_listSelectedCadObjects.clear();
- }
-
- // οߵѡ״̬
- CCadGroup* _pRefLines = m_pFileTarget->GetCurrentRefLines();
- if (_pRefLines && !_pRefLines->IsEmpty())
- {
- int _nCount = _pRefLines->GetNumOfChild();
- for (int _i = 0; _i < _nCount; _i++)
- _pRefLines->GetAt(_i)->Select(false);
- }
- }
-
- const CadObjectList* CSelectTarget::GetSelectedCadObjects(bool bArbitrary_/* = false*/)
- {
- // ΪǿƸ£FileTargetռ ---- 2011-06-10
- if (bArbitrary_)
- {
- m_listSelectedCadObjects.clear();
-
- ASSERT(m_pFileTarget);
- CCadGroup* _pCadGroup = m_pFileTarget->GetCurrentCadGroup();
- ASSERT(_pCadGroup);
- int _nCount = _pCadGroup->GetNumOfChild();
- for (int _i = 0; _i < _nCount; _i++)
- {
- CCadObject* _pCadObject = _pCadGroup->GetAt(_i);
- ASSERT(_pCadObject);
- if (_pCadObject->IsSelected())
- {
- m_listSelectedCadObjects.push_back(_pCadObject);
- }
- }
- }
-
- return &m_listSelectedCadObjects;
- }
-
- const nce::CadObjectList* CSelectTarget::GetSelectedRefLines(bool bArbitrary_/* = false*/)
- {
- // ΪǿƸ£FileTargetռ ---- 2011-06-10
- if (bArbitrary_)
- {
- m_listSelectedRefLines.clear();
-
- ASSERT(m_pFileTarget);
- CCadGroup* _pCadGroup = m_pFileTarget->GetCurrentRefLines();
- ASSERT(_pCadGroup);
- int _nCount = _pCadGroup->GetNumOfChild();
- for (int _i = 0; _i < _nCount; _i++)
- {
- CCadObject* _pCadObject = _pCadGroup->GetAt(_i);
- ASSERT(_pCadObject);
- if (_pCadObject->IsSelected())
- {
- m_listSelectedRefLines.push_back(_pCadObject);
- }
- }
- }
-
- return &m_listSelectedRefLines;
- }
-
- void CSelectTarget::Reset()
- {
- m_ptLButtonDown = DPOINT2(c_nINVALID_DOUBLE, c_nINVALID_DOUBLE);
- m_ptTemp = DPOINT2(c_nINVALID_DOUBLE, c_nINVALID_DOUBLE);
- }
-
- DRECT CSelectTarget::GetSelObjsBoundRect(bool bArbitrary_/* = false*/)
- {
- // bArbitrary_ΪtrueʱǿƸ»档 ---- 2011-06-16
- if (bArbitrary_)
- {
- // ʼ
- const CadObjectList* _plistSelObjs = GetSelectedCadObjects();
- ASSERT(_plistSelObjs);
- DRECT _rcTotalRect(c_nINVALID_DOUBLE, c_nINVALID_DOUBLE, c_nINVALID_DOUBLE, c_nINVALID_DOUBLE);
-
- //
- for (CadObjectList::const_iterator _it = _plistSelObjs->begin(); _it != _plistSelObjs->end(); _it++)
- {
- DRECT _rect = (*_it)->GetBoundRect();
- if (_it == _plistSelObjs->begin())
- _rcTotalRect = _rect;
- else
- DRECT::Union(_rcTotalRect, _rcTotalRect, _rect);
- }
-
- //
- m_rcSelObjsBoundRect = _rcTotalRect;
- }
-
- return m_rcSelObjsBoundRect;
- }
-
- DRECT CSelectTarget::GetObjsBoundRect(const CadObjectList* pObjectsList_)
- {
- if (!pObjectsList_ || pObjectsList_->empty())
- DRECT(0,0,0,0);
-
- DRECT _rc;
- for (CadObjectList::const_iterator _iter = pObjectsList_->begin(); _iter != pObjectsList_->end(); _iter++)
- {
- DRECT _rect = (*_iter)->GetBoundRect();
- if (_iter == pObjectsList_->begin())
- _rc = _rect;
- else
- DRECT::Union(_rc, _rc, _rect);
- }
-
- return _rc;
- }
-
- void CSelectTarget::SetRButtonMenu_NoneSelected(CMenu* pRButtonMenu_)
- {
- ASSERT(pRButtonMenu_);
- ASSERT(pRButtonMenu_->GetSafeHmenu());
- m_pRButtonMenu_NoneSelected = pRButtonMenu_;
- }
-
- void CSelectTarget::SetRButtonMenu_SingleSelected(CMenu* pRButtonMenu_)
- {
- ASSERT(pRButtonMenu_);
- ASSERT(pRButtonMenu_->GetSafeHmenu());
- m_pRButtonMenu_SingleSelected = pRButtonMenu_;
- }
-
- void CSelectTarget::SetRButtonMenu_MultiSelected(CMenu* pRButtonMenu_)
- {
- ASSERT(pRButtonMenu_);
- ASSERT(pRButtonMenu_->GetSafeHmenu());
- m_pRButtonMenu_MultiSelected = pRButtonMenu_;
- }
-
- ////////////////////////////////////////////////////////////////////////////////
- // Local function implementations
- //
- // һĹ۲촰һCADΪֵ֣жϰ취
- // ӾΣȻӾεİཻϵжϡ
- // FullInside : ȫڹ۲촰
- // PartInside : ڹ۲촰
- // NotInside : ȫڹ۲촰
- // ۲촰ViewPortӦΪЧλõӦΪЧӦΪǸOUTָ
- // ΪNULLΪNULLʱʾҪռһֵĶ ---- 2011-07-16
- static void _DivideObjectsIntoThree(IN const CadObjectList* plistSource_,
- IN const DRECT& rcViewport_,
- OUT CadObjectList* plistFullInside_,
- OUT CadObjectList* plistPartInside_,
- OUT CadObjectList* plistNotInside_)
- {
- ASSERT(plistSource_);
- ASSERT(IsValidDouble(rcViewport_.x) && IsValidDouble(rcViewport_.y)
- && rcViewport_.width >= 0. && rcViewport_.height >= 0);
-
- if (!plistFullInside_ && !plistPartInside_ && !plistNotInside_)
- {
- return;
- }
-
- for (CadObjectList::const_iterator _it = plistSource_->begin();
- _it != plistSource_->end(); _it++)
- {
- // Ӿ ---- 2011-07-16
- CCadObject* _pCadObject = *_it;
- ASSERT(_pCadObject);
- DRECT _rcBound = _pCadObject->GetBoundRect();
-
- // жϰϵжཻϵ ---- 2011-07-16
- if (rcViewport_.Contains(_rcBound))
- {
- if (plistFullInside_)
- plistFullInside_->push_back(_pCadObject);
- }
- else if (rcViewport_.IntersectsWith(_rcBound))
- {
- if (plistPartInside_)
- plistPartInside_->push_back(_pCadObject);
- }
- else
- {
- if (plistNotInside_)
- plistNotInside_->push_back(_pCadObject);
- }
- }
- }
-
- LRESULT CSelectTarget::SelectAll(WPARAM wParam_, LPARAM lParam_)
- {
- ASSERT(m_pFileTarget);
- CCadGroup* _pCadGroup = m_pFileTarget->GetCurrentCadGroup();
- if (_pCadGroup->IsEmpty())
- return FALSE;
- const CadObjectList* _pCadObjList = _pCadGroup->GetObjectsList();
-
- // ---- DingQiang 2013-09-23
- m_listSelectedCadObjects.clear();
- for (CadObjectList::const_iterator _iter = _pCadObjList->begin(); _iter != _pCadObjList->end(); _iter++)
- {
- m_listSelectedCadObjects.push_back(*_iter);
- if (!(*_iter)->IsSelected())
- {
- (*_iter)->Select(true);
- }
- }
-
- return TRUE;
- }
|