binding/v8/jsi/geometry/LineString.cpp
Go to the documentation of this file.
1 /* Copyright (C) 2008 National Institute For Space Research (INPE) - Brazil.
2 
3  This file is part of the TerraLib - a Framework for building GIS enabled applications.
4 
5  TerraLib is free software: you can redistribute it and/or modify
6  it under the terms of the GNU Lesser General Public License as published by
7  the Free Software Foundation, either version 3 of the License,
8  or (at your option) any later version.
9 
10  TerraLib is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU Lesser General Public License for more details.
14 
15  You should have received a copy of the GNU Lesser General Public License
16  along with TerraLib. See COPYING. If not, write to
17  TerraLib Team at <terralib-team@terralib.org>.
18  */
19 
20 /*!
21  \file LineString.cpp
22 
23  \brief Utility functions to register the LineString class into Google JavaScript V8 engine.
24  */
25 
26 // TerraLib
27 #include "../../../../geometry/Coord2D.h"
28 #include "../../../../geometry/LineString.h"
29 #include "../../../../geometry/Point.h"
30 #include "../../common/Utils.h"
31 #include "Geometry.h"
32 
33 ::v8::Handle<::v8::Value> LineString_SetNumCoordinates(const ::v8::Arguments& args)
34 {
35  ::v8::HandleScope hs;
36 
37  if(args.Holder().IsEmpty())
38  return ::v8::ThrowException(::v8::String::New("In order to use setNumCoordinates method you must use object notation: \"line.setNumCoordinates(10);\""));
39 
40  te::gm::LineString* g = te::v8::common::Unwrap<te::gm::LineString>(args.Holder());
41 
42  if(g == 0)
43  return ::v8::ThrowException(::v8::String::New("Invalid geometry in setNumCoordinates method!"));
44 
45  if(args.Length() != 1 || args[0].IsEmpty() || !args[0]->IsInt32())
46  return ::v8::ThrowException(::v8::String::New("Invalid parameter for setNumCoordinates!"));
47 
48  int n = args[0]->ToInt32()->Value();
49 
50  g->setNumCoordinates(n);
51 
52  return hs.Close(::v8::Undefined());
53 }
54 
55 ::v8::Handle<::v8::Value> LineString_MakeEmpty(const ::v8::Arguments& args)
56 {
57  ::v8::HandleScope hs;
58 
59  if(args.Holder().IsEmpty())
60  return ::v8::ThrowException(::v8::String::New("In order to use makeEmpty method you must use object notation: \"line.makeEmpty();\""));
61 
62  te::gm::LineString* g = te::v8::common::Unwrap<te::gm::LineString>(args.Holder());
63 
64  if(g == 0)
65  return ::v8::ThrowException(::v8::String::New("Invalid geometry in setNumCoordinates method!"));
66 
67  g->makeEmpty();
68 
69  return hs.Close(::v8::Undefined());
70 }
71 
72 ::v8::Handle<::v8::Value> LineString_GetPointN(const ::v8::Arguments& args)
73 {
74  ::v8::HandleScope hs;
75 
76  if(args.Holder().IsEmpty())
77  return ::v8::ThrowException(::v8::String::New("In order to use getPointN method you must use object notation: \"pt = line.getPointN(3);\""));
78 
79  te::gm::LineString* g = te::v8::common::Unwrap<te::gm::LineString>(args.Holder());
80 
81  if(g == 0)
82  return ::v8::ThrowException(::v8::String::New("Invalid geometry in getPointN method!"));
83 
84  if(args.Length() != 1 || args[0].IsEmpty() || !args[0]->IsInt32())
85  return ::v8::ThrowException(::v8::String::New("Invalid parameter for getPointN!"));
86 
87  int i = args[0]->ToInt32()->Value();
88 
89  std::auto_ptr<te::gm::Point> pt(g->getPointN(i));
90 
91  ::v8::Local<::v8::Object> jsgeom = te::v8::common::Make(pt.get(), te::v8::jsi::GetPointTemplate, true);
92 
93  pt.release();
94 
95  return hs.Close(jsgeom);
96 }
97 
98 ::v8::Handle<::v8::Value> LineString_SetPointN(const ::v8::Arguments& args)
99 {
100  ::v8::HandleScope hs;
101 
102  if(args.Holder().IsEmpty())
103  return ::v8::ThrowException(::v8::String::New("In order to use setPointN method you must use object notation: \"line.setPointN(i, pt);\""));
104 
105  te::gm::LineString* g = te::v8::common::Unwrap<te::gm::LineString>(args.Holder());
106 
107  if(g == 0)
108  return ::v8::ThrowException(::v8::String::New("Invalid geometry in setPointN method!"));
109 
110  if(args.Length() != 2 || args[0].IsEmpty() || !args[0]->IsInt32() || args[1].IsEmpty() || !args[1]->IsObject())
111  return ::v8::ThrowException(::v8::String::New("Invalid parameter for setPointN!"));
112 
113  int i = args[0]->ToInt32()->Value();
114 
115  te::gm::Point* pt = te::v8::common::Unwrap<te::gm::Point>(args[1]->ToObject());
116 
117  g->setPointN(i, *pt);
118 
119  return hs.Close(::v8::Undefined());
120 }
121 
122 ::v8::Handle<::v8::Value> LineString_SetPoint(const ::v8::Arguments& args)
123 {
124  ::v8::HandleScope hs;
125 
126  if(args.Holder().IsEmpty())
127  return ::v8::ThrowException(::v8::String::New("In order to use setPoint method you must use object notation: \"line.setPoint(i, x, y);\""));
128 
129  te::gm::LineString* g = te::v8::common::Unwrap<te::gm::LineString>(args.Holder());
130 
131  if(g == 0)
132  return ::v8::ThrowException(::v8::String::New("Invalid geometry in setPoint method!"));
133 
134  if(args.Length() != 3 ||
135  args[0].IsEmpty() || !args[0]->IsInt32() ||
136  args[1].IsEmpty() || !args[1]->IsNumber() ||
137  args[2].IsEmpty() || !args[2]->IsNumber())
138  return ::v8::ThrowException(::v8::String::New("Invalid parameter for setPoint!"));
139 
140  int i = args[0]->ToInt32()->Value();
141  double x = args[1]->ToNumber()->Value();
142  double y = args[2]->ToNumber()->Value();
143 
144  g->setPoint(i, x, y);
145 
146  return hs.Close(::v8::Undefined());
147 }
148 
149 ::v8::Handle<::v8::Value> LineString_SetPointZ(const ::v8::Arguments& args)
150 {
151  ::v8::HandleScope hs;
152 
153  if(args.Holder().IsEmpty())
154  return ::v8::ThrowException(::v8::String::New("In order to use setPointZ method you must use object notation: \"line.setPointZ(i, x, y, z);\""));
155 
156  te::gm::LineString* g = te::v8::common::Unwrap<te::gm::LineString>(args.Holder());
157 
158  if(g == 0)
159  return ::v8::ThrowException(::v8::String::New("Invalid geometry in setPointZ method!"));
160 
161  if(args.Length() != 4 ||
162  args[0].IsEmpty() || !args[0]->IsInt32() ||
163  args[1].IsEmpty() || !args[1]->IsNumber() ||
164  args[2].IsEmpty() || !args[2]->IsNumber() ||
165  args[3].IsEmpty() || !args[3]->IsNumber())
166  return ::v8::ThrowException(::v8::String::New("Invalid parameter for setPointZ!"));
167 
168  int i = args[0]->ToInt32()->Value();
169  double x = args[1]->ToNumber()->Value();
170  double y = args[2]->ToNumber()->Value();
171  double z = args[3]->ToNumber()->Value();
172 
173  g->setPointZ(i, x, y, z);
174 
175  return hs.Close(::v8::Undefined());
176 }
177 
178 ::v8::Handle<::v8::Value> LineString_SetPointM(const ::v8::Arguments& args)
179 {
180  ::v8::HandleScope hs;
181 
182  if(args.Holder().IsEmpty())
183  return ::v8::ThrowException(::v8::String::New("In order to use setPointM method you must use object notation: \"line.setPointM(i, x, y, m);\""));
184 
185  te::gm::LineString* g = te::v8::common::Unwrap<te::gm::LineString>(args.Holder());
186 
187  if(g == 0)
188  return ::v8::ThrowException(::v8::String::New("Invalid geometry in setPointM method!"));
189 
190  if(args.Length() != 4 ||
191  args[0].IsEmpty() || !args[0]->IsInt32() ||
192  args[1].IsEmpty() || !args[1]->IsNumber() ||
193  args[2].IsEmpty() || !args[2]->IsNumber() ||
194  args[3].IsEmpty() || !args[3]->IsNumber())
195  return ::v8::ThrowException(::v8::String::New("Invalid parameter for setPointM!"));
196 
197  int i = args[0]->ToInt32()->Value();
198  double x = args[1]->ToNumber()->Value();
199  double y = args[2]->ToNumber()->Value();
200  double m = args[3]->ToNumber()->Value();
201 
202  g->setPointM(i, x, y, m);
203 
204  return hs.Close(::v8::Undefined());
205 }
206 
207 ::v8::Handle<::v8::Value> LineString_SetPointZM(const ::v8::Arguments& args)
208 {
209  ::v8::HandleScope hs;
210 
211  if(args.Holder().IsEmpty())
212  return ::v8::ThrowException(::v8::String::New("In order to use setPointZM method you must use object notation: \"line.setPointZM(i, x, y, z, m);\""));
213 
214  te::gm::LineString* g = te::v8::common::Unwrap<te::gm::LineString>(args.Holder());
215 
216  if(g == 0)
217  return ::v8::ThrowException(::v8::String::New("Invalid geometry in setPointZM method!"));
218 
219  if(args.Length() != 4 ||
220  args[0].IsEmpty() || !args[0]->IsInt32() ||
221  args[1].IsEmpty() || !args[1]->IsNumber() ||
222  args[2].IsEmpty() || !args[2]->IsNumber() ||
223  args[3].IsEmpty() || !args[3]->IsNumber() ||
224  args[4].IsEmpty() || !args[4]->IsNumber())
225  return ::v8::ThrowException(::v8::String::New("Invalid parameter for setPointZM!"));
226 
227  int i = args[0]->ToInt32()->Value();
228  double x = args[1]->ToNumber()->Value();
229  double y = args[2]->ToNumber()->Value();
230  double z = args[3]->ToNumber()->Value();
231  double m = args[4]->ToNumber()->Value();
232 
233  g->setPointZM(i, x, y, z, m);
234 
235  return hs.Close(::v8::Undefined());
236 }
237 
238 ::v8::Handle<::v8::Value> LineString_GetX(const ::v8::Arguments& args)
239 {
240  ::v8::HandleScope hs;
241 
242  if(args.Holder().IsEmpty())
243  return ::v8::ThrowException(::v8::String::New("In order to use getX method you must use object notation: \"x = line.getX(i);\""));
244 
245  te::gm::LineString* g = te::v8::common::Unwrap<te::gm::LineString>(args.Holder());
246 
247  if(g == 0)
248  return ::v8::ThrowException(::v8::String::New("Invalid geometry in getX method!"));
249 
250  if(args.Length() != 1 || args[0].IsEmpty() || !args[0]->IsInt32())
251  return ::v8::ThrowException(::v8::String::New("Invalid parameter for getX!"));
252 
253  int i = args[0]->ToInt32()->Value();
254 
255  double x = g->getX(i);
256 
257  ::v8::Handle<::v8::Number> jx = ::v8::Number::New(x);
258 
259  return hs.Close(jx);
260 }
261 
262 ::v8::Handle<::v8::Value> LineString_GetY(const ::v8::Arguments& args)
263 {
264  ::v8::HandleScope hs;
265 
266  if(args.Holder().IsEmpty())
267  return ::v8::ThrowException(::v8::String::New("In order to use getY method you must use object notation: \"y = line.getY(i);\""));
268 
269  te::gm::LineString* g = te::v8::common::Unwrap<te::gm::LineString>(args.Holder());
270 
271  if(g == 0)
272  return ::v8::ThrowException(::v8::String::New("Invalid geometry in getY method!"));
273 
274  if(args.Length() != 1 || args[0].IsEmpty() || !args[0]->IsInt32())
275  return ::v8::ThrowException(::v8::String::New("Invalid parameter for getY!"));
276 
277  int i = args[0]->ToInt32()->Value();
278 
279  double y = g->getY(i);
280 
281  ::v8::Handle<::v8::Number> jy = ::v8::Number::New(y);
282 
283  return hs.Close(jy);
284 }
285 
286 ::v8::Handle<::v8::Value> LineString_GetZ(const ::v8::Arguments& args)
287 {
288  ::v8::HandleScope hs;
289 
290  if(args.Holder().IsEmpty())
291  return ::v8::ThrowException(::v8::String::New("In order to use getZ method you must use object notation: \"z = line.getZ(i);\""));
292 
293  te::gm::LineString* g = te::v8::common::Unwrap<te::gm::LineString>(args.Holder());
294 
295  if(g == 0)
296  return ::v8::ThrowException(::v8::String::New("Invalid geometry in getZ method!"));
297 
298  if(args.Length() != 1 || args[0].IsEmpty() || !args[0]->IsInt32())
299  return ::v8::ThrowException(::v8::String::New("Invalid parameter for getZ!"));
300 
301  int i = args[0]->ToInt32()->Value();
302 
303  double z = g->getZ(i);
304 
305  ::v8::Handle<::v8::Number> jz = ::v8::Number::New(z);
306 
307  return hs.Close(jz);
308 }
309 
310 ::v8::Handle<::v8::Value> LineString_GetM(const ::v8::Arguments& args)
311 {
312  ::v8::HandleScope hs;
313 
314  if(args.Holder().IsEmpty())
315  return ::v8::ThrowException(::v8::String::New("In order to use getM method you must use object notation: \"m = line.getM(i);\""));
316 
317  te::gm::LineString* g = te::v8::common::Unwrap<te::gm::LineString>(args.Holder());
318 
319  if(g == 0)
320  return ::v8::ThrowException(::v8::String::New("Invalid geometry in getM method!"));
321 
322  if(args.Length() != 1 || args[0].IsEmpty() || !args[0]->IsInt32())
323  return ::v8::ThrowException(::v8::String::New("Invalid parameter for getM!"));
324 
325  int i = args[0]->ToInt32()->Value();
326 
327  double m = g->getM(i);
328 
329  ::v8::Handle<::v8::Number> jm = ::v8::Number::New(m);
330 
331  return hs.Close(jm);
332 }
333 
334 ::v8::Handle<::v8::Value> LineString_SetX(const ::v8::Arguments& args)
335 {
336  ::v8::HandleScope hs;
337 
338  if(args.Holder().IsEmpty())
339  return ::v8::ThrowException(::v8::String::New("In order to use setX method you must use object notation: \"line.setX(i, x);\""));
340 
341  te::gm::LineString* g = te::v8::common::Unwrap<te::gm::LineString>(args.Holder());
342 
343  if(g == 0)
344  return ::v8::ThrowException(::v8::String::New("Invalid geometry in setX method!"));
345 
346  if(args.Length() != 2 || args[0].IsEmpty() || !args[0]->IsInt32() || args[1].IsEmpty() || !args[1]->IsNumber())
347  return ::v8::ThrowException(::v8::String::New("Invalid parameter for setX!"));
348 
349  int i = args[0]->ToInt32()->Value();
350  double x = args[1]->ToNumber()->Value();
351 
352  g->setX(i, x);
353 
354  return hs.Close(::v8::Undefined());
355 }
356 
357 ::v8::Handle<::v8::Value> LineString_SetY(const ::v8::Arguments& args)
358 {
359  ::v8::HandleScope hs;
360 
361  if(args.Holder().IsEmpty())
362  return ::v8::ThrowException(::v8::String::New("In order to use setY method you must use object notation: \"line.setY(i, y);\""));
363 
364  te::gm::LineString* g = te::v8::common::Unwrap<te::gm::LineString>(args.Holder());
365 
366  if(g == 0)
367  return ::v8::ThrowException(::v8::String::New("Invalid geometry in setY method!"));
368 
369  if(args.Length() != 2 || args[0].IsEmpty() || !args[0]->IsInt32() || args[1].IsEmpty() || !args[1]->IsNumber())
370  return ::v8::ThrowException(::v8::String::New("Invalid parameter for setY!"));
371 
372  int i = args[0]->ToInt32()->Value();
373  double y = args[1]->ToNumber()->Value();
374 
375  g->setY(i, y);
376 
377  return hs.Close(::v8::Undefined());
378 }
379 
380 ::v8::Handle<::v8::Value> LineString_SetZ(const ::v8::Arguments& args)
381 {
382  ::v8::HandleScope hs;
383 
384  if(args.Holder().IsEmpty())
385  return ::v8::ThrowException(::v8::String::New("In order to use setZ method you must use object notation: \"line.setZ(i, z);\""));
386 
387  te::gm::LineString* g = te::v8::common::Unwrap<te::gm::LineString>(args.Holder());
388 
389  if(g == 0)
390  return ::v8::ThrowException(::v8::String::New("Invalid geometry in setZ method!"));
391 
392  if(args.Length() != 2 || args[0].IsEmpty() || !args[0]->IsInt32() || args[1].IsEmpty() || !args[1]->IsNumber())
393  return ::v8::ThrowException(::v8::String::New("Invalid parameter for setZ!"));
394 
395  int i = args[0]->ToInt32()->Value();
396  double z = args[1]->ToNumber()->Value();
397 
398  g->setZ(i, z);
399 
400  return hs.Close(::v8::Undefined());
401 }
402 
403 ::v8::Handle<::v8::Value> LineString_SetM(const ::v8::Arguments& args)
404 {
405  ::v8::HandleScope hs;
406 
407  if(args.Holder().IsEmpty())
408  return ::v8::ThrowException(::v8::String::New("In order to use setM method you must use object notation: \"line.setM(i, m);\""));
409 
410  te::gm::LineString* g = te::v8::common::Unwrap<te::gm::LineString>(args.Holder());
411 
412  if(g == 0)
413  return ::v8::ThrowException(::v8::String::New("Invalid geometry in setM method!"));
414 
415  if(args.Length() != 2 || args[0].IsEmpty() || !args[0]->IsInt32() || args[1].IsEmpty() || !args[1]->IsNumber())
416  return ::v8::ThrowException(::v8::String::New("Invalid parameter for setM!"));
417 
418  int i = args[0]->ToInt32()->Value();
419  double m = args[1]->ToNumber()->Value();
420 
421  g->setM(i, m);
422 
423  return hs.Close(::v8::Undefined());
424 }
425 
426 ::v8::Handle<::v8::Value> LineString_GetCoordinates(const ::v8::Arguments& args)
427 {
428  ::v8::HandleScope hs;
429 
430  if(args.Holder().IsEmpty())
431  return ::v8::ThrowException(::v8::String::New("In order to use getCoordinates method you must use object notation: \"cs = line.getCoordinates();\""));
432 
433  te::gm::LineString* g = te::v8::common::Unwrap<te::gm::LineString>(args.Holder());
434 
435  if(g == 0)
436  return ::v8::ThrowException(::v8::String::New("Invalid geometry in getCoordinates method!"));
437 
438  te::gm::Coord2D* cs = g->getCoordinates();
439 
440  int len = static_cast<int>(g->getNPoints());
441 
442  ::v8::Handle<::v8::Array> jcs = ::v8::Array::New(len);
443 
444  for(int i = 0; i < len; ++i)
445  jcs->Set(i, te::v8::common::Make(&(cs[i]), te::v8::jsi::GetCoord2DTemplate, false));
446 
447  return hs.Close(jcs);
448 }
449 
450 ::v8::Handle<::v8::Value> LineString_GetZCoords(const ::v8::Arguments& args)
451 {
452  ::v8::HandleScope hs;
453 
454  if(args.Holder().IsEmpty())
455  return ::v8::ThrowException(::v8::String::New("In order to use getZCoords method you must use object notation: \"zs = line.getZCoords();\""));
456 
457  te::gm::LineString* g = te::v8::common::Unwrap<te::gm::LineString>(args.Holder());
458 
459  if(g == 0)
460  return ::v8::ThrowException(::v8::String::New("Invalid geometry in getZCoords method!"));
461 
462  double* zs = g->getZ();
463 
464  int len = static_cast<int>(g->getNPoints());
465 
466  ::v8::Handle<::v8::Array> jzs = ::v8::Array::New(len);
467 
468  for(int i = 0; i < len; ++i)
469  jzs->Set(i, ::v8::Number::New(zs[i]));
470 
471  return hs.Close(jzs);
472 }
473 
474 ::v8::Handle<::v8::Value> LineString_GetMCoords(const ::v8::Arguments& args)
475 {
476  ::v8::HandleScope hs;
477 
478  if(args.Holder().IsEmpty())
479  return ::v8::ThrowException(::v8::String::New("In order to use getMCoords method you must use object notation: \"ms = line.getMCoords();\""));
480 
481  te::gm::LineString* g = te::v8::common::Unwrap<te::gm::LineString>(args.Holder());
482 
483  if(g == 0)
484  return ::v8::ThrowException(::v8::String::New("Invalid geometry in getMCoords method!"));
485 
486  double* ms = g->getM();
487 
488  int len = static_cast<int>(g->getNPoints());
489 
490  ::v8::Handle<::v8::Array> jms = ::v8::Array::New(len);
491 
492  for(int i = 0; i < len; ++i)
493  jms->Set(i, ::v8::Number::New(ms[i]));
494 
495  return hs.Close(jms);
496 }
497 
498 ::v8::Handle<::v8::Value> LineString_Constructor(const ::v8::Arguments& args)
499 {
500  ::v8::HandleScope hs;
501 
502  if(!args.IsConstructCall())
503  return ::v8::ThrowException(::v8::String::New("In order to create a LineString you need to call its constructor like: var mygc = new TeLineString(3, TE_OGC_LINESTRING, 4326)."));
504 
505  if(args.Holder().IsEmpty())
506  return ::v8::ThrowException(::v8::String::New("LineString constructor must use object notation!"));
507 
508  if((args.Length() != 3) ||
509  args[0].IsEmpty() || !args[0]->IsInt32() ||
510  args[1].IsEmpty() || !args[1]->IsInt32() ||
511  args[2].IsEmpty() || !args[2]->IsInt32())
512  return ::v8::ThrowException(::v8::String::New("Missing parameter or wrong parameter type in LineString constructor method!!"));
513 
514 
515  int npts = args[0]->Int32Value();
516  int geomType = args[1]->Int32Value();
517  int srid = args[2]->ToInt32()->Int32Value();
518 
519  std::auto_ptr<te::gm::LineString> g(new te::gm::LineString(npts, static_cast<te::gm::GeomType>(geomType), srid));
520 
521  ::v8::Local<::v8::Object> jg = te::v8::common::Make(g.get(), te::v8::jsi::GetLineStringTemplate, true);
522 
523  g.release();
524 
525  return hs.Close(jg);
526 }
527 
528 void te::v8::jsi::RegisterLineString(::v8::Local<::v8::Object>& global)
529 {
530  ::v8::HandleScope hs;
531 
532  ::v8::Local<::v8::FunctionTemplate> jsgc = ::v8::FunctionTemplate::New(LineString_Constructor);
533 
534  global->Set(::v8::String::New("TeLineString"), jsgc->GetFunction());
535 }
536 
537 static ::v8::Persistent<::v8::FunctionTemplate> sg_line_template;
538 
539 ::v8::Persistent<::v8::FunctionTemplate>& te::v8::jsi::GetLineStringTemplate()
540 {
541  if(sg_line_template.IsEmpty())
542  {
543  ::v8::Persistent<::v8::FunctionTemplate>& curveTpl = GetCurveTemplate();
544  ::v8::Local<::v8::FunctionTemplate> result = ::v8::FunctionTemplate::New();
545  result->Inherit(curveTpl);
546 
547  ::v8::Handle<::v8::ObjectTemplate> prototype = result->PrototypeTemplate();
548 
549  prototype->Set(::v8::String::NewSymbol("setNumCoordinates"), ::v8::FunctionTemplate::New(LineString_SetNumCoordinates));
550  prototype->Set(::v8::String::NewSymbol("makeEmpty"), ::v8::FunctionTemplate::New(LineString_MakeEmpty));
551  prototype->Set(::v8::String::NewSymbol("getPointN"), ::v8::FunctionTemplate::New(LineString_GetPointN));
552  prototype->Set(::v8::String::NewSymbol("setPointN"), ::v8::FunctionTemplate::New(LineString_SetPointN));
553  prototype->Set(::v8::String::NewSymbol("setPoint"), ::v8::FunctionTemplate::New(LineString_SetPoint));
554  prototype->Set(::v8::String::NewSymbol("setPointZ"), ::v8::FunctionTemplate::New(LineString_SetPointZ));
555  prototype->Set(::v8::String::NewSymbol("setPointM"), ::v8::FunctionTemplate::New(LineString_SetPointM));
556  prototype->Set(::v8::String::NewSymbol("setPointZM"), ::v8::FunctionTemplate::New(LineString_SetPointZM));
557  prototype->Set(::v8::String::NewSymbol("getX"), ::v8::FunctionTemplate::New(LineString_GetX));
558  prototype->Set(::v8::String::NewSymbol("getY"), ::v8::FunctionTemplate::New(LineString_GetY));
559  prototype->Set(::v8::String::NewSymbol("getZ"), ::v8::FunctionTemplate::New(LineString_GetZ));
560  prototype->Set(::v8::String::NewSymbol("getM"), ::v8::FunctionTemplate::New(LineString_GetM));
561  prototype->Set(::v8::String::NewSymbol("setX"), ::v8::FunctionTemplate::New(LineString_SetX));
562  prototype->Set(::v8::String::NewSymbol("setY"), ::v8::FunctionTemplate::New(LineString_SetY));
563  prototype->Set(::v8::String::NewSymbol("setZ"), ::v8::FunctionTemplate::New(LineString_SetZ));
564  prototype->Set(::v8::String::NewSymbol("setM"), ::v8::FunctionTemplate::New(LineString_SetM));
565  prototype->Set(::v8::String::NewSymbol("getCoordinates"), ::v8::FunctionTemplate::New(LineString_GetCoordinates));
566  prototype->Set(::v8::String::NewSymbol("getZCoords"), ::v8::FunctionTemplate::New(LineString_GetZCoords));
567  prototype->Set(::v8::String::NewSymbol("getMCoords"), ::v8::FunctionTemplate::New(LineString_GetMCoords));
568 
569  sg_line_template = ::v8::Persistent<::v8::FunctionTemplate>::New(result);
570  }
571 
572  return sg_line_template;
573 }
574 
575 
void setZ(std::size_t i, const double &z)
It sets the n-th z coordinate value.
::v8::Local<::v8::Object > Make(T *obj, TF tfunc, const bool isOwner)
It creates a new JavaScript object from a C++ object (obj).
::v8::Handle<::v8::Value > LineString_SetX(const ::v8::Arguments &args)
::v8::Persistent<::v8::FunctionTemplate > & GetPointTemplate()
It returns a reference to the persistent template of a Point object.
::v8::Handle<::v8::Value > LineString_SetPoint(const ::v8::Arguments &args)
::v8::Handle<::v8::Value > LineString_SetNumCoordinates(const ::v8::Arguments &args)
void setX(std::size_t i, const double &x)
It sets the n-th x coordinate value.
::v8::Handle<::v8::Value > LineString_SetPointZM(const ::v8::Arguments &args)
Coord2D * getCoordinates() const
It returns a pointer to the internal array of coordinates.
Definition: LineString.h:456
::v8::Handle<::v8::Value > LineString_GetZ(const ::v8::Arguments &args)
void makeEmpty()
It clears all the coordinates.
::v8::Handle<::v8::Value > LineString_GetY(const ::v8::Arguments &args)
::v8::Handle<::v8::Value > LineString_SetPointM(const ::v8::Arguments &args)
std::unique_ptr< Point > getPointN(std::size_t i) const
It returns the specified point in this LineString.
::v8::Persistent<::v8::FunctionTemplate > & GetCoord2DTemplate()
It returns a reference to the persistent template of a Coord2D object.
Definition: Coord2D.cpp:144
An utility struct for representing 2D coordinates.
Definition: Coord2D.h:40
::v8::Handle<::v8::Value > LineString_SetZ(const ::v8::Arguments &args)
::v8::Persistent<::v8::FunctionTemplate > & GetLineStringTemplate()
It returns a reference to the persistent template of a LineString object.
const double & getY(std::size_t i) const
It returns the n-th y coordinate value.
::v8::Handle<::v8::Value > LineString_SetY(const ::v8::Arguments &args)
::v8::Handle<::v8::Value > LineString_GetX(const ::v8::Arguments &args)
LineString is a curve with linear interpolation between points.
Definition: LineString.h:62
A point with x and y coordinate values.
Definition: Point.h:50
void setPoint(std::size_t i, const double &x, const double &y)
It sets the value of the specified point.
const double & getX(std::size_t i) const
It returns the n-th x coordinate value.
::v8::Handle<::v8::Value > LineString_SetM(const ::v8::Arguments &args)
void setNumCoordinates(std::size_t size)
It reserves room for the number of coordinates in this LineString.
::v8::Handle<::v8::Value > LineString_SetPointZ(const ::v8::Arguments &args)
std::size_t getNPoints() const
It returns the number of points (vertexes) in the linestring.
Definition: LineString.h:193
void setPointZ(std::size_t i, const double &x, const double &y, const double &z)
It sets the value of the specified point.
::v8::Handle<::v8::Value > LineString_Constructor(const ::v8::Arguments &args)
void setM(std::size_t i, const double &m)
It sets the n-th m measure value.
::v8::Handle<::v8::Value > LineString_MakeEmpty(const ::v8::Arguments &args)
void setPointZM(std::size_t i, const double &x, const double &y, const double &z, const double &m)
It sets the value of the specified point.
void RegisterLineString(::v8::Local<::v8::Object > &global)
It register the LineString class.
::v8::Handle<::v8::Value > LineString_GetPointN(const ::v8::Arguments &args)
::v8::Handle<::v8::Value > LineString_SetPointN(const ::v8::Arguments &args)
::v8::Persistent<::v8::FunctionTemplate > & GetCurveTemplate()
It returns a reference to the persistent template of a Curve object.
::v8::Handle<::v8::Value > LineString_GetCoordinates(const ::v8::Arguments &args)
::v8::Handle<::v8::Value > LineString_GetZCoords(const ::v8::Arguments &args)
const double & getZ(std::size_t i) const
It returns the n-th z coordinate value.
void setPointM(std::size_t i, const double &x, const double &y, const double &m)
It sets the value of the specified point.
const double & getM(std::size_t i) const
It returns the n-th m measure value.
void setPointN(std::size_t i, const Point &p)
It sets the value of the specified point to this new one.
void setY(std::size_t i, const double &y)
It sets the n-th y coordinate value.
::v8::Handle<::v8::Value > LineString_GetMCoords(const ::v8::Arguments &args)
static::v8::Persistent<::v8::FunctionTemplate > sg_line_template
::v8::Handle<::v8::Value > LineString_GetM(const ::v8::Arguments &args)