Browse Source

Merge branch 'master' of http://local.beijingyongan.com:3000/linux-dev/ya-serv

lixioayao 5 years ago
parent
commit
c641d81e7b
2 changed files with 50 additions and 1 deletions
  1. 1 0
      ant.cpp
  2. 49 1
      card_path.cpp

+ 1 - 0
ant.cpp

@@ -377,6 +377,7 @@ void sit_list::read_ant_path(int id)
 	test_find_path(card_path::inst(),point(2768.50,-75.00),point(2768.50,-161.58));
 	test_find_path(card_path::inst(),point(4727,-8.06),point(5427.04,-304.02));
 	test_find_path(card_path::inst(),point(4714.70,-8.06),point(5427.04,-304.02));
+	test_find_path(card_path::inst(),point(4727,-75),point(2200,-75));
 }
 
 void sit_list::init_site(int id)

+ 49 - 1
card_path.cpp

@@ -9,10 +9,12 @@
 #include "zlist.h"
 #include "line.h"
 #include "ant.h"
+#include "config_file.h"
 
 #include "card_path.h"
 #include "visit.h"
 
+extern config_file config;
 namespace{
 
 static const double PI=3.1416;
@@ -196,7 +198,7 @@ void log_path(const std::vector<base_path>&path,const vertex_list&v_list)
 	for(int i=0,len=path.size();i<len;i++)
 	{
 		double c=path[i].arg(v_list)/PI*180;
-		log_info("base_path %.6lf, %03d,(%d,%s),(%d,%s)\n",c,i,path[i][0],v_list[path[i][0]].to_string().c_str(),path[i][1],v_list[path[i][1]].to_string().c_str());
+		log_info("base_path %.6lf, %03d,(%d,%s),(%d,%s)",c,i,path[i][0],v_list[path[i][0]].to_string().c_str(),path[i][1],v_list[path[i][1]].to_string().c_str());
 	}
 }
 struct handle_path :visitor<std::shared_ptr<site>>
@@ -403,6 +405,44 @@ static std::vector<base_path> init_path(std::vector<base_path> & ret,vertex_list
 	log_path(ret,v);
 #endif
 
+	//非路径交点配置
+	std::vector<point> no_cross;
+	auto in_no_cross=[&no_cross](const point&pt){
+		for(auto p:no_cross)
+		{
+			if(p.dist(pt)<3)
+				return true;
+		}
+
+		return false;
+	};
+
+	do
+	{
+		config_file cfg;
+		if(cfg.open("../etc/path-not-cross.ini"))
+			break;
+
+		auto kset=cfg.keys();
+		if(kset.empty())
+			break;
+
+		for(auto k:kset)
+		{
+			const char* v=cfg.get(k,"");
+
+			point tmp;
+			if(sscanf(v,"%lf,%lf",&tmp.x,&tmp.y)==2)
+				no_cross.push_back(tmp);
+		}
+
+		for(auto p:no_cross)
+		{
+			log_info("no_cross_point:x=%lf,y=%lf",p.x,p.y);
+		}
+		break;
+	}while(1);
+
 	std::vector<std::vector<int>> p0(ret.size());
 	std::vector<base_path> ret2;
 	for(int i=0,len=ret.size();i<len;i++)
@@ -416,6 +456,9 @@ static std::vector<base_path> init_path(std::vector<base_path> & ret,vertex_list
 			if(cr.empty())
 				continue;
 
+			if(in_no_cross(cr))
+				continue;
+
 			double arg=fabs(ret[i].as_line(v).arg()-ret[j].as_line(v).arg());
 			while(arg>PI/2) 
 				arg-=PI/2;
@@ -829,6 +872,11 @@ struct graph
 
 		rc.erase(it1,rc.end());
 
+		if(rc.size() && from.dist(*rc.begin())<0.1)
+		{
+			rc.erase(rc.begin());
+		}
+
 		return std::move(rc);
 	}