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

66 lines
1.9 KiB

#pragma once
#ifdef _WIN32
#ifdef WIREROUTINGDLL_EXPORTS // VisualStudio DLL 项目模板会将 <PROJECTNAME>_EXPORTS 添加到定义预处理器宏。
#define BASIC_EDGE_API __declspec(dllexport) // _WIN32
#else
#define BASIC_EDGE_API __declspec(dllimport)
#endif
#else
#define BASIC_EDGE_API
#endif
#include "BasicChannel.h"
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<iostream>
#include<fstream>
#include<sstream>
using namespace std;
extern BVH BASIC_EDGE_API bvh;
extern BasicChannel BASIC_EDGE_API basicChannel;
//存储卡箍与卡箍之间,卡箍与分支点之间,分支点与分支点之间的边关系
struct BASIC_EDGE_API BasicEdge{
vector<pair<int,int> > clip[MAXPointNum][2],branchPoint[N][2];
//0,1代表两种模式,0代表同分支段的卡箍与分支点,1则相反
private: vector<pair<int,int> >edge[N][2]; //卡箍到卡箍的连线
//预处理分支点和卡箍之间的连线关系
public: void buildEdgeBetweenClipAndBranchPoint();
//返回卡箍能连接到的卡箍,如果没有能连接到的,返回只含有0的数组
vector< pair<int,int> > getClipConnectedToClip(int cid,int inOut);
/*根据分支点返回卡箍
mode=0为模式A,否则为模式B
其中模式B需要过滤掉通道中的卡箍
*/
vector<pair<int,int> > getClipConnectedToBranchPoint(int bid,int mode);
/*根据卡箍返回分支点,卡箍与分支点在同一个Bundle上
卡箍分为3种,断头/通道中的点/孤立点
其中通道中的点只能采用模式A
孤立点只能采用模式B
断头可以根据inOut来判断采用哪种模式
offset代表偏移量,用来将分支点标号对应到Astar中点的标号
*/
vector<pair<int,int> > getBranchPointConnectedToClip(int cid,int inOut,int offset=0);
//返回Astar中编号为id的点能建立边的下个点
public: vector<pair<int,int> > getNextPoint(int id,int mode,int offset);
/*返回端点可以连接到的点
p是端点坐标
offSet是分支点坐标的偏移量
isEnd=1表示这个端点是路径终点,否则是路径起点
*/
public: vector<pair<int,int> > getEXTNextPoint(P p,int offSet,int isEnd);
//根据新的路径更新边信息
public: void addPath(Path path);
};