[msceU7 c++] RegionGraphicsContext测试中的问题

各位老师:

        测试regiongraphicsContext,主要目的测试在程序中生成region。遇到的问题:1、在三维模型中生成的region(强制在顶视图)和顶视图的观测是有差距的,二维模型不存在这个问题;2、三维模型中如果两个曲线Z方向距离比较远就不会生成region。同样的条件,例子中的examptool和系统的patterns下的flood功能都能正常执行。测试代码如下:

struct Region : DgnElementSetTool
{
private:

	int m_toolId;

	Region(int toolId) : DgnElementSetTool(toolId), m_toolId(toolId) {}

	void _OnPostInstall() override
	{
		__super::_OnPostInstall();
		_SetLocateCursor(true);
	}

	bool _OnDataButton(DgnButtonEventCR ev) override
	{
		bool  status = __super::_OnDataButton(ev);

		size_t nCount = GetElementAgenda().GetCount();
		if (nCount != 2)
			return status;

		ElementAgendaR area = GetElementAgenda();
		if (nCount != area.GetCount()) {
			wprintf(L"%d\n", area.GetCount()); mdlDialog_dmsgsPrint(L"wrong");
		}
		//EditElementHandle eehA(14705L, ACTIVEMODEL);
		//EditElementHandle eehB(14703L, ACTIVEMODEL);
		//ElementAgenda list; list.Insert(eehA); list.Insert(eehB);

		DPoint3d seedPt = DPoint3d::FromZero();//测试:区域边线包围坐标原点。
		
		Transform trans[2]{ Transform::FromIdentity(),Transform::FromIdentity() };

		RegionGraphicsContextPtr RgcPtr = RegionGraphicsContext::Create();
	
		//DVec3d vec = DVec3d::UnitZ();
		//RgcPtr->SetFlattenBoundary(vec);
		RgcPtr->SetFloodParams(RegionLoops::Outer, 0.0);
		RgcPtr->SetFlattenBoundary(trans[0]);

		RgcPtr->Flood(*ACTIVEMODEL, area, trans, &seedPt, 1);

		EditElementHandle poly;
		
		BentleyStatus flag = RgcPtr->GetRegion(poly);
		if (ERROR == flag)
		{
			mdlDialog_dmsgsPrint(L"error!!");
			return false;
		}
		poly.AddToModel();

		return false;

	}
	void _OnRestartTool() override
	{
		InstallNewInstance(m_toolId);
	}
private:
	virtual size_t     _GetAdditionalLocateNumRequired()                  override { return 2; }
	virtual bool       _WantAdditionalLocate(DgnButtonEventCP ev)         override { return WantAdditionalLocateHelper(ev); }
	virtual bool       _OnModifierKeyTransition(bool wentDown, int key)   override { return OnModifierKeyTransitionHelper(wentDown, key); }

	bool _IsModifyOriginal()override { return true; }
	bool _DoGroups(void) { return true; }
	bool _OnPostLocate(HitPathCP  path, WStringR  cantAcceptReason)
	{
		return true;
	}
	int _OnElementModify(EditElementHandleR element) { return ERROR; }

public:
	static void InstallNewInstance(int toolId);
};
void Region::InstallNewInstance(int toolId)
{
	Region* tool = new Region(toolId);
	tool->InstallTool();
}

void runRegion(void)
{
	Region::InstallNewInstance(0);
}

8105.test01.dgn