![]() |
WhirlyGlobe
1.2
A 3D interactive globe toolkit for iOS
|
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 }