|
www.mxdraw.com
|
提示用户输入一个点坐标.
[ object, uuid(EF590D97-DCC9-46ED-A025-E54EE7E91348), dual, nonextensible, helpstring("IMxDrawUiPrPoint interface"), pointer_default(unique) ]
interface IMxDrawUiPrPoint : IMxDrawUiPrBase;MxDrawUiPrPoint.idl
例如: VB代码.
Dim getPoint As MxDrawUiPrPoint
Set getPoint = New MxDrawUiPrPoint
getPoint.message = "点取一个点 或[闭合(N)/放弃(A)]"
getPoint.keyWords = "N A"
Dim basePoint As MxDrawPoint
Set basePoint = New MxDrawPoint
basePoint.x = 100
basePoint.y = 100
getPoint.basePoint = basePoint
getPoint.setUseBasePt True
Dim ret As MCAD_McUiPrStatus
ret = getPoint.go()
If ret = MxDrawXLib.mcOk Then
'输入一个点
MsgBox getPoint.Value().x
MsgBox getPoint.Value().y
ElseIf ret = MxDrawXLib.mcKeyWord Then
' 输入了关键字
MsgBox "关键字"
MsgBox getPoint.keyWordPicked()
End If例如: VC COM调用
void CTestVc2005Dlg::DoDynDrag() { long lBak = 0; m_ocx.GetSysVarLong(_T("DYNINPUT"),&lBak); m_ocx.SetSysVarLong(_T("DYNINPUT"),0); MxDrawXLib::IMxDrawUiPrPointPtr getPt; getPt.CreateInstance(__uuidof( MxDrawXLib::MxDrawUiPrPoint )); IMxDrawUiPrPoint* pGetPt = getPt; pGetPt->put_message(_T("点取插入点")); if(pGetPt->go() != mcOk) { m_ocx.SetSysVarLong(_T("DYNINPUT"),lBak); return; } IMxDrawPointPtr frstPt = pGetPt->value(); if(frstPt == NULL) { m_ocx.SetSysVarLong(_T("DYNINPUT"),lBak); return; } MxDrawXLib::IMxDrawUiPrPointPtr getSecondPt; getSecondPt.CreateInstance(__uuidof( MxDrawXLib::MxDrawUiPrPoint )); pGetPt = getSecondPt; IMxDrawCustomEntityPtr spDrawData =pGetPt->InitUserDraw(DYNDRAG_DRAW_ID); pGetPt->put_message(_T("点取旋转角度")); pGetPt->put_basePoint(frstPt); pGetPt->setUseBasePt(VARIANT_TRUE); spDrawData->SetPoint(_T("pt1"),frstPt); CString sBlkFile; CString sBlkName(_T("Tree")); sBlkFile.Format(_T("%s\Blk\树.dwg"),m_ocx.GetOcxAppPath() ); short iret = m_ocx.InsertBlock(sBlkFile,_T("Tree")); spDrawData->SetString(_T("BlkName"),_T("Tree")); if(pGetPt->go() != mcOk) { m_ocx.SetSysVarLong(_T("DYNINPUT"),lBak); return; } spDrawData->Draw(); m_ocx.SetSysVarLong(_T("DYNINPUT"),lBak); } void CTestVc2005Dlg::DynWorldDrawMxdrawxctrl1(double dX, double dY, LPDISPATCH pWorldDraw, LPDISPATCH pData, long* pRet) { // TODO: 在此处添加消息处理程序代码 IMxDrawCustomEntityPtr spDrawData; pData->QueryInterface(&spDrawData); IMxDrawWorldDrawPtr spWordDraw; pWorldDraw->QueryInterface(&spWordDraw); CString sGuid = spDrawData->Guid; *pRet = 0; if(sGuid == DYNDRAG_DRAW_ID) { // 动态插入图块。 IMxDrawPointPtr firstPt = spDrawData->GetPoint(_T("pt1")); if(firstPt == NULL) return; CString sBlkName = spDrawData->GetString(_T("BlkName")); MxDrawXLib::IMxDrawPointPtr secondPt; secondPt.CreateInstance(__uuidof( MxDrawXLib::MxDrawPoint )); secondPt->put_x(dX); secondPt->put_y(dY); IMxDrawVector3dPtr vec = firstPt->SumVector(secondPt); double dAng = vec->Angle(); _bstr_t psxBlkName = sBlkName.AllocSysString(); spWordDraw->DrawBlockReference(firstPt->x,firstPt->y,psxBlkName,1.0,dAng * 180.0 / 3.14159265 + 90.0); *pRet = 1; } }