You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
2.2 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

//////////////////////////////////////////////////////////////////////////////
//文件: 剖面与平面测线类
//主要功能:
// 实现在平面测线上显示一条绑定的剖面图剖面图的x坐标与平面测线的L相同
// 进行插值平面坐标
//程序编写: 2011-11-28
//
//
/////////////////////////////////////////////////////////////////////////////
#pragma once
#include "MxnFormat/AttachBase.h"
#include "MxnFormat/Texture.h"
#include "CurveEx.h"
namespace N3D
{
//为了将一幅平面图按照材质生成方式显示到三维空间
class AFX_EXT_CLASS C3DMapTexture : public CAttachBase
{
public:
C3DMapTexture(void);
virtual ~C3DMapTexture(void);
void* GetSection() { return GetInput();} //指向一个CXy对象该对象是一个完整的剖面图件
void operator = (C3DMapTexture& cs);
virtual void Clear();
virtual void GetRange(CPoint3D& minPoint, CPoint3D& maxPoint);
virtual void Serialize(CArchive& ar, const short &ver);
virtual void Write(CFile &fw, const short& ver);
virtual int Read(CFile& fr, const short& ver);
//根据指定的高宽生成图像,并将剖面内容显示的图像上生成绑定的材质
//为-1时自动获得高宽
bool CreateTexture(CTexture& tx);
void SetTextureSize(CSize sz) { m_size = sz; }
CSize GetTextureSize(void) { return m_size; }
void LoadSection(LPCTSTR strFileName);
protected:
//要显示的剖面图剖面的X坐标与m_pCoor曲线l相对应从而插值空间坐标xy
CString m_strSectionName;
CSize m_size;
};
//将一幅剖面图结合设置的平面测线显示到三维空间
class AFX_EXT_CLASS C3DCurveSection
: public CCurveEx
, public C3DMapTexture
{
public:
C3DCurveSection(void);
~C3DCurveSection(void);
virtual void Clear();
virtual void Serialize(CArchive& ar, const short &ver);
virtual void GetRange(CPoint3D& minPoint, CPoint3D& maxPoint);
virtual void Write(CFile &fw, const short& ver);
virtual int Read(CFile& fr, const short& ver);
//获得剖面对应的平面曲线坐标,需要从对应测线中插值得到,返回曲线节点个数
int GetSectionCurve(CCurveEx* pc, bool bIsMaxZ0 = false);
//leftLocation rightLocation对应的是剖面的左边X值与右边X值为曲线的桩号坐标
int GetSectionCurve(CCurveEx* pc, double leftLocation, double rightLocation);
void operator = (C3DCurveSection& cs);
bool GetTraceCoord(double xTraceCDP, dfPoint& pt); //获得指定道的坐标
};
}//namesapce
using namespace N3D;