Skip to content

Commit c07bb63

Browse files
Merge pull request #358 from ScottRocha/master
Implement 'setTo()' function (Fixes #357)
2 parents 347fe22 + 927e878 commit c07bb63

4 files changed

Lines changed: 91 additions & 0 deletions

File tree

cc/core/Mat.cc

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ NAN_MODULE_INIT(Mat::Init) {
2828
Nan::SetPrototypeMethod(ctor, "at", At);
2929
Nan::SetPrototypeMethod(ctor, "atRaw", AtRaw);
3030
Nan::SetPrototypeMethod(ctor, "set", Set);
31+
Nan::SetPrototypeMethod(ctor, "setTo", SetTo);
32+
Nan::SetPrototypeMethod(ctor, "setToAsync", SetToAsync);
3133
Nan::SetPrototypeMethod(ctor, "push_back", PushBack);
3234
Nan::SetPrototypeMethod(ctor, "push_backAsync", PushBackAsync);
3335
Nan::SetPrototypeMethod(ctor, "pushBack", PushBack);
@@ -295,6 +297,22 @@ NAN_METHOD(Mat::Set) {
295297
}
296298
}
297299

300+
NAN_METHOD(Mat::SetTo) {
301+
FF::SyncBinding(
302+
std::make_shared<MatBindings::SetToWorker>(Mat::Converter::unwrap(info.This())),
303+
"Mat::SetTo",
304+
info
305+
);
306+
}
307+
308+
NAN_METHOD(Mat::SetToAsync) {
309+
FF::AsyncBinding(
310+
std::make_shared<MatBindings::SetToWorker>(Mat::Converter::unwrap(info.This())),
311+
"Mat::SetToAsync",
312+
info
313+
);
314+
}
315+
298316
NAN_METHOD(Mat::GetDataAsArray) {
299317
cv::Mat mat = FF_UNWRAP_MAT_AND_GET(info.This());
300318
FF_ARR rowArray = FF_NEW_ARRAY(mat.size[0]);

cc/core/Mat.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ class Mat : public Nan::ObjectWrap {
6464
static NAN_METHOD(At);
6565
static NAN_METHOD(AtRaw);
6666
static NAN_METHOD(Set);
67+
static NAN_METHOD(SetTo);
68+
static NAN_METHOD(SetToAsync);
6769
static NAN_METHOD(GetDataAsArray);
6870
static NAN_METHOD(GetRegion);
6971
static NAN_METHOD(Norm);

cc/core/MatBindings.h

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,69 @@
55

66
namespace MatBindings {
77

8+
struct SetToWorker : public CatchCvExceptionWorker {
9+
public:
10+
cv::Mat self;
11+
SetToWorker(cv::Mat self) {
12+
this->self = self;
13+
}
14+
15+
cv::Mat mask = cv::noArray().getMat();
16+
17+
double newVal1;
18+
cv::Vec2d newVal2;
19+
cv::Vec3d newVal3;
20+
cv::Vec4d newVal4;
21+
22+
cv::Mat returnValue;
23+
24+
std::string executeCatchCvExceptionWorker() {
25+
switch (self.channels()) {
26+
case 2:
27+
returnValue = self.setTo(newVal2, mask);
28+
break;
29+
case 3:
30+
returnValue = self.setTo(newVal3, mask);
31+
break;
32+
case 4:
33+
returnValue = self.setTo(newVal4, mask);
34+
break;
35+
default:
36+
returnValue = self.setTo(newVal1, mask);
37+
break;
38+
}
39+
40+
return "";
41+
}
42+
43+
FF_VAL getReturnValue() {
44+
return Mat::Converter::wrap(returnValue);
45+
}
46+
47+
bool unwrapRequiredArgs(Nan::NAN_METHOD_ARGS_TYPE info) {
48+
switch (self.channels()) {
49+
case 2:
50+
return (Vec2::Converter::arg(0, &newVal2, info));
51+
break;
52+
case 3:
53+
return (Vec3::Converter::arg(0, &newVal3, info));
54+
break;
55+
case 4:
56+
return (Vec4::Converter::arg(0, &newVal4, info));
57+
break;
58+
default:
59+
return (DoubleConverter::arg(0, &newVal1, info));
60+
break;
61+
}
62+
}
63+
64+
bool unwrapOptionalArgs(Nan::NAN_METHOD_ARGS_TYPE info) {
65+
return (
66+
Mat::Converter::optArg(1, &mask, info)
67+
);
68+
}
69+
};
70+
871
struct PushBackWorker : public CatchCvExceptionWorker {
972
public:
1073
cv::Mat self;

lib/typings/Mat.d.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,14 @@ export class Mat {
264264
set(row: number, col: number, value: Vec2): void;
265265
set(row: number, col: number, value: Vec3): void;
266266
set(row: number, col: number, value: Vec4): void;
267+
setTo(value: number, mask?: Mat): Mat;
268+
setTo(value: Vec2, mask?: Mat): Mat;
269+
setTo(value: Vec3, mask?: Mat): Mat;
270+
setTo(value: Vec4, mask?: Mat): Mat;
271+
setToAsync(value: number, mask?: Mat): Promise<Mat>;
272+
setToAsync(value: Vec2, mask?: Mat): Promise<Mat>;
273+
setToAsync(value: Vec3, mask?: Mat): Promise<Mat>;
274+
setToAsync(value: Vec4, mask?: Mat): Promise<Mat>;
267275
sobel(ddepth: number, dx: number, dy: number, ksize?: number, scale?: number, delta?: number, borderType?: number): Mat;
268276
sobelAsync(ddepth: number, dx: number, dy: number, ksize?: number, scale?: number, delta?: number, borderType?: number): Promise<Mat>;
269277
split(): Mat[];

0 commit comments

Comments
 (0)