コード例 #1
0
    void build(utymap::meshing::Polygon& polygon)
    {
        ClipperLib::ClipperOffset offset;
        ClipperLib::Path path;
        path.reserve(polygon.points.size() / 2);

        auto lastPointIndex = polygon.points.size() - 2;
        double min = std::numeric_limits<double>::max();
        for (std::size_t i = 0; i < polygon.points.size(); i += 2) {
            auto nextIndex = i == lastPointIndex ? 0 : i + 2;

            utymap::meshing::Vector2 v1(polygon.points[i], polygon.points[i + 1]);
            utymap::meshing::Vector2 v2(polygon.points[nextIndex], polygon.points[nextIndex + 1]);

            min = std::min(min, utymap::meshing::Vector2::distance(v1, v2));

            path.push_back(ClipperLib::IntPoint(static_cast<ClipperLib::cInt>(v1.x * Scale), 
                                                static_cast<ClipperLib::cInt>(v1.y * Scale)));
        }

        offset.AddPath(path, ClipperLib::JoinType::jtMiter, ClipperLib::EndType::etClosedPolygon);

        ClipperLib::Paths solution;
        // NOTE: use minimal side value as reference for offsetting.
        offset.Execute(solution, -(min / 10) * Scale);

        // NOTE: this is unexpected result for algorithm below, fallback to flat roof.
        if (solution.size() != 1 || solution[0].size() != path.size()) {
            return FlatRoofBuilder::build(polygon);
        }

        buildMansardShape(polygon, solution[0], findFirstIndex(solution[0][0], polygon));
    }
コード例 #2
0
int main(int argc , char *argv[])
{

	int socket_desc , client_sock , c ,*index , mainServerPort = 8852;
	struct sockaddr_in server , client , mainServer;
	struct arg_struct *args;
	int lastPos;

	if( argc != 3 )
	{
		printf("Argument no match\n");
		exit(0);
	}


	initialize();
	
	//create mainServer socket
    MainServerSock = socket(AF_INET , SOCK_STREAM , 0);
    if (MainServerSock == -1)
    {
        printf("Could not create socket for mainserver");
    }
	
	mainServer.sin_addr.s_addr = inet_addr(argv[1]);
    mainServer.sin_family = AF_INET;
    sscanf(argv[2],"%d",&mainServerPort);
    mainServer.sin_port = htons( mainServerPort );
 
    //Connect to remote server
    if (connect(MainServerSock , (struct sockaddr *)&mainServer , sizeof(mainServer)) < 0)
    {
        perror("connect mainserver failed. Error");
        return 1;
    }
	
	pthread_t mainServer_send_thread ;
    pthread_attr_t mainServer_send_attr ;

    pthread_attr_init( & mainServer_send_attr ) ;
    pthread_create( & mainServer_send_thread, & mainServer_send_attr, sendToMainServer, NULL ) ;
    
	pthread_t mainServer_recieve_thread ;
    pthread_attr_t mainServer_recieve_attr ;

    pthread_attr_init( & mainServer_recieve_attr ) ;
    pthread_create( & mainServer_recieve_thread, & mainServer_recieve_attr, recieveFromMainServer, NULL ) ;
    
	//end mainServer socket
	
	
	//Create client socket
	socket_desc = socket(AF_INET , SOCK_STREAM , 0);
	if (socket_desc == -1)
	{
		printf("Could not create socket");
	}
	puts("Socket created");
	
	//Prepare the sockaddr_in structure
	/// welcoming socket
	server.sin_family = AF_INET;
	server.sin_addr.s_addr = INADDR_ANY;
	server.sin_port = htons( 24251 );
	
	//Bind
	if( bind(socket_desc,(struct sockaddr *)&server , sizeof(server)) < 0)
	{
		//print the error message
		perror("bind failed. Error");
		return 1;
	}
	puts("bind done");
	
	//Listen
	listen(socket_desc , (MAX_CLIENT_QUEUE > SOMAXCONN ? SOMAXCONN : MAX_CLIENT_QUEUE ) );
		
	
	//Accept and incoming connection
	puts("Waiting for incoming connections...");
	c = sizeof(struct sockaddr_in);
	
	while( (client_sock = accept(socket_desc, (struct sockaddr *)&client, (socklen_t*)&c)) )
	{
		puts("Connection accepted");
		
		pthread_t sniffer_thread;
		
		lastPos = findFirstIndex();
		if( lastPos == -1 )
		{
			puts("sorry! server is busy :D ");
			continue;
		}

		//
		clients[lastPos].socket = client_sock;

		args = malloc(sizeof(struct arg_struct)); 
		args->socket = client_sock;
		args->index = lastPos;
		if( pthread_create( &sniffer_thread , NULL ,  connection_handler , (void*) args) < 0)
		{
			perror("could not create thread for connection");
			return 1;
		}
		
		pthread_t showMessage;
		index = malloc(sizeof(int));
		*index = lastPos;
		if( pthread_create( &showMessage , NULL ,  outputEach5Second , (void*) index) < 0)
		{
			perror("could not create thread for show message");
			return 1;
		}
		//Now join the thread , so that we dont terminate before the thread
		//pthread_join( sniffer_thread , NULL);
		puts("Handlers assigned");
	}
	
	if (client_sock < 0)
	{
		perror("accept failed");
		return 1;
	}
	
	return 0;
}