【ABD CE C++ 而从开发】mdlLocate_findPath和_DoLocate获得到取值不同,想问下这两者得差别

老师,最近想做一个门窗放置工具,想如果点击墙就在墙上放,否则直接放。但是在_OnDataButton中用mdlLocate_findPath获取HitPathCP时获取不到,用_DoLocate就能获取到;想通过点击点有没有Path来判断是直接放门窗,还是走_BuildLocateAgenda这个函数去放在元素上;如下是我的最简测试代码,两个获取的Path不同

class SelectFaceTool : public DgnElementSetTool
{
public:
	SelectFaceTool() {}

	~SelectFaceTool() {}
	bool _OnResetButton(DgnButtonEventCR ev) override 
	{
		_OnReinitialize();
		return true;
	}

	void _OnPostInstall() override 
	{
		__super::_OnPostInstall();
	}
	StatusInt _OnElementModify(EditElementHandleR elHandle)override 
	{
		return ERROR;
	}
	void _OnRestartTool() override 
	{
		SelectFaceTool *pTool = new SelectFaceTool();
		pTool->InstallTool();
	}


	EditElementHandleP _BuildLocateAgenda(HitPathCP path, DgnButtonEventCP ev)override
	{
		int size1 = GetElementAgenda().GetCount();
		if (size1 > 0)
		{
			return NULL;
		}
		return NULL;
	}

	bool _OnDataButton(DgnButtonEventCR ev) override 
	{	
		LocateFailure reasonCode;
		HitPathCP path1;
		WString cantAcceptExplanation = L"";
		HitPathCP path = mdlLocate_findPath(&reasonCode, &cantAcceptExplanation, true, ev.GetPoint(), ev.GetViewNum(), ComponentMode::None, false, false);
		UInt32 filepos = mdlLocate_findElementEx(&reasonCode, &cantAcceptExplanation, ev.GetPoint(), ev.GetViewNum(), true, ComponentMode::None, false);
		path1 = _DoLocate(ev, true, ComponentMode::None);
		if (path1 == NULL)
		{
			return true;
		}
		return __super::_OnDataButton(ev);
	}


};

Parents Reply Children
No Data