Browse Source

多线缆debug注释

甲方模型数据
divide_struct_def_imp
郑敬润 10 months ago
parent
commit
73e3c56988
  1. 7151
      data/Tinyroute_test/OBJ/cangti_correct.obj
  2. 82
      data/Tinyroute_test/answer2ALL.txt
  3. 39483
      data/Tinyroute_test/clip2/cangti_x_y.xml
  4. 8
      data/Tinyroute_test/connector.csv
  5. 73
      data/Tinyroute_test/wirexml/SE_Sa.xml
  6. 0
      data/demo/OBJ/tinyroute.obj
  7. 0
      data/demo/clip2/out3.xml
  8. 0
      data/demo/connector.csv
  9. 0
      data/demo/temp/atoE.xml
  10. 0
      data/demo/temp/btoE.xml
  11. 0
      data/demo/temp/ctoE.xml
  12. 0
      data/demo/temp/dtoE.xml
  13. 0
      data/demo/temp/etoE.xml
  14. 0
      data/demo/temp/ftoE.xml
  15. 0
      data/demo/wirexml/multi_wire.xml
  16. 4
      include/Astar.h
  17. 8
      include/BasicChannel.h
  18. 4
      include/Const.h
  19. 24
      include/Intersection.h
  20. 53
      src/xmlsql.cpp

7151
data/Tinyroute_test/OBJ/cangti_correct.obj

File diff suppressed because it is too large

82
data/Tinyroute_test/answer2ALL.txt

@ -0,0 +1,82 @@
12
3 1 0 0
clip196 0
1020.1 -387.4 172.7 -3.93 0.368 -0.626
clip204 0
949.8 -380.8 161.6 -3.934 0.368 -0.626
clip210 0
879.5 -374.3 150.4 -3.934 0.368 -0.626
2
80 clip196 10
81 clip204 61.4827
3 1 0 0
clip226 1
1797.4 -466.4 229.6 0 1.049 3.86
clip234 1
1797.3 -458.6 257.6 0 1.204 3.815
F 0
1872.3 -72.6 496.65 -0 -0 -0
1
109 clip226 10
6 1 0 0
clip1540 1
768.5 -139.1 416.4 3.974 -0.219 0.397
clip1751 1
1040.6 -139.3 416.6 4 0 0
clip1728 1
1102.4 -139.3 416.6 4 0 0
clip1722 1
1164.2 -139.3 416.6 4 0 0
clip1714 1
1226 -139.3 416.6 4 0 0
E 0
1715.3 -72.6 496.65 -0 -0 -0
1
704 clip1540 10
2 1 80 0
clip471 1
1020.2 -342.6 305.5 0 1.719 3.612
C 0
1040.6 -129.3 372.3 -0 -0 -0
0
4 1 81 0
clip215 0
809.2 -367.7 139.2 -3.97 0.416 -0.25
clip240 0
700.6 -356.3 132.7 -3.97 0.427 -0.237
clip246 0
521.3 -337 122 -3.97 0.427 -0.237
B 0
239.95 -188.7 13.2 -0 -0 -0
2
102 clip215 99.39
103 clip240 170.653
2 1 0 102
END 0
2047.2 -246.71 188.62 -0 -0 -0
clip109 0
1058.8 -395.4 150.2 -3.97 0.428 -0.239
0
2 1 0 102
clip120 0
221.6 -305.2 38.8 3.97 -0.427 0.2369
clip128 0
400.9 -324.5 49.5 3.97 -0.427 0.2369
1
46 clip120 10
1 1 102 704
clip1553 0
768.6 -239.8 339.1 -0 2.744 2.91
0
2 1 0 103
START 0
14.175 -227.3 104.1 -0 -0 -0
clip250 1
342 -317.7 111.3 3.97 -0.427 0.237
0
2 1 46 0
clip1644 1
240.5 -181.4 -3.2 0.329 3.986 0
A 0
270.85 71.25 -9.9 -0 -0 -0
0

39483
data/Tinyroute_test/clip2/cangti_x_y.xml

File diff suppressed because it is too large

8
data/Tinyroute_test/connector.csv

@ -0,0 +1,8 @@
A,270.85,71.25,-9.9
B,239.95,-188.7,13.2
C,1040.6,-129.3,372.3
D,1226.,-129.3,372.3
E,1715.3,-72.6,496.65
F,1872.3,-72.6,496.65
START,14.175,-227.3,104.1
END,2047.2,-246.71,188.62
1 A 270.85 71.25 -9.9
2 B 239.95 -188.7 13.2
3 C 1040.6 -129.3 372.3
4 D 1226. -129.3 372.3
5 E 1715.3 -72.6 496.65
6 F 1872.3 -72.6 496.65
7 START 14.175 -227.3 104.1
8 END 2047.2 -246.71 188.62

73
data/Tinyroute_test/wirexml/SE_Sa.xml

@ -0,0 +1,73 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE project PUBLIC "-//Mentor Graphics Corporation//Project 2014.1//EN" "D:/MentorGraphics/Capital/dtd/project.dtd">
<!-- Application Version: 2014.1.SP1610.27 [Build 4] - 25 September 2016 (17:59 IST)-->
<project>
<designmgr>
<harnessdesign>
<harnesscontainer>
<connectivity id="_1000">
<connector id="_1001" name="START" partnumber="0000">
<pin id="_1002" name="start">
</pin>
</connector>
<connector id="_1003" name="A" partnumber="0000">
<pin id="_1004" name="a">
</pin>
</connector>
<connector id="_1005" name="B" partnumber="0000">
<pin id="_1006" name="b">
</pin>
</connector>
<connector id="_1007" name="C" partnumber="0000">
<pin id="_1008" name="c">
</pin>
</connector>
<connector id="_1009" name="D" partnumber="0000">
<pin id="_1010" name="d">
</pin>
</connector>
<connector id="_1011" name="E" partnumber="0000">
<pin id="_1012" name="e">
</pin>
</connector>
<connector id="_1013" name="F" partnumber="0000">
<pin id="_1014" name="f">
</pin>
</connector>
<connector id="_1021" name="END" partnumber="0000">
<pin id="_1022" name="end">
</pin>
</connector>
<wire id="_2001" name="Stoa" wirecsa="0.616" outsidediameter="1.415">
<connection pinref="_1002"/>
<connection pinref="_1022"/>
</wire>
<wire id="_2002" name="Stoa" wirecsa="0.616" outsidediameter="1.415">
<connection pinref="_1002"/>
<connection pinref="_1004"/>
</wire>
<wire id="_2003" name="Stoa" wirecsa="0.616" outsidediameter="1.415">
<connection pinref="_1002"/>
<connection pinref="_1006"/>
</wire>
<wire id="_2004" name="Stoa" wirecsa="0.616" outsidediameter="1.415">
<connection pinref="_1002"/>
<connection pinref="_1008"/>
</wire>
<wire id="_2005" name="Stoa" wirecsa="0.616" outsidediameter="1.415">
<connection pinref="_1002"/>
<connection pinref="_1010"/>
</wire>
<wire id="_2006" name="Stoa" wirecsa="0.616" outsidediameter="1.415">
<connection pinref="_1002"/>
<connection pinref="_1012"/>
</wire>
<wire id="_2007" name="Stoa" wirecsa="0.616" outsidediameter="1.415">
<connection pinref="_1002"/>
<connection pinref="_1014"/>
</wire>
</connectivity>
</harnesscontainer>
</harnessdesign>
</designmgr>
</project>

0
data/OBJ/tinyroute.obj → data/demo/OBJ/tinyroute.obj

0
data/clip2/out3.xml → data/demo/clip2/out3.xml

0
data/connector.csv → data/demo/connector.csv

1 A1 3.58 -0.34662 1.5822
2 B1 1.82 -0.31271 1.6172
3 C1 2.18 0.243342 1.6181
4 D1 2.275 2.5863 1.6172
5 E1 3.356 1.7618 1.6172
6 F1 1.375 1.3541 1.6172
7 END 1.7 2.0418 1.4672

0
data/wirexml/atoE.xml → data/demo/temp/atoE.xml

0
data/temp/btoE.xml → data/demo/temp/btoE.xml

0
data/temp/ctoE.xml → data/demo/temp/ctoE.xml

0
data/temp/dtoE.xml → data/demo/temp/dtoE.xml

0
data/temp/etoE.xml → data/demo/temp/etoE.xml

0
data/temp/ftoE.xml → data/demo/temp/ftoE.xml

0
data/temp/multi_wire.xml → data/demo/wirexml/multi_wire.xml

4
include/Astar.h

@ -447,6 +447,8 @@ struct Astar
bool updatePreBranchPoint = false;
bool updateNextBranchPoint = false;
double tempPos1 = 0, tempPos2 = 0;
// 特殊处理分支点
if (points[xs].type == 1 || points[xs].type == 2)
{
int bid = points[xs].ref;
@ -503,7 +505,7 @@ struct Astar
}
int top = 0;
int tag = T * 2;
while (pre[tag])
while (pre[tag]) // pre[tag] 不存在导致无结果,
{
st[++top] = tag;
tag = pre[tag];

8
include/BasicChannel.h

@ -595,11 +595,11 @@ struct BasicChannel
if (inOut != 0)
tp.reverse();
//------------------------mark------------------------
ofs << tp.x << " " << tp.y << " " << tp.z << " ";
ofs << tp.dx << " " << tp.dy << " " << tp.dz << endl;
// for blender input
// ofs << tp.x << " " << tp.y << " " << tp.z << " ";
// ofs << tp.dx << " " << tp.dy << " " << tp.dz << endl;
ofs << tp.x * 100 << " " << tp.y * 100 << " " << tp.z * 100 << " ";
ofs << tp.dx * 100 << " " << tp.dy * 100 << " " << tp.dz * 100 << endl;
// ofs << tp.x * 100 << " " << tp.y * 100 << " " << tp.z * 100 << " ";
// ofs << tp.dx * 100 << " " << tp.dy * 100 << " " << tp.dz * 100 << endl;
}
ofs << partBranchPoint.size() << endl;
for (int j = 0; j < partBranchPoint.size(); j++)

4
include/Const.h

@ -27,7 +27,7 @@ const double MARGIN = 1000; //
//----------------------mark----------------------
const int MAXBranchPointNumOnSegment = 2; // 分支上的最大分支点数
const int MAXPointNum = N + MAXBranchPointNumOnSegment * N; // 最大分支点数加最大卡箍数
double segmentLength = 0.01; //*卡箍到卡箍之间的最长距离,default:0.8
double segmentLength = 0.8; //*卡箍到卡箍之间的最长距离,default:0.8
const double MinClipToBranchPointDistance = 55; // 卡箍到分支点的最短距离,default:55
const double MinBranchPointDistance = 55; // 分支点到分支点的最短距离,default:55
@ -144,6 +144,7 @@ inline double distan(P A, P B, int inOut1, int inOut2)
angel = min(angel, pi / 2 - angel);
double len = distan1(A, B);
// 求交判断并赋值惩罚参数
if (intersection_model == 1)
{
LineSegment lineSegment(Vec3f(A.x, A.y, A.z), Vec3f(B.x, B.y, B.z));
@ -211,6 +212,7 @@ inline double distan(P A, P B, int inOut1, int inOut2)
A和B自动选择最合适的dir
*/
//----------------------mark----------------------
// 多线缆debug:可能距离太短?无法生成分离点导致
inline double distan(P A, P B)
{
// static int without1;

24
include/Intersection.h

@ -55,23 +55,24 @@ public:
BVH_intersection(const Mesh &mesh_) : mesh(mesh_)
{
// ??????????????????
faceCenters.reserve(mesh.indices.size());
// for (const Vec3u &face: mesh.indices) {
// Vec3f center = (mesh.vertices[face[0]] + mesh.vertices[face[1]] + mesh.vertices[face[2]]) / 3.0f;
// faceCenters.push_back(center);
// }
for (std::vector<Vec3u>::const_iterator it = mesh.indices.begin(); it != mesh.indices.end(); ++it)
{
const Vec3u &face = *it;
Vec3f center = (mesh.vertices[face[0]] + mesh.vertices[face[1]] + mesh.vertices[face[2]]) / 3.0f;
faceCenters.push_back(center);
} // VS2008
// indicesList ????0,1,2...?C++11iota??
// std::iota(indicesList.begin(), indicesList.end(), 0);
std::vector<size_t> indicesList(mesh.indices.size());
// std::iota(indicesList.begin(), indicesList.end(), 0);
for (size_t i = 0; i < indicesList.size(); ++i)
{
indicesList[i] = i;
} // Ìæ´ú´úÂë
}
// ??BVH????
try
{
nodes.resize(2 * mesh.indices.size() - 1);
@ -81,24 +82,24 @@ public:
std::cout << "vector.length:" << nodes.size() << " resize_pa:" << (2 * mesh.indices.size() - 1) << std::endl;
std::cerr << "Caught a length_error: " << e.what() << std::endl;
}
// nodes.resize(2 * mesh.indices.size() - 1);
size_t nowIdx = 0;
dfsBuild(indicesList, computeAABB(indicesList), nowIdx);
}
size_t
dfsBuild(std::vector<size_t> &indicesList, AABB aabb, size_t &nowIdx)
// BVH???
size_t dfsBuild(std::vector<size_t> &indicesList, AABB aabb, size_t &nowIdx)
{
const size_t nodeIdx = nowIdx;
nowIdx++;
if (indicesList.size() == 1)
{
// leaf
// nodes[nodeIdx] = {0, indicesList[0], 0, aabb};
nodes[nodeIdx] = BVHNode(0, indicesList[0], 0, aabb); // VS2008
return nodeIdx;
}
// longest axis
int longAxis = -1;
float longAxisLen = -1;
@ -154,6 +155,7 @@ public:
// return {aabb.min, aabb.max};
// }
private:
// ??????????????AABB??????????AABB
AABB computeAABB(const std::vector<size_t> &indices)
{
AABB aabb;

53
src/xmlsql.cpp

@ -67,7 +67,7 @@ struct Readexcel
// cout<<(cell->FirstChildElement()->GetText())<<endl;
s[i] = cell->FirstChildElement()->GetText();
s[i] = cell->FirstChildElement()->GetText();
i++;
}
slist.push_back(s[0]);
@ -201,7 +201,8 @@ void produceXML(const char *xml, const char *connectorFile, string resultfile)
ofs.open("result.txt", ios::out);
string endfilename = "end" + resultfile;
// oendpoint.open(endfilename.c_str(),ios::out);
// 读取线缆起始点数据
readxml(xml, connectorFile);
cout << "wire_pairs num: " << wire_pairs.size() << endl;
@ -218,11 +219,14 @@ void produceXML(const char *xml, const char *connectorFile, string resultfile)
if (inbox(bd.start) && inbox(bd.goal))
{
// 路径规划
cout << "yes" << endl;
Path path = astar.search_pair(bd);
Path path = astar.search_pair(bd); // 多线缆下只能搜索出第一次的路径
// 打印路径
for (int j = 0; j < path.points.size(); j++)
{
cout << path.wirelist[0] << endl;
P pp = path.points[j];
ofs << pp.x << " " << pp.y << " " << pp.z << endl;
cout << setprecision(10) << "(" << pp.x << "," << pp.y << "," << pp.z << ")";
@ -280,34 +284,34 @@ inline void init()
clipSet.computeCenter();
cout << "compute center Finish Y:" << Ycenter << " Z:" << Zcenter << endl;
clipSet.buildChannel();
basicChannel.createChannel();
clipSet.buildChannel(); //?
basicChannel.createChannel(); //?
cout << "basicChannel build Finish" << endl;
basicChannel.createBranchPoint();
basicChannel.createBranchPoint(); //?
cout << "branchPoint create Finish" << endl;
for (int i = 1; i <= branchPointSet.branchPointNum; i++)
{
astar.add_branchPoint(branchPointSet.b[i]);
}
astar.init();
astar.init(); //pnum+2
cout << "astar init Finish clipNum:" << astar.pnum - 2 << " Toatal Point Num:" << astar.tnum << endl;
basicEdge.buildEdgeBetweenClipAndBranchPoint();
basicEdge.buildEdgeBetweenClipAndBranchPoint(); //?
cout << "edge build Finish" << endl;
cout << "INIT Finish" << endl;
}
int _tmain(int argc, char *argv[])
{
// test();
// return 0;
cout << "Start" << endl;
Astar *pastar = &astar;
cout << "Start" << endl;
string mode;
// cin>>mode;
mode = argv[1];
Astar *pastar = &astar;
if (mode == "generateCATIA")
{
// 该模式为基本模式,使用它来生成通道模型
@ -374,9 +378,9 @@ int _tmain(int argc, char *argv[])
cout << "ALL FINISH" << endl;
}
//----------------------mark----------------------
// 该模式为狭小空间模式,使用它来生成狭小空间的路径
else if (mode == "createTinyroute")
{
// 该模式为狭小空间模式,使用它来生成狭小空间的路径
string clipDoc, xmlDoc, connectorFile, OBJDoc, outputFileName;
// cin>>clipDoc>>xmlDoc>>connectorFile>>OBJDoc>>outputFileName;
clipDoc = argv[2];
@ -385,9 +389,11 @@ int _tmain(int argc, char *argv[])
OBJDoc = argv[5];
outputFileName = argv[6];
// 读取obj文件列表
vector<string> OBJFilenames;
getAllFiles(OBJDoc, OBJFilenames);
cout << "OBJfilename.size()" << OBJFilenames.size() << endl;
cout << "OBJfilename.size():" << OBJFilenames.size() << endl;
// 测试模型输入与bvh相交算法
for (int i = 0; i < OBJFilenames.size(); i++)
{
if (read_OBJ(OBJFilenames[i], vertices, indices))
@ -399,10 +405,13 @@ int _tmain(int argc, char *argv[])
cout << "indices_length:" << indices.size() << endl;
// Line segment
intersection_model = 1;
// 测试线段长度、方向
LineSegment lineSegment(Vec3f(3.46, 0.87, 1.57), Vec3f(1.7, 2.04, 1.46)); // VS2008
// 构建BVH树
static BVH_intersection bvh(mesh);
// 判断线段是否与模型相交
bool hit = bvh.intersectWithLineSegment(lineSegment);
cout << "Line segment intersects with Mesh:" << hit << endl;
cout << "Test line segment (3.46, 0.87, 1.57)->(1.7, 2.04, 1.46) intersects with Mesh:" << hit << endl;
}
else
{
@ -410,26 +419,28 @@ int _tmain(int argc, char *argv[])
}
}
// 读取卡箍点
vector<string> clipFileNames;
getAllFiles(clipDoc, clipFileNames);
for (int i = 0; i < clipFileNames.size(); i++)
read_points(clipFileNames[i].c_str(), pastar);
cout << "read points finish" << endl;
// bvh.read_stl(stlFileName.c_str());
time_t r1, r2;
time(&r1);
//?通道初始化
init();
//读取路径起始点
vector<string> filenames;
getAllFiles(xmlDoc, filenames);
cout << "filename.size()" << filenames.size() << endl;
for (int i = 0; i < filenames.size(); i++)
{
cout << "i:" << i << " " << filenames[i] << endl;
// if(i!=0)break;
string wirebh;
stringstream ss;
ss << i;
@ -438,10 +449,12 @@ int _tmain(int argc, char *argv[])
cout << filename << endl;
cout << endl;
string resultname = outputFileName + wirebh + ".txt";
//路径规划
produceXML(filename.c_str(), connectorFile.c_str(), resultname);
}
// string resultname = outputFileName + "ALL.txt";
string resultname = outputFileName + filenames[0][19] + "toEx100.txt";
string resultname = outputFileName + filenames[0].substr(filenames[0].find_last_of("/\\") + 1) + "_ALL.txt";
basicChannel.printBundle(resultname);

Loading…
Cancel
Save