Files
2026-09-28 15:28:50 +08:00

796 lines
18 KiB
C++

#include "stdafx.h"
#include "compare_double.h"
#include "KTCadUtility.h"
#include "KTSetting.h"
#include "coretools.h"
#include "PMFYDlg.h"
#include "GLTKDlg.h"
#include "AecDbMultiPartEntity.h"
namespace
{
AcDbRegion* string2Region(LPCTSTR str)
{
if (!str) return NULL;
CString sFullPath = FilePath::getSystemTemporaryFolder();
sFullPath.MakeLower();
sFullPath += _T("\\pmfy.sat");
CStdioFile file;
if (!file.Open(sFullPath, CFile::modeCreate |CFile::modeWrite)) return NULL;
file.WriteString(str);
file.Close();
AcDbVoidPtrArray arBodyPtrs;
if (Acad::eOk != AcDbBody::acisIn(sFullPath, arBodyPtrs)) return NULL;
if (arBodyPtrs.isEmpty()) return NULL;
return AcDbRegion::cast((AcDbEntity*)arBodyPtrs.first());
}
AcDbRegion* selectRegion(CString &src)
{
src.Empty();
CAcModuleResourceOverride myResources;
CGLTKDlg dlg(CGLTKDlg::eSelect, _T("poolstandard.db"), _T("standard"), CGLTKDlg::drawRegion);
if (IDOK != dlg.DoModal()) return NULL;
CString sScr;
if (!dlg.GetCrossSectionScr(sScr)) return NULL;
AcDbRegion *pReg(string2Region(sScr));
if (pReg)
src = sScr;
return pReg;
}
void transformRegion(AcDbRegion *pReg
, const AcDbCurve *pCurve
, const bool &bStartPoint)
{
if (!pReg || !pCurve) return;
AcGePoint3d pt;
AcGeVector3d vt;
if (bStartPoint)
pCurve->getStartPoint(pt);
else
pCurve->getEndPoint(pt);
pCurve->getFirstDeriv(pt, vt);
AcGeVector3d vtAxis(AcGeVector3d::kZAxis.crossProduct(vt));
AcGeMatrix3d mat;
AcGePlane pln(pt, vt);
mat.setToWorldToPlane(pln);
pReg->transformBy(mat.inverse());
}
// pLine,0标高,把pReg1, pReg2移动到两端
void transformRegion2(AcDbLine *pLine
, AcDbRegion *pReg1
, AcDbRegion *pReg2 )
{
if (!pReg1 || !pReg2 || !pLine) return;
AcGePoint3d ptS(pLine->startPoint()), ptE(pLine->endPoint());
AcGeVector3d vt((ptE - ptS).normalize());
vt.z = .0;
AcGeMatrix3d mat;
AcGePlane plnS(ptS, vt), plnE(ptE, vt);
mat.setToWorldToPlane(plnS);
pReg1->transformBy(mat.inverse());
mat.setToWorldToPlane(plnE);
pReg2->transformBy(mat.inverse());
}
CString getClrString(int idx, bool hasHead = true)
{
CString sClr(_T("")), s(_T(""));
if (idx == 0)
sClr = _T("ByBlock");
else if (idx == 256)
sClr = _T("ByLayer");
else
sClr.Format(_T("%d"), idx);
s.Format(_T("%s:%s"), _T("颜色"), sClr);
if (hasHead)
return s;
return sClr;
}
void setBIMData(AecDbObjXDataMap *pMap
, LPCTSTR pszName
, int clr
, LPCTSTR pszMaterials
, LPCTSTR pszApp )
{
CString s(_T(""));
SH_BIM_BLOCK bims;
CoreTools::getBimDatas(*pMap, bims);
if (bims.empty())
{
if (pszName)
bims.push_back(std::make_pair(_T("名称"), pszName));
bims.push_back(std::make_pair(_T("颜色"), getClrString(clr, false)));
if (pszMaterials)
bims.push_back(std::make_pair(_T("材料"), pszMaterials));
if (pszApp)
bims.push_back(std::make_pair(_T("统计类型"), pszApp));
CoreTools::setBimDatas(*pMap, bims);
}
else
{
if (pszName)
CoreTools::setBimData(*pMap, _T("名称"), pszName);
CoreTools::setBimData(*pMap, _T("颜色"), getClrString(clr, false));
if (pszMaterials)
CoreTools::setBimData(*pMap, _T("材料"), pszMaterials);
if (pszApp)
CoreTools::setBimData(*pMap, _T("统计类型"), pszApp);
}
}
//修改pCurve的起点和终点标高
void modifyPathCurve(AcDbCurve *&pCurve, const double &dStart, const double &dEnd)
{
#if ARX >= 19
if (!pCurve) return;
if (COMPARE_DOUBLE::equal_zero(dStart) && COMPARE_DOUBLE::equal_zero(dEnd)) return;
AcGePoint3d ptStart, ptEnd, ptMid;
pCurve->getStartPoint(ptStart);
pCurve->getEndPoint(ptEnd);
double dL(.0);
pCurve->getDistAtPoint(ptEnd, dL);
pCurve->getPointAtDist(dL * .5, ptMid);
ptStart.z = dStart;
ptEnd.z = dEnd;
AcGeVector3d vtN(ptEnd - ptStart);
vtN.normalize();
AcGeVector3d vtAxis(vtN.crossProduct(AcGeVector3d::kZAxis));
vtAxis.normalize();
vtN.rotateBy(PI * .5, vtAxis);
AcGePlane plnNew(ptStart, vtN);
std::shared_ptr<AcGeCurve3d> spGeCrv;
AcGeCurve3d *pGeCrv(NULL);
if (pCurve->getAcGeCurve(pGeCrv) != Acad::eOk) return;
if (!pGeCrv) return;
spGeCrv.reset(pGeCrv);
std::shared_ptr<AcGeEntity3d> spGeOrtho;
AcGeEntity3d *pGeOrtho = pGeCrv->orthoProject(plnNew);
if (!pGeOrtho) return;
spGeOrtho.reset(pGeOrtho);
AcGe::EntityId type = spGeOrtho->type();
if (type == AcGe::kCircArc3d)
{
AcDbArc *pDbArc = CoreTools::geArc2DbArc(*(AcGeCircArc3d*)spGeOrtho.get());
DELETE_PTR(pCurve);
pCurve = pDbArc;
}
else if (type == AcGe::kLineSeg3d)
{
AcGeLineSeg3d *seg = (AcGeLineSeg3d*)spGeOrtho.get();
AcDbLine *pLine = new AcDbLine(seg->startPoint(), seg->endPoint());
DELETE_PTR(pCurve);
pCurve = pLine;
}
else if (type == AcGe::kEllipArc3d)
{
AcGeEllipArc3d *pGeArc = (AcGeEllipArc3d *)spGeOrtho.get();
AcDbEllipse *pDbEll = new AcDbEllipse(pGeArc->center()
, pGeArc->normal()
, pGeArc->majorAxis().normalize() * pGeArc->majorRadius()
, pGeArc->minorRadius() / pGeArc->majorRadius()
, pGeArc->startAng()
, pGeArc->endAng());
DELETE_PTR(pCurve);
pCurve = pDbEll;
}
else if (type == AcGe::kNurbCurve3d)
{
AcGeNurbCurve3d *pGeNurb = (AcGeNurbCurve3d*)spGeOrtho.get();
bool bFitCurve = pGeNurb->hasFitData();
AcDbSpline *pDbSp = new AcDbSpline();
if (bFitCurve)
{
AcGePoint3dArray fitPoints;
AcGeTol fitTolerance;
Adesk::Boolean tangentsExist;
AcGeVector3d startTangent, endTangent;
KnotParameterization knotParam;
pGeNurb->getFitData(fitPoints
, fitTolerance
, tangentsExist
, startTangent
, endTangent
, knotParam);
pDbSp->setType(kFitPoints);
pDbSp->setFitData(fitPoints
, startTangent
, endTangent
, knotParam
, pGeNurb->degree()
, fitTolerance.equalPoint());
}
else
{
int degree;
Adesk::Boolean rational, periodic;
AcGeKnotVector knots;
AcGePoint3dArray controlPoints;
AcGeDoubleArray weights;
pGeNurb->getDefinitionData(degree
, rational
, periodic
, knots
, controlPoints
, weights);
pDbSp->setType(kControlPoints);
AcGeDoubleArray arKnots(knots.length());
::memcpy(arKnots.asArrayPtr(), knots.asArrayPtr(), sizeof(double) * knots.length());
arKnots.setLogicalLength(knots.logicalLength());
pDbSp->setNurbsData(degree
, rational
, pGeNurb->isClosed()
, periodic
, controlPoints
, arKnots
, weights
, .0
, knots.tolerance());
}
DELETE_PTR(pCurve);
pCurve = pDbSp;
}
#else
return;
#endif
}
}
IMPLEMENT_DYNAMIC(CPMFYDlg, CDialog)
CPMFYDlg::CPMFYDlg(CWnd *pParent)
: CDialog(IDD_PMFY_DLG, pParent)
, m_dElevStart(0)
, m_dElevEnd(0)
, m_clr(256)
, m_sName(_T("放样体"))
, m_pPathCurve(NULL)
, m_pStartRegion(NULL)
, m_pEndRegion(NULL)
, m_strStartRegion(_T(""))
, m_strEndRegion(_T(""))
, m_strPath(_T(""))
, m_bInplace(false)
, m_sMaterial(_T("钢筋混凝土"))
, m_sApplication(_T("其他"))
, m_idInplace(AcDbObjectId::kNull)
{
GET_CACHE(CPMFYDlg
, %f%f%s%s%s
, &m_dElevStart
, &m_dElevEnd
, &m_sName
, &m_sMaterial
, &m_sApplication );
}
bool CPMFYDlg::fromID(AcDbObjectId &id)
{
if (!::IsWindow(g_PmfyDlg::instance().m_hWnd))
return false;
AcDbObjectPointer<AecDbMultiPartEntity> pInplaceEnt(id, AcDb::kForRead);
if (pInplaceEnt.openStatus() != Acad::eOk) return false;
clear();
do
{
BOOL isPMFY(FALSE);
pInplaceEnt->GetAt(_T("PMFY"), isPMFY);
if (!isPMFY) break;
AecDbX3dPart *pPart(NULL);
AcDbX3dSolid *pSolid(NULL);
if (!findMainPart(pInplaceEnt, pPart, pSolid)) break;
if (!pPart) break;
if (!pSolid) break;
if (!pPart->GetSpecialtyData()->GetAt(_T("START_REGION"), m_strStartRegion)) break;
if (!pPart->GetSpecialtyData()->GetAt(_T("END_REGION"), m_strEndRegion)) break;
if (!pPart->GetSpecialtyData()->GetAt(_T("PATH"), m_strPath)) break;
if (!pPart->GetSpecialtyData()->GetAt(_T("START_ELEV"), m_dElevStart)) break;
if (!pPart->GetSpecialtyData()->GetAt(_T("END_ELEV"), m_dElevEnd)) break;
m_pPathCurve = CoreTools::StringToAcDbCurve(m_strPath);
m_pStartRegion = string2Region(m_strStartRegion);
m_pEndRegion = string2Region(m_strEndRegion);
if (!m_pPathCurve || !m_pStartRegion || !m_pEndRegion)
{
clear();
break;
}
// 所有检查都没有问题
m_idInplace = id;
m_bInplace = true;
pPart->GetName(m_sName);
CString clr;
CoreTools::getBimData(*pPart->GetSpecialtyData(), _T("颜色"), clr);
m_clr = TypeConvert::s2i(clr);
CoreTools::getBimData(*pPart->GetSpecialtyData(), _T("材料"), m_sMaterial);
CoreTools::getBimData(*pPart->GetSpecialtyData(), _T("统计类型"), m_sMaterial);
UpdateData(FALSE);
return true;
} while (false);
return false;
}
CPMFYDlg::~CPMFYDlg()
{
clear();
}
BOOL CPMFYDlg::OnInitDialog()
{
CDialog::OnInitDialog();
UpdateData(FALSE);
return TRUE;
}
void CPMFYDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT_ELEV_START, m_dElevStart);
DDX_Text(pDX, IDC_EDIT_ELEV_END, m_dElevEnd);
DDX_Text(pDX, IDC_EDIT_NAME, m_sName);
DDX_CBString(pDX, IDC_CMB_MA, m_sMaterial);
DDX_CBString(pDX, IDC_CMB_APP, m_sApplication);
}
bool CPMFYDlg::findMainPart(AecDbMultiPartEntity *pM
, AecDbX3dPart *&pPart
, AcDbX3dSolid *&pSolid)
{
BOOL bMain(FALSE);
int nCount(pM->GetX3dPartCount());
if (nCount <= 0) return false;
for (int i(0); i < nCount; ++i)
{
AecDbX3dPart *pP(pM->GetX3dPart(i));
if (!pP) continue;
bMain = FALSE;
pP->GetSpecialtyData()->GetAt(_T("MAIN"), bMain);
if (bMain)
{
if (pP->GetX3dSolidCount(AcDb::kBoolUnite) > 0)
{
AcDbX3dSolid *pS = pP->GetX3dSolid(0);
if (pS->GetSolidType() == AcDbX3dSolid::kLoft)
{
pPart = pP;
pSolid = pS;
return true;
}
}
}
}
return false;
}
bool CPMFYDlg::NewEntity(const AcArray<AcDbRegion*> &arRegs)
{
AecDbMultiPartEntity *pEnt = new AecDbMultiPartEntity();
{
AcGePoint3d ptS;
if (m_pPathCurve->getStartPoint(ptS) != Acad::eOk)
{
DELETE_PTR(pEnt);
return false;
}
pEnt->SetAt(_T("PMFY"), TRUE);
pEnt->SetAt(_T("NAME"), m_sName);
double l(.01), h(.01);
AcDbCircle cir(ptS, AcGeVector3d::kZAxis, l);
AcDbLine line(ptS, ptS + AcGeVector3d::kZAxis * h);
AcDbRegion *pReg = CoreTools::createRegion(&cir);
if (!pReg)
{
DELETE_PTR(pEnt);
return false;
}
pEnt->SetBaseCurve(&line);
pEnt->SetSection(pReg, ptS);
DELETE_PTR(pReg);
pEnt->SetOrg(ptS);
pEnt->SetXDir(AcGeVector3d::kXAxis);
pEnt->SetYDir(AcGeVector3d::kYAxis);
pEnt->SetZDir(AcGeVector3d::kZAxis);
AcDbObjectId idYGDTLay = KTSetting::InitLayer(_T("LAY_YGDT"), true);
if (idYGDTLay.isValid())
pEnt->setLayer(idYGDTLay);
}
AcDbX3dSolid *pSolid = new AcDbX3dSolid();
//if (pSolid->CreateLoft(arRegs, m_pPathCurve))
if (pSolid->CreateLoft(arRegs))
{
AecDbX3dPart *pPart = new AecDbX3dPart();
pPart->GetSpecialtyData()->SetAt(_T("DTYG_TYPE"), _T("放样体"));
pPart->GetSpecialtyData()->SetAt(_T("MAIN"), TRUE);
pPart->AddX3dSolid(pSolid);
pPart->SetOrgPoint(pSolid->GetCentoridPoint());
setXPartInfo(pPart);
pEnt->AddX3dPart(pPart, AcDb::kBoolUnite);
CoreTools::AddToModelSpace(pEnt);
return true;
}
else
{
AfxMessageBox(_T("生成失败。"));
DELETE_PTR(pSolid);
DELETE_PTR(pEnt);
}
return false;
}
bool CPMFYDlg::InplaceEntity(const AcArray<AcDbRegion*> &arRegs)
{
AcDbObjectPointer<AecDbMultiPartEntity> ent(m_idInplace, AcDb::kForWrite);
if (ent.openStatus() != Acad::eOk) return false;
ent->AssertWriteEnabled();
AecDbX3dPart *pPart(NULL);
AcDbX3dSolid *pSolid(NULL);
if (!findMainPart(ent, pPart, pSolid)) return false;
if (pSolid->CreateLoft(arRegs, m_pPathCurve))
{
pPart->SetOrgPoint(pSolid->GetCentoridPoint());
setXPartInfo(pPart);
pPart->Create();
}
return true;
}
void CPMFYDlg::setXPartInfo(AecDbX3dPart *pPart)
{
if (!pPart) return;
pPart->SetAxis(0, AcGeVector3d::kXAxis);
pPart->SetAxis(1, AcGeVector3d::kYAxis);
pPart->SetAxis(2, AcGeVector3d::kZAxis);
setBIMData(pPart->GetSpecialtyData(), m_sName, m_clr, m_sMaterial, m_sApplication);
pPart->SetName(m_sName);
pPart->GetSpecialtyData()->SetAt(_T("START_REGION"), m_strStartRegion);
pPart->GetSpecialtyData()->SetAt(_T("END_REGION"), m_strEndRegion);
pPart->GetSpecialtyData()->SetAt(_T("PATH"), m_strPath);
pPart->GetSpecialtyData()->SetAt(_T("START_ELEV"), m_dElevStart);
pPart->GetSpecialtyData()->SetAt(_T("END_ELEV"), m_dElevEnd);
}
BEGIN_MESSAGE_MAP(CPMFYDlg, CDialog)
ON_BN_CLICKED(IDOK, &CPMFYDlg::OnBnClickedOk)
ON_BN_CLICKED(IDC_BTN_PATH, &CPMFYDlg::OnBnClickedBtnPath)
ON_BN_CLICKED(IDC_BTN_SECTION_START, &CPMFYDlg::OnBnClickedBtnSectionStart)
ON_BN_CLICKED(IDC_BTN_SECTION_END, &CPMFYDlg::OnBnClickedBtnSectionEnd)
ON_BN_CLICKED(IDC_STATIC_COLOR, &CPMFYDlg::OnStaticColor)
ON_MESSAGE(WM_ACAD_KEEPFOCUS, &CPMFYDlg::onAcadKeepFocus)
ON_WM_CLOSE()
ON_WM_SHOWWINDOW()
ON_WM_CTLCOLOR()
END_MESSAGE_MAP()
void CPMFYDlg::OnBnClickedOk()
{
AcAxDocLock lock;
if (!UpdateData(TRUE)) return;
if (!m_pPathCurve)
{
AfxMessageBox(_T("请选择路径!"));
return;
}
if (!m_pStartRegion && !m_pEndRegion)
{
AfxMessageBox(_T("请选择一个截面!"));
}
if (!m_pStartRegion && m_pEndRegion)
{
m_pStartRegion = (AcDbRegion*)m_pEndRegion->clone();
m_strStartRegion = m_strEndRegion;
}
if (!m_pEndRegion && m_pStartRegion)
{
m_pEndRegion = (AcDbRegion*)m_pStartRegion->clone();
m_strEndRegion = m_strStartRegion;
}
// 只处理直线
//modifyPathCurve(m_pPathCurve, m_dElevStart, m_dElevEnd);
AcDbLine *pLine(AcDbLine::cast(m_pPathCurve));
if (!pLine) return;
AcGePoint3d pt(pLine->startPoint());
pt.z = m_dElevStart;
pLine->setStartPoint(pt);
pt = pLine->endPoint();
pt.z = m_dElevEnd;
pLine->setEndPoint(pt);
//transformRegion(m_pStartRegion, m_pPathCurve, true);
//transformRegion(m_pEndRegion, m_pPathCurve, false);
// 只处理直线
transformRegion2(pLine, m_pStartRegion, m_pEndRegion);
AcArray<AcDbRegion *> arRegs;
arRegs.append(m_pStartRegion);
arRegs.append(m_pEndRegion);
if (!m_bInplace)
NewEntity(arRegs);
else
InplaceEntity(arRegs);
clear();
SET_CACHE(CPMFYDlg
, %f%f%s%s%s
, m_dElevStart
, m_dElevEnd
, m_sName
, m_sMaterial
, m_sApplication);
CDialog::OnOK();
}
void CPMFYDlg::OnStaticColor()
{
AcCmColor clr;
#if ARX < 24
clr.setColorMethod(AcCmEntityColor::kByACI);
#endif
clr.setColorIndex(256);
if (acedSetColorDialogTrueColor(clr, Adesk::kTrue, clr, (AcCm::DialogTabs)(AcCm::kACITab)) == Adesk::kFalse) return;
m_clr = clr.colorIndex();
Invalidate();
}
HBRUSH CPMFYDlg::OnCtlColor(CDC *pDC, CWnd *pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if (nCtlColor == CTLCOLOR_STATIC)
{
if (pWnd != NULL && pWnd->GetDlgCtrlID() == IDC_STATIC_COLOR)
{
CRect rc;
pWnd->GetClientRect(rc);
pDC->FillSolidRect(rc, acedGetRGB(m_clr));
}
}
return hbr;
}
bool CPMFYDlg::selectPath()
{
ads_name name;
// 改为只支持直线
//struct resbuf *pRb = acutBuildList(RTDXF0, _T("LINE,ARC,SPLINE"), 0);
struct resbuf *pRb = acutBuildList(RTDXF0, _T("LINE"), 0);
int nRes = CKTCadUtility::SelectEntity(_T("\n请选择放样路径(直线):"), name, pRb);
acutRelRb(pRb);
if (nRes != RTNORM) return false;
AcDbObjectId id;
if (acdbGetObjectId(id, name) != Acad::eOk) return false;
AcDbEntityPointer ent(id, AcDb::kForRead);
if (ent.openStatus() != Acad::eOk) return false;
DELETE_PTR(m_pPathCurve);
m_pPathCurve = (AcDbCurve *)ent->clone();
m_strPath.Empty();
CoreTools::AcDbCurveToString(m_pPathCurve, m_strPath);
return true;
}
void CPMFYDlg::OnBnClickedBtnPath()
{
ShowWindow(SW_HIDE);
selectPath();
ShowWindow(SW_SHOW);
}
void CPMFYDlg::OnBnClickedBtnSectionStart()
{
ShowWindow(SW_HIDE);
AcDbRegion *pReg(NULL);
pReg = selectRegion(m_strStartRegion);
if (pReg)
{
DELETE_PTR(m_pStartRegion);
m_pStartRegion = pReg;
}
ShowWindow(SW_SHOW);
}
void CPMFYDlg::OnBnClickedBtnSectionEnd()
{
ShowWindow(SW_HIDE);
AcDbRegion *pReg(NULL);
pReg = selectRegion(m_strEndRegion);
if (pReg)
{
DELETE_PTR(m_pEndRegion);
m_pEndRegion = pReg;
}
ShowWindow(SW_SHOW);
}
LONG_PTR CPMFYDlg::onAcadKeepFocus(UINT_PTR, LONG_PTR)
{
POINT pt;
::GetCursorPos(&pt);
CRect rect;
GetWindowRect(&rect);
if (!(rect.PtInRect(pt)))
{
return FALSE;
}
//如果当前有命令在执行中,提示
struct resbuf rb;
acedGetVar(_T("CMDNAMES"), &rb);
if (rb.restype == RTSTR && rb.resval.rstring != NULL)
{
if (_tcslen(rb.resval.rstring) > 0)
{
acedPostCommand(_T("\x03"));
}
}
return TRUE;
}
void CPMFYDlg::clear()
{
m_bInplace = false;
DELETE_PTR(m_pPathCurve);
DELETE_PTR(m_pStartRegion);
DELETE_PTR(m_pEndRegion);
m_strPath.Empty();
m_strStartRegion.Empty();
m_strEndRegion.Empty();
}
void CPMFYDlg::OnClose()
{
clear();
CDialog::OnClose();
}
void CPMFYDlg::OnShowWindow(BOOL bShow, UINT nStatus)
{
if (bShow)
{
CWnd *pWnd(GetDlgItem(IDC_BTN_PATH));
if (pWnd)
{
if (m_pPathCurve)
pWnd->SetWindowText(_T("选择放样路径✓"));
else
pWnd->SetWindowText(_T("选择放样路径"));
}
pWnd = GetDlgItem(IDC_BTN_SECTION_START);
if (pWnd)
{
if (m_pStartRegion)
pWnd->SetWindowText(_T("选择起点截面✓"));
else
pWnd->SetWindowText(_T("选择起点始截面"));
}
pWnd = GetDlgItem(IDC_BTN_SECTION_END);
if (pWnd)
{
if (m_pEndRegion)
pWnd->SetWindowText(_T("选择终点始截面✓"));
else
pWnd->SetWindowText(_T("选择终点始截面"));
}
}
CDialog::OnShowWindow(bShow, nStatus);
}
/////////////////////////////////////////////////////////
void CPMFYDlg::start()
{
#if ARX >= 19
CAcModuleResourceOverride myResources;
g_PmfyDlg::instance().selectPath();
if (!::IsWindow(g_PmfyDlg::instance().m_hWnd))
{
g_PmfyDlg::instance().Create(CPMFYDlg::IDD, acedGetAcadFrame());
g_PmfyDlg::instance().CenterWindow();
}
if (!g_PmfyDlg::instance().IsWindowVisible())
g_PmfyDlg::instance().ShowWindow(SW_SHOW);
#else
AfxMessageBox(_T("请使用AutoCAD2013及以上版本。"));
#endif
}
void CPMFYDlg::inplace(AcDbObjectId &id)
{
#if ARX >= 19
CAcModuleResourceOverride myResources;
if (!::IsWindow(g_PmfyDlg::instance().m_hWnd))
{
g_PmfyDlg::instance().Create(CPMFYDlg::IDD, acedGetAcadFrame());
g_PmfyDlg::instance().CenterWindow();
}
if (!g_PmfyDlg::instance().fromID(id)) return;
if (!g_PmfyDlg::instance().IsWindowVisible())
g_PmfyDlg::instance().ShowWindow(SW_SHOW);
#else
AfxMessageBox(_T("请使用AutoCAD2013及以上版本。"));
#endif
}