#pragma once #ifdef _WIN32 #ifdef WIREROUTINGDLL_EXPORTS // VisualStudio DLL 项目模板会将 _EXPORTS 添加到定义预处理器宏。 #define BUNDLE_API __declspec(dllexport) // _WIN32 #else #define BUNDLE_API __declspec(dllimport) #endif #else #define BUNDLE_API #endif #include "Path.h" #include #include #include #include #include #include #include using namespace std; //使用链表存储通道数据结构,BundleNode是链表节点 struct BUNDLE_API BundleNode{ Clip *pc; //指向卡箍 BranchPoint *pb; //指向分支点 Connector *pcn; //指向连接器 int type; //0代表卡箍,1代表分支点,2代表连接器 BundleNode *pre,*next; //链表中的上下节点 int inOut; //卡箍方向是正向为0,反向为1 int rev; //通道节点自创建起是否反向过 int bundleID; //BundleNode所属的BundleID int id; //BundleNode自身的id vector vb; //指向属于本通道段的分支点集合 BundleNode(); P coord(); }; extern BundleNode BUNDLE_API bdNode[MAXPointNum]; extern int BUNDLE_API bdNodeNum; //用数组维护BundleNode信息 //包含线束捆(通道)信息 struct BUNDLE_API Bundle{ int id; //bundle的编号 int length; //总点数 bool abandoned; //代表这个bundle已经被合并 BundleNode *head,*tail; //通道的头尾节点 void init(); Bundle(); //创建一个分支点,初始化其除了链表指针外的其他信息 static BundleNode* createBundleNode(P& tp,int inOut,int bundleID); //根据简单路径构建一个Bundle Bundle(Path& path,int bundleID); //如果首个节点是分支点,返回分支点的标号,否则返回0 int startBranchPoint(); //如果尾部节点是分支点,返回分支点的标号,否则返回0 int endBranchPoint(); //更新输出信息 void updateOutput(vector > >& resClip, vector >& resBranchPoint, vector& startBranchPoint, vector& endBranchPoint, bool basic=false); };