WhirlyGlobe  1.2
A 3D interactive globe toolkit for iOS
/Users/sjg/iPhone/WhirlyGlobe/WhirlyGlobeSrc/WhirlyGlobeLib/include/MarkerGenerator.h
00001 /*
00002  *  MarkerGenerator.h
00003  *  WhirlyGlobeLib
00004  *
00005  *  Created by Steve Gifford on 11/21/11.
00006  *  Copyright 2011 mousebird consulting. All rights reserved.
00007  *
00008  *  Licensed under the Apache License, Version 2.0 (the "License");
00009  *  you may not use this file except in compliance with the License.
00010  *  You may obtain a copy of the License at
00011  *  http://www.apache.org/licenses/LICENSE-2.0
00012  *
00013  *  Unless required by applicable law or agreed to in writing, software
00014  *  distributed under the License is distributed on an "AS IS" BASIS,
00015  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00016  *  See the License for the specific language governing permissions and
00017  *  limitations under the License.
00018  *
00019  */
00020 
00021 #import <math.h>
00022 #import <set>
00023 #import <map>
00024 #import "Identifiable.h"
00025 #import "Drawable.h"
00026 #import "Generator.h"
00027 
00028 namespace WhirlyGlobe
00029 {
00030     
00034 class MarkerGenerator : public Generator 
00035 {
00036 public:
00037     MarkerGenerator();
00038     virtual ~MarkerGenerator();
00039 
00041     void generateDrawables(RendererFrameInfo *frameInfo,std::vector<Drawable *> &drawables);
00042     
00043     typedef std::map<SimpleIdentity,BasicDrawable *> DrawableMap;
00044 
00049     class Marker : public Identifiable
00050     {
00051     public:
00053         void addToDrawables(RendererFrameInfo *frameInfo,DrawableMap &drawables,float minZres);
00054         
00055         RGBAColor color;
00056         GeoCoord loc;
00057         Vector3f norm;
00058         Point3f pts[4];
00059         std::vector<std::vector<TexCoord> > texCoords;
00060         std::vector<SimpleIdentity> texIDs;
00061         NSTimeInterval start;
00062         NSTimeInterval period;
00063         NSTimeInterval fadeUp,fadeDown;
00064         int drawOffset;
00065         float minVis,maxVis;
00066     };
00067 
00069     void addMarker(Marker *marker);
00071     void addMarkers(std::vector<Marker *> markers);
00072     
00074     void removeMarker(SimpleIdentity markerId);
00076     void removeMarkers(std::vector<SimpleIdentity> &markerIDs);
00077     
00079     Marker *getMarker(SimpleIdentity markerId);
00080     
00081 protected:
00082     typedef std::set<Marker *,IdentifiableSorter> MarkerSet;
00083     MarkerSet markers;
00084 };
00085     
00091 class MarkerGeneratorAddRequest : public GeneratorChangeRequest
00092 {
00093 public:
00095     MarkerGeneratorAddRequest(SimpleIdentity genID,MarkerGenerator::Marker *marker);
00097     MarkerGeneratorAddRequest(SimpleIdentity genID,const std::vector<MarkerGenerator::Marker *> &markers);
00098     ~MarkerGeneratorAddRequest();
00099     
00100     virtual void execute2(GlobeScene *scene,Generator *gen);
00101     
00102 protected:
00103     std::vector<MarkerGenerator::Marker *> markers;
00104 };
00105     
00109 class MarkerGeneratorRemRequest : public GeneratorChangeRequest
00110 {
00111 public:
00113     MarkerGeneratorRemRequest(SimpleIdentity genID,SimpleIdentity markerID);
00115     MarkerGeneratorRemRequest(SimpleIdentity genID,const std::vector<SimpleIdentity> markerIDs);
00116     ~MarkerGeneratorRemRequest();
00117     
00118     virtual void execute2(GlobeScene *scene,Generator *gen);
00119     
00120 protected:
00121     std::vector<SimpleIdentity> markerIDs;
00122 };
00123     
00127 class MarkerGeneratorFadeRequest : public GeneratorChangeRequest
00128 {
00129 public:
00130     MarkerGeneratorFadeRequest(SimpleIdentity genID,SimpleIdentity markerID,NSTimeInterval fadeUp,NSTimeInterval fadeDown);
00131     MarkerGeneratorFadeRequest(SimpleIdentity genID,const std::vector<SimpleIdentity> markerIDs,NSTimeInterval fadeUp,NSTimeInterval fadeDown);
00132     
00133     virtual void execute2(GlobeScene *scene,Generator *gen);
00134 
00135 protected:
00136     NSTimeInterval fadeUp,fadeDown;
00137     std::vector<SimpleIdentity> markerIDs;
00138 };
00139     
00140 }