-
Ying-Chun Liu authoredYing-Chun Liu authored
Contours.cc 14.51 KiB
#include "Contours.h"
#include "OpenCV.h"
#include <nan.h>
#include <iostream>
Nan::Persistent<FunctionTemplate> Contour::constructor;
void Contour::Init(Local<Object> target) {
Nan::HandleScope scope;
// Class/contructor
Local<FunctionTemplate> ctor = Nan::New<FunctionTemplate>(Contour::New);
constructor.Reset(ctor);
ctor->InstanceTemplate()->SetInternalFieldCount(1);
ctor->SetClassName(Nan::New("Contours").ToLocalChecked());
// Prototype
// Local<ObjectTemplate> proto = constructor->PrototypeTemplate();
Nan::SetPrototypeMethod(ctor, "point", Point);
Nan::SetPrototypeMethod(ctor, "points", Points);
Nan::SetPrototypeMethod(ctor, "size", Size);
Nan::SetPrototypeMethod(ctor, "cornerCount", CornerCount);
Nan::SetPrototypeMethod(ctor, "area", Area);
Nan::SetPrototypeMethod(ctor, "arcLength", ArcLength);
Nan::SetPrototypeMethod(ctor, "approxPolyDP", ApproxPolyDP);
Nan::SetPrototypeMethod(ctor, "convexHull", ConvexHull);
Nan::SetPrototypeMethod(ctor, "boundingRect", BoundingRect);
Nan::SetPrototypeMethod(ctor, "minAreaRect", MinAreaRect);
Nan::SetPrototypeMethod(ctor, "fitEllipse", FitEllipse);
Nan::SetPrototypeMethod(ctor, "isConvex", IsConvex);
Nan::SetPrototypeMethod(ctor, "moments", Moments);
Nan::SetPrototypeMethod(ctor, "hierarchy", Hierarchy);
Nan::SetPrototypeMethod(ctor, "serialize", Serialize);
Nan::SetPrototypeMethod(ctor, "deserialize", Deserialize);
target->Set(Nan::GetCurrentContext(), Nan::New("Contours").ToLocalChecked(), ctor->GetFunction( Nan::GetCurrentContext() ).ToLocalChecked());
};
NAN_METHOD(Contour::New) {
Nan::HandleScope scope;
if (info.This()->InternalFieldCount() == 0) {
Nan::ThrowTypeError("Cannot instantiate without new");
}
Contour *contours;
contours = new Contour;
contours->Wrap(info.Holder());
info.GetReturnValue().Set(info.Holder());
}
Contour::Contour() :
Nan::ObjectWrap() {
}
NAN_METHOD(Contour::Point) {
Nan::HandleScope scope;
Contour *self = Nan::ObjectWrap::Unwrap<Contour>(info.This());
int pos = info[0].As<Number>()->Value();
int index = info[1].As<Number>()->Value();
cv::Point point = self->contours[pos][index];
Local<Object> data = Nan::New<Object>();
data->Set(Nan::GetCurrentContext(), Nan::New("x").ToLocalChecked(), Nan::New<Number>(point.x));
data->Set(Nan::GetCurrentContext(), Nan::New("y").ToLocalChecked(), Nan::New<Number>(point.y));
info.GetReturnValue().Set(data);