コード例 #1
0
void CWintec::parseWayPoints(QByteArray data) {

	for(int pos = 0; pos < data.size(); pos += TrackPoint::size()) {
		//fwrite(data.mid(pos, TrackPoint::size()).data(), data.mid(pos, TrackPoint::size()).size(), 1, fd);
		TrackPoint* tp = dataToWayPoint(data.mid(pos, TrackPoint::size()));
		if(tp == 0) {
			continue;
		}

		if(tp->isLogPoint()) {
			emit newLogPoint(tp);
		}
		else {
			if(tp->isBeginOfTrack()) {
				if(m_tmp_track != 0) {
					m_tmp_track->commit();
					emit newTrack(m_tmp_track);
					qDebug() << QString("End of Track (%1 - %2 , %3 - %4)").arg(m_tmp_track->getMinLong()).arg(m_tmp_track->getMaxLong()).arg(m_tmp_track->getMinLat()).arg(m_tmp_track->getMaxLat());
				}
				m_tmp_track = new Track();
				//m_tmp_track->setIndex(trackindex);
				// trackindex++;
				//m_track_collection->append(track);
			}
			m_tmp_track->append(tp);
		}

	}
//	m_tmp_track->commit();
//	emit newTrack(m_tmp_track);

}
コード例 #2
0
ファイル: track.cpp プロジェクト: ViktorNova/musikernel
void Track :: disconnect()
{
  for(vector<TrackPoint*>::iterator i = point.begin();
      i != point.end();
      ++i) {
    TrackPoint *tp = (*i);
    tp->disconnect();
  }
}
コード例 #3
0
ファイル: track.cpp プロジェクト: ViktorNova/musikernel
void Track :: step(const TimeType &time)
{
  if(time > first && time < last) {
    unsigned int k = (unsigned int)(time-first);
    TrackPoint *tp = point[k];
    tp->destroy();
    point[k] = NULL;
  }
}
コード例 #4
0
ファイル: track.cpp プロジェクト: ViktorNova/musikernel
Track :: ~Track() {
  for(vector<TrackPoint*>::iterator i = point.begin();
      i != point.end();
      ++i) {
    TrackPoint *tp = (*i);
    if(tp) {
       tp->destroy();
    }
  }
}
コード例 #5
0
ファイル: kml.cpp プロジェクト: NicolasJourden/OpenCPN
KmlPastebufferType Kml::ParseTrack( TiXmlNode* node, wxString& name ) {
    parsedTrack = new Track();
    parsedTrack->m_TrackNameString = name;

    if( 0 == strncmp( node->ToElement()->Value(), "LineString", 10 ) ) {
        dPointList coordinates;
        if( ParseCoordinates( node, coordinates ) > 2 ) {
            TrackPoint* trackpoint = NULL;
            TrackPoint* prevPoint = NULL;

            for( unsigned int i=0; i<coordinates.size(); i++ ) {
                trackpoint = new TrackPoint(coordinates[i].y, coordinates[i].x);
                parsedTrack->AddPoint( trackpoint );
            }
        }
        return KML_PASTE_TRACK;
    }

    if( 0 == strncmp( node->ToElement()->Value(), "gx:Track", 8 ) ) {
        TrackPoint* trackpoint = NULL;
        TiXmlElement* point = node->FirstChildElement( "gx:coord" );
        int pointCounter = 0;

        for( ; point; point=point->NextSiblingElement( "gx:coord" ) ) {
            double lat, lon;
            std::stringstream ss( point->GetText() );
            std::string txtCoord;
            std::getline( ss, txtCoord, ' ' );
            lon = atof( txtCoord.c_str() );
            std::getline( ss, txtCoord, ' ' );
            lat = atof( txtCoord.c_str() );

            parsedTrack->AddPoint( new TrackPoint(lat, lon) );
            pointCounter++;
        }

        TiXmlElement* when = node->FirstChildElement( "when" );

        wxDateTime whenTime;

        int i = 0;
        for( ; when; when=when->NextSiblingElement( "when" ) ) {
            trackpoint = parsedTrack->GetPoint(i);
            if( ! trackpoint ) continue;
            whenTime.ParseFormat( wxString( when->GetText(), wxConvUTF8 ), _T("%Y-%m-%dT%H:%M:%SZ") );
            trackpoint->SetCreateTime(whenTime);
            i++;
        }

        return KML_PASTE_TRACK;
    }
    return KML_PASTE_INVALID;
}
コード例 #6
0
ファイル: kml.cpp プロジェクト: NicolasJourden/OpenCPN
wxString Kml::MakeKmlFromTrack( Track* track ) {
    TiXmlDocument xmlDoc;
    wxString name = _("OpenCPN Track");
    if( track->m_TrackNameString.Length() ) name = track->m_TrackNameString;
    TiXmlElement* document = StandardHead( xmlDoc, name );

    TiXmlElement* pmTrack = new TiXmlElement( "Placemark" );
    document->LinkEndChild( pmTrack );

    TiXmlElement* pmName = new TiXmlElement( "name" );
    pmTrack->LinkEndChild( pmName );
    TiXmlText* pmNameVal = new TiXmlText( track->m_TrackNameString.mb_str( wxConvUTF8 ) );
    pmName->LinkEndChild( pmNameVal );

    TiXmlElement* gxTrack = new TiXmlElement( "gx:Track" );
    pmTrack->LinkEndChild( gxTrack );

    std::stringstream lineStringCoords;

    for(int i=0; i<track->GetnPoints(); i++) {
        TrackPoint *trackpoint = track->GetPoint(i);

        TiXmlElement* when = new TiXmlElement( "when" );
        gxTrack->LinkEndChild( when );

        wxDateTime whenTime( trackpoint->GetCreateTime() );
        TiXmlText* whenVal = new TiXmlText( whenTime.Format( _T("%Y-%m-%dT%H:%M:%SZ") ).mb_str( wxConvUTF8 ) );
        when->LinkEndChild( whenVal );
    }

    for(int i=0; i<track->GetnPoints(); i++) {
        TrackPoint *trackpoint = track->GetPoint(i);

        TiXmlElement* coord = new TiXmlElement( "gx:coord" );
        gxTrack->LinkEndChild( coord );
        wxString coordStr = wxString::Format( _T("%f %f 0.0"), trackpoint->m_lon, trackpoint->m_lat );
        TiXmlText* coordVal = new TiXmlText( coordStr.mb_str( wxConvUTF8 ) );
        coord->LinkEndChild( coordVal );
    }


    TiXmlPrinter printer;
    printer.SetIndent( "  " );
    xmlDoc.Accept( &printer );

    return wxString( printer.CStr(), wxConvUTF8 );
}
コード例 #7
0
void CWintec::createTrackpoints() {
	FILE* fd;
	Track* track = 0;
	fd = fopen("outfile2.tkraw", "wb");
    qDebug() << QString("createTrackpoints()");
    int trackindex = 0;

    // m_track_collection->clear();

	for(int pos = 0; pos < m_log_buf.size(); pos += TrackPoint::size()) {
		fwrite(m_log_buf.mid(pos, TrackPoint::size()).data(), m_log_buf.mid(pos, TrackPoint::size()).size(), 1, fd);
		TrackPoint* tp = new TrackPoint(m_log_buf.mid(pos, TrackPoint::size()));


		if(tp->isLogPoint()) {
			emit newLogPoint(tp);
		}
		else {
			if(tp->isBeginOfTrack()) {
				if(track != 0) {
					track->commit();
					emit newTrack(track);
					qDebug() << QString("End of Track (%1 - %2 , %3 - %4)").arg(track->getMinLong()).arg(track->getMaxLong()).arg(track->getMinLat()).arg(track->getMaxLat());
				}
				track = new Track();
				track->setIndex(trackindex);
				trackindex++;
				//m_track_collection->append(track);
			}
			track->append(tp);
		}

	}
	track->commit();
	emit newTrack(track);
//	m_track_view->setTrackColletcion(m_track_collection);
//	m_track_collection->commit();

//	ui.treeView->resizeColumnToContents(0);
//	ui.treeView->resizeColumnToContents(1);
//	ui.treeView->resizeColumnToContents(2);
//	ui.treeView->resizeColumnToContents(3);
//	fclose(fd);

//	m_track_view->update();
}
コード例 #8
0
ファイル: EditorPoint.cpp プロジェクト: bercik/gear
	void EditorPoint::onMouseMoved()
	{
		findPointAt(m_mousePos, m_impl->m_lightIndex);
		
		if (m_impl->m_selectedIndex != -1)
		{
			TrackPoint trackPoint = m_track.getPoint(m_impl->m_selectedIndex);

			if (isFirstKey(CL_KEY_SHIFT))
			{
				float lastMaxShiftDeltaLength = m_impl->m_maxShiftPoint.distance(m_lastMousePos);
				float lastMinShiftDeltaLength = m_impl->m_minShiftPoint.distance(m_lastMousePos);

				float nowMaxShiftDeltaLength = m_impl->m_maxShiftPoint.distance(m_mousePos);
				float nowMinShiftDeltaLength = m_impl->m_minShiftPoint.distance(m_mousePos);

				float maxShiftDeltaLength = nowMaxShiftDeltaLength - lastMaxShiftDeltaLength;
				float minShiftDeltaLength = nowMinShiftDeltaLength - lastMinShiftDeltaLength;

				double newShift = trackPoint.getShift();

				if (maxShiftDeltaLength > 0.0f && minShiftDeltaLength < 0.0f)
					newShift += maxShiftDeltaLength / 100.0f;
				else if (maxShiftDeltaLength < 0.0f && minShiftDeltaLength > 0.0f)
					newShift -= minShiftDeltaLength / 100.0f;
				else if (nowMaxShiftDeltaLength > nowMinShiftDeltaLength)
					newShift += maxShiftDeltaLength / 100.0f;
				else
					newShift -= maxShiftDeltaLength / 100.0f;

				if (newShift >= -1.0f && newShift <= 1.0f)
					trackPoint.setShift(newShift);
			}
			else if (isFirstKey(CL_MOUSE_LEFT))
			{
				trackPoint.setPosition(trackPoint.getPosition() + m_deltaMousePos);
			}

			triangulate(m_impl->m_selectedIndex, false);
		}
	}
コード例 #9
0
ファイル: Track.cpp プロジェクト: SamsonovAnton/OpenCPN
Track *ActiveTrack::DoExtendDaily()
{
    Track *pExtendTrack = NULL;
    TrackPoint *pExtendPoint = NULL;

    TrackPoint *pLastPoint = GetPoint( 0 );

    wxTrackListNode *track_node = pTrackList->GetFirst();
    while( track_node ) {
        Track *ptrack = track_node->GetData();

        if( !ptrack->m_bIsInLayer && ptrack->m_GUID != m_GUID ) {
            TrackPoint *track_node = ptrack->GetLastPoint();
            if( track_node->GetCreateTime() <= pLastPoint->GetCreateTime() ) {
                if( !pExtendPoint  || track_node->GetCreateTime() > pExtendPoint->GetCreateTime() ) {
                    pExtendPoint = track_node;
                    pExtendTrack = ptrack;
                }
            }
        }
        track_node = track_node->GetNext();                         // next track
    }
    if( pExtendTrack
        && pExtendTrack->GetPoint( 0 )->GetCreateTime().FromTimezone( wxDateTime::GMT0 ).IsSameDate(pLastPoint->GetCreateTime().FromTimezone( wxDateTime::GMT0 ) ) ) {
        int begin = 1;
        if( pLastPoint->GetCreateTime() == pExtendPoint->GetCreateTime() ) begin = 2;
        pSelect->DeleteAllSelectableTrackSegments( pExtendTrack );
        wxString suffix = _T("");
        if( GetName().IsNull() ) {
            suffix = pExtendTrack->GetName();
            if( suffix.IsNull() ) suffix = wxDateTime::Today().FormatISODate();
        }
        pExtendTrack->Clone( this, begin, GetnPoints(), suffix );
        pSelect->AddAllSelectableTrackSegments( pExtendTrack );
        pSelect->DeleteAllSelectableTrackSegments( this );

        return pExtendTrack;
    } else {
        if( GetName().IsNull() )
            SetName(wxDateTime::Today().FormatISODate());
        return NULL;
    }
}
コード例 #10
0
TrackPoint* CWintec::dataToWayPoint(QByteArray data) {
	bool data_valid = true;
	TrackPoint* tp = new TrackPoint();


	if(data.size() != 16) {
		data_valid = false;
	}

	uint32_t* tmp;
	uint16_t *stmp;

	stmp = reinterpret_cast<uint16_t*>(data.mid(0, 2).data());
	tp->isBeginOfTrack(*stmp & 0x01);
    // m_is_begin_of_track = *stmp & 0x01;
	tp->isLogPoint(*stmp & 0x02);
	// m_is_log_point = *stmp & 0x02;
	tp->isOverSpeed(*stmp & 0x04);
    //m_is_over_speed = *stmp & 0x04;

    tmp = reinterpret_cast<uint32_t*>(data.mid(2, 4).data());

    int sec    = ((*tmp >>  0) & 0x3F);
    int min    = ((*tmp >>  6) & 0x3F);
    int hour   = ((*tmp >> 12) & 0x1F);
    int mday   = ((*tmp >> 17) & 0x1F);
    int mon    = ((*tmp >> 22) & 0x0F);
    int year   = ((*tmp >> 26) & 0x3F);

    //m_time.setDate(QDate(year+2000, mon, mday));
    //m_time.setTime(QTime(hour, min, sec));
    //m_time.setTimeSpec(Qt::UTC);

    QDateTime tmp_dt;
    tmp_dt.setDate(QDate(year+2000, mon, mday));
    tmp_dt.setTime(QTime(hour, min, sec));
    tmp_dt.setTimeSpec(Qt::UTC);
    tp->setTime(tmp_dt);
    if(tp->getTime().isValid() == false) {
		data_valid = false;
    }

    tmp = reinterpret_cast<uint32_t*>(data.mid(6, 4).data());
    tp->setLat((double) (*tmp) / 10000000);
    if(tp->getLat() < -90.0 || tp->getLat() > 90.0 ) {
		data_valid = false;
    }

    tmp = reinterpret_cast<uint32_t*>(data.mid(10, 4).data());
    tp->setLong((double) (*tmp) / 10000000);
    if(tp->getLong() < -180.0 || tp->getLong() >= 180.0 ) {
		data_valid = false;
    }

    stmp = reinterpret_cast<uint16_t*>(data.mid(14, 2).data());
    tp->setAlt((double) (*stmp));

    if(data_valid == false) {
    	delete tp;
    	tp = 0;
    }

	return tp;
}