|
From: <joh...@ie...> - 2000-04-06 23:59:13
|
Patch: vhclmaps-000407-johnston-019
For: vhclmaps-0.7.4
Author: joh...@us...
Subject: move utmgeo,geoutm,utmzone commands to mapserv, more composite vehicle improvements
Requires:
This is an intermediate patch to vhclmaps-0.7.4. To apply, cd to the
top-level directory of the vhclmaps source tree (the directory with src
and config subdirs), and apply like this:
patch -p0 <ThisFile
Summary of Changes:
- migrate commands for utmtogeo(), geotoutm(), and utmzone() from
projserv to mapserv, making them accessible from more layers of
vhclmaps.
- more composite vehicle work, automating the rotating of the group of
vehicles when heading changes.
Index: MapServ/Imakefile
diff -c MapServ/Imakefile:1.2 MapServ/Imakefile:1.3
*** MapServ/Imakefile:1.2 Tue Jan 25 03:22:01 2000
--- src/MapServ/Imakefile Fri Apr 7 04:24:53 2000
***************
*** 20,25 ****
--- 20,26 ----
Obj(geomdist)
Obj(mapfunc)
Obj(maphandler)
+ Obj(mapprojfunc)
IncludeDependencies()
Index: MapServ/maphandler.c
diff -c MapServ/maphandler.c:1.2 MapServ/maphandler.c:1.3
*** MapServ/maphandler.c:1.2 Sat Mar 18 02:24:06 2000
--- src/MapServ/maphandler.c Fri Apr 7 04:24:53 2000
***************
*** 23,28 ****
--- 23,29 ----
#include <ComTerp/comterpserv.h>
#include <MapServ/mapfunc.h>
+ #include <MapServ/mapprojfunc.h>
#include <MapServ/maphandler.h>
MapservHandler::MapservHandler(void) : ComterpHandler() {
***************
*** 74,79 ****
--- 75,84 ----
comterp->add_command("exportgrtr", new ExportFCGrTrFunc(expgraphic_func));
comterp->add_command("printgr", new PrintFCGrFunc(comterp));
comterp->add_command("points", new MapPointsFunc(comterp));
+
+ comterp->add_command("utmzone", new UtmZoneFunc(comterp));
+ comterp->add_command("utmtogeo", new UtmToGeoFunc(comterp));
+ comterp->add_command("geotoutm", new GeoToUtmFunc(comterp));
#if !defined(VPF_FREE)
comterp->add_command("loadvpffc", new LoadVpfFCFunc(comterp));
Index: mapserv/README
diff -c mapserv/README:1.2 mapserv/README:1.3
*** mapserv/README:1.2 Wed Mar 29 23:08:40 2000
--- src/mapserv/README Fri Apr 7 04:24:55 2000
***************
*** 75,80 ****
--- 75,86 ----
exportgrtr(tr_str) -- default transformer string for feature classes
printgr(fclass) -- print drawtool format to stdout
+ PROJECTION COMMANDS
+
+ int=utmzone(longitude) -- return utm zone for a given longitude
+ utme,utmn=geotoutm(long,lat) -- convert geo(longitude/latitude) to utm
+ long,lat=geotoutm(utme,utmn zone) -- convert utm to geo (longitude/latitude)
+
UTILITY COMMANDS
int=utmzone(longitude) -- return utm zone for a given longitude
Index: UtmUnidraw/utmeditor.c
diff -c UtmUnidraw/utmeditor.c:1.4 UtmUnidraw/utmeditor.c:1.5
*** UtmUnidraw/utmeditor.c:1.4 Tue Mar 21 12:03:21 2000
--- src/UtmUnidraw/utmeditor.c Fri Apr 7 04:24:56 2000
***************
*** 40,45 ****
--- 40,47 ----
#include <Attribute/attrlist.h>
#include <Attribute/attrvalue.h>
+ // #define FRAME_COMMANDS /* add flipbook commands to interpeter */
+
/*****************************************************************************/
UtmEditor::UtmEditor(OverlayComp* gc, OverlayKit* ok)
***************
*** 131,137 ****
--- 133,143 ----
comterp->add_command("mapviewstate", new MapViewStateFunc(comterp, this));
comterp->add_command("utmtoscreen", new UtmToScreenFunc(comterp, this));
+ #if defined(FRAME_COMMANDS)
+ FrameEditor::AddCommands(comterp);
+ #else
ComEditor::AddCommands(comterp);
+ #endif
MapservHandler::AddCommands(comterp);
// override more generic dot func
Index: UtmUnidraw/utmkit.h
diff -c UtmUnidraw/utmkit.h:1.1 UtmUnidraw/utmkit.h:1.2
*** UtmUnidraw/utmkit.h:1.1 Mon Aug 2 13:53:25 1999
--- src/UtmUnidraw/utmkit.h Fri Apr 7 04:24:56 2000
***************
*** 1,4 ****
--- 1,5 ----
/*
+ * Copyright 2000 IET Inc.
* Copyright 1997 Vectaport Inc.
*
* Permission to use, copy, modify, distribute, and sell this software and
***************
*** 47,52 ****
--- 48,54 ----
virtual Glyph* MakeToolbar();
virtual Glyph* MakeStates();
virtual MenuItem* MakeFileMenu();
+ virtual MenuItem* MakeStructureMenu() { return nil; }
virtual MenuItem* MakeRouteMenu();
virtual MenuItem* MakeMapMenu();
virtual Glyph* MakeMenus();
Index: ProjServ/projfunc.c
diff -c ProjServ/projfunc.c:1.6 ProjServ/projfunc.c:1.7
*** ProjServ/projfunc.c:1.6 Thu Mar 30 05:30:52 2000
--- src/ProjServ/projfunc.c Fri Apr 7 04:24:58 2000
***************
*** 315,410 ****
result.object_compview(true);
push_stack(result);
}
-
- /*****************************************************************************/
-
- UtmZoneFunc::UtmZoneFunc(ComTerp* comterp) : ComFunc(comterp) {
- }
-
- void UtmZoneFunc::execute() {
- ComValue longv(stack_arg(0));
- reset_stack();
- ComValue retval(MapProjection::utmzone(longv.float_val()));
- push_stack(retval);
- }
-
- /*****************************************************************************/
-
- UtmToGeoFunc::UtmToGeoFunc(ComTerp* comterp) : ComFunc(comterp) {
- }
-
- void UtmToGeoFunc::execute() {
- ComValue utmsv(stack_arg(0));
- ComValue zonev(stack_arg(1));
- reset_stack();
- char zs[40];
- sprintf(zs, "zone=%f", zonev.float_val());
- char* parms[4];
- parms[0] = "proj=utm";
- parms[1] = "ellps=WGS84";
- parms[2] = zs;
- parms[3] = "no_defs";
- PJ* proj= pj_init(4, parms);
- AttributeValueList *avl = utmsv.is_type(ComValue::ArrayType)
- ? utmsv.array_val() : nil;
- if (avl && proj) {
- Iterator i;
- avl->First(i);
- UV data;
- data.u = avl->GetAttrVal(i)->double_val();
- avl->Next(i);
- data.v = avl->GetAttrVal(i)->double_val();
- data = pj_inv(data, proj);
- double lon = data.u * RAD_TO_DEG;
- double lat = data.v * RAD_TO_DEG;
- AttributeValueList* navl = new AttributeValueList();
- navl->Append(new ComValue(lon));
- navl->Append(new ComValue(lat));
- ComValue retval(navl);
- push_stack(retval);
- }
- delete proj;
- }
-
- /*****************************************************************************/
-
- GeoToUtmFunc::GeoToUtmFunc(ComTerp* comterp) : ComFunc(comterp) {
- }
-
- void GeoToUtmFunc::execute() {
- ComValue lonlatv(stack_arg(0));
- reset_stack();
- AttributeValueList *avl = lonlatv.is_type(ComValue::ArrayType)
- ? lonlatv.array_val() : nil;
- if (avl && avl->Number()==2) {
- Iterator i;
- avl->First(i);
- double lon = avl->GetAttrVal(i)->double_val();
- avl->Next(i);
- double lat = avl->GetAttrVal(i)->double_val();
- char ls[40];
- sprintf(ls, "lon_0=%f", lon);
- char* parms[4];
- parms[0] = "proj=utm";
- parms[1] = "ellps=WGS84";
- parms[2] = ls;
- parms[3] = "no_defs";
- PJ* proj= pj_init(4, parms);
- if (proj) {
- UV data;
- data.u = lon * DEG_TO_RAD;
- data.v = lat * DEG_TO_RAD;
- data = pj_fwd(data, proj);
- double lat = data.v * RAD_TO_DEG;
- AttributeValueList* navl = new AttributeValueList();
- navl->Append(new ComValue(data.u));
- navl->Append(new ComValue(data.v));
- ComValue retval(navl);
- push_stack(retval);
- }
- delete proj;
- }
- }
-
-
-
--- 315,317 ----
Index: ProjServ/projfunc.h
diff -c ProjServ/projfunc.h:1.3 ProjServ/projfunc.h:1.4
*** ProjServ/projfunc.h:1.3 Thu Mar 30 05:30:52 2000
--- src/ProjServ/projfunc.h Fri Apr 7 04:24:58 2000
***************
*** 66,95 ****
_spacing_symid, _resolution_symid;
};
- class UtmZoneFunc : public ComFunc {
- public:
- UtmZoneFunc(ComTerp*);
- virtual void execute();
- virtual const char* docstring() {
- return "int=%s(longitude) -- return utm zone for given longitude"; }
- };
-
- class UtmToGeoFunc : public ComFunc {
- public:
- UtmToGeoFunc(ComTerp*);
- virtual void execute();
- virtual const char* docstring() {
- return "long,lat=%s(utme,utmn zone) -- convert utm to geo (longitude/latitude)"; }
- };
-
- class GeoToUtmFunc : public ComFunc {
- public:
- GeoToUtmFunc(ComTerp*);
- virtual void execute();
- virtual const char* docstring() {
- return "utme,utmn=%s(long,lat) -- convert geo (longitude/latitude) to utm"; }
- };
-
#endif
--- 66,71 ----
Index: ProjServ/projhandler.c
diff -c ProjServ/projhandler.c:1.4 ProjServ/projhandler.c:1.5
*** ProjServ/projhandler.c:1.4 Thu Mar 30 05:30:52 2000
--- src/ProjServ/projhandler.c Fri Apr 7 04:24:58 2000
***************
*** 22,27 ****
--- 22,28 ----
*/
#include <MapServ/mapfunc.h>
+ #include <MapServ/mapprojfunc.h>
#include <UtmUnidraw/utmfunc.h>
#include <ComTerp/comterpserv.h>
#include <ProjServ/projfunc.h>
Index: projserv/README
diff -c projserv/README:1.3 projserv/README:1.4
*** projserv/README:1.3 Thu Mar 30 05:30:54 2000
--- src/projserv/README Fri Apr 7 04:25:00 2000
***************
*** 34,45 ****
fclass=graticulefc(:startlon -180.0 :endlon 180.0 :startlat -90.0 :endlat :90.0 :spacing 15.0 :resolution 5.0) -- create a graticule feature class
intlist=vpftileidsbygeo(dbpathstr libname sw_lon sw_lat ne_lon ne_lat) -- return ids of VPF tiles containing a geo rectangle
- PROJECTION COMMANDS
-
- int=utmzone(longitude) -- return utm zone for a given longitude
- utme,utmn=geotoutm(long,lat) -- convert geo(longitude/latitude) to utm
- long,lat=geotoutm(utme,utmn zone) -- convert utm to geo (longitude/latitude)
-
SEE ALSO
mapserv
--- 34,39 ----
Index: Vehicle/compositevhcl.c
diff -c Vehicle/compositevhcl.c:1.3 Vehicle/compositevhcl.c:1.4
*** Vehicle/compositevhcl.c:1.3 Wed Mar 29 23:08:49 2000
--- src/Vehicle/compositevhcl.c Fri Apr 7 04:25:03 2000
***************
*** 45,50 ****
--- 45,53 ----
_loc[0] = cx/_nvhcls;
_loc[1] = cy/_nvhcls;
_loc[2] = cz/_nvhcls;
+ _dir[0] = 0;
+ _dir[1] = 1;
+ _dir[0] = 0;
_defer_composite_update = false;
}
***************
*** 66,74 ****
--- 69,79 ----
cx /= _nvhcls;
cy /= _nvhcls;
cz /= _nvhcls;
+ #if 0
_dir[0] = cx - _loc[0];
_dir[1] = cy - _loc[1];
_dir[2] = cz - _loc[2];
+ #endif
_loc[0] = cx;
_loc[1] = cy;
_loc[2] = cz;
***************
*** 77,82 ****
--- 82,88 ----
void CompositeVehicle::update(Observable* obs) {
if (!_defer_composite_update) {
+ Vehicle::update(obs);
recompute();
notify();
}
***************
*** 233,271 ****
void CompositeVehicle::jumpturn(float x, float y, float z,
float dx, float dy) {
! if (dx || dy) {
! defer_composite_update()=true;
! int nvhcls = nsubvhcls();
! for(int i=0; i<nvhcls; i++) {
! Vehicle* subv = subvhcl(i);
! if (subv) subv->jumpturn(x, y, z, dx, dy);
! }
! defer_composite_update()=false;
! recompute();notify();
}
}
void CompositeVehicle::jumpturn(float x, float y, float z,
float dx, float dy, float dz) {
! if (dx || dy || dz) {
! defer_composite_update()=true;
! int nvhcls = nsubvhcls();
! for(int i=0; i<nvhcls; i++) {
! Vehicle* subv = subvhcl(i);
! if (subv) subv->jumpturn(x, y, z, dx, dy);
! }
! defer_composite_update()=false;
! recompute();notify();
! }
}
void CompositeVehicle::jumpturn(float* loc, float* dir, int n) {
defer_composite_update()=true;
int nvhcls = nsubvhcls();
for(int i=0; i<nvhcls; i++) {
Vehicle* subv = subvhcl(i);
! if (subv) subv->jumpturn(loc, dir, n);
! }
defer_composite_update()=false;
recompute();notify();
}
--- 239,315 ----
void CompositeVehicle::jumpturn(float x, float y, float z,
float dx, float dy) {
! float angle =
! (asin(dy/sqrt(dx*dx+dy*dy)) - asin(ydir()/sqrt(xdir()*xdir()+ydir()*ydir())))*RAD_TO_DEG;
! rotate2d(angle);
!
! float cx = xloc();
! float cy = yloc();
! float cz = zloc();
! defer_composite_update()=true;
! int nvhcls = nsubvhcls();
! for(int i=0; i<nvhcls; i++) {
! Vehicle* subv = subvhcl(i);
! float xoff = subv->xloc()-cx;
! float yoff = subv->yloc()-cy;
! float zoff = subv->zloc()-cz;
! if (subv) subv->jumpturn(x+xoff, y+yoff, z+zoff, dx, dy);
}
+ xdir() = dx;
+ ydir() = dy;
+ defer_composite_update()=false;
+ recompute();notify();
}
void CompositeVehicle::jumpturn(float x, float y, float z,
float dx, float dy, float dz) {
! float angle =
! (asin(dy/sqrt(dx*dx+dy*dy)) - asin(ydir()/sqrt(xdir()*xdir()+ydir()*ydir())))*RAD_TO_DEG;
! rotate2d(angle);
!
! float cx = xloc();
! float cy = yloc();
! float cz = zloc();
! defer_composite_update()=true;
! int nvhcls = nsubvhcls();
! for(int i=0; i<nvhcls; i++) {
! Vehicle* subv = subvhcl(i);
! float xoff = subv->xloc()-cx;
! float yoff = subv->yloc()-cy;
! float zoff = subv->zloc()-cz;
! if (subv) subv->jumpturn(x+xoff, y+yoff, z+zoff, dx, dy);
! }
! xdir() = dx;
! ydir() = dy;
! zdir() = dz;
! defer_composite_update()=false;
! recompute();notify();
}
void CompositeVehicle::jumpturn(float* loc, float* dir, int n) {
+ float angle =
+ (asin(dir[1]/sqrt(dir[0]*dir[0]+dir[1]*dir[1])) - asin(ydir()/sqrt(xdir()*xdir()+ydir()*ydir())))*RAD_TO_DEG;
+ rotate2d(angle);
+
defer_composite_update()=true;
int nvhcls = nsubvhcls();
+ float cs[n];
+ if(n>0) cs[0] = xloc();
+ if(n>1) cs[1] = yloc();
+ if(n>2) cs[2] = zloc();
for(int i=0; i<nvhcls; i++) {
Vehicle* subv = subvhcl(i);
!
! float locoffs[n];
! if(n>0) locoffs[0] = loc[0] - (subv->xloc()-cs[0]);
! if(n>1) locoffs[1] = loc[1] - (subv->yloc()-cs[1]);
! if(n>2) locoffs[2] = loc[2] - (subv->zloc()-cs[2]);
!
! if (subv) subv->jumpturn(locoffs, dir, n);
! }
! if(n>0) xdir() = dir[0];
! if(n>1) ydir() = dir[1];
! if(n>2) ydir() = dir[2];
defer_composite_update()=false;
recompute();notify();
}
***************
*** 313,318 ****
--- 357,367 ----
newvec *= veclen;
vhcl->xloc() = newvec[0]+cx;
vhcl->yloc() = newvec[1]+cy;
+ vec2 dirvec(vhcl->xdir(), vhcl->ydir());
+ mat3 dirmat = rotation2D(dirvec, ang);
+ vec2 newdirvec = dirvec * dirmat;
+ vhcl->xdir() = newdirvec[0];
+ vhcl->ydir() = newdirvec[1];
}
defer_composite_update()=false;
recompute();notify();
Index: VhclUnidraw/vhclkit.c
diff -c VhclUnidraw/vhclkit.c:1.3 VhclUnidraw/vhclkit.c:1.4
*** VhclUnidraw/vhclkit.c:1.3 Mon Feb 28 17:28:05 2000
--- src/VhclUnidraw/vhclkit.c Fri Apr 7 04:25:05 2000
***************
*** 118,123 ****
--- 118,124 ----
MakeMenu(mbi, new OvQuitCmd(new ControlInfo("Quit", KLBL_QUIT, CODE_QUIT)),
"Quit ");
+
return mbi;
}
*** /dev/null Fri Apr 7 04:25:08 PDT 2000
--- patches/vhclmaps-000407-johnston-019
*************** patches/vhclmaps-000407-johnston-019
*** 0 ****
--- 1 ----
+ vhclmaps-000407-johnston-019
|