mirror of
https://github.com/opencv/opencv.git
synced 2025-06-10 19:24:07 +08:00
Merge remote-tracking branch 'upstream/3.4' into merge-3.4
This commit is contained in:
commit
6659d55a9d
@ -39,7 +39,6 @@ ALIASES += end_toggle="@htmlonly[block] </div> @endhtmlonly"
|
|||||||
ALIASES += prev_tutorial{1}="**Prev Tutorial:** \ref \1 \n"
|
ALIASES += prev_tutorial{1}="**Prev Tutorial:** \ref \1 \n"
|
||||||
ALIASES += next_tutorial{1}="**Next Tutorial:** \ref \1 \n"
|
ALIASES += next_tutorial{1}="**Next Tutorial:** \ref \1 \n"
|
||||||
ALIASES += youtube{1}="@htmlonly[block]<div align='center'><iframe title='Video' width='560' height='349' src='https://www.youtube.com/embed/\1?rel=0' frameborder='0' align='middle' allowfullscreen></iframe></div>@endhtmlonly"
|
ALIASES += youtube{1}="@htmlonly[block]<div align='center'><iframe title='Video' width='560' height='349' src='https://www.youtube.com/embed/\1?rel=0' frameborder='0' align='middle' allowfullscreen></iframe></div>@endhtmlonly"
|
||||||
TCL_SUBST =
|
|
||||||
OPTIMIZE_OUTPUT_FOR_C = NO
|
OPTIMIZE_OUTPUT_FOR_C = NO
|
||||||
OPTIMIZE_OUTPUT_JAVA = NO
|
OPTIMIZE_OUTPUT_JAVA = NO
|
||||||
OPTIMIZE_FOR_FORTRAN = NO
|
OPTIMIZE_FOR_FORTRAN = NO
|
||||||
|
@ -694,11 +694,16 @@ sub-matrices.
|
|||||||
-# Process "foreign" data using OpenCV (for example, when you implement a DirectShow\* filter or
|
-# Process "foreign" data using OpenCV (for example, when you implement a DirectShow\* filter or
|
||||||
a processing module for gstreamer, and so on). For example:
|
a processing module for gstreamer, and so on). For example:
|
||||||
@code
|
@code
|
||||||
void process_video_frame(const unsigned char* pixels,
|
Mat process_video_frame(const unsigned char* pixels,
|
||||||
int width, int height, int step)
|
int width, int height, int step)
|
||||||
{
|
{
|
||||||
Mat img(height, width, CV_8UC3, pixels, step);
|
// wrap input buffer
|
||||||
GaussianBlur(img, img, Size(7,7), 1.5, 1.5);
|
Mat img(height, width, CV_8UC3, (unsigned char*)pixels, step);
|
||||||
|
|
||||||
|
Mat result;
|
||||||
|
GaussianBlur(img, result, Size(7, 7), 1.5, 1.5);
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
@endcode
|
@endcode
|
||||||
-# Quickly initialize small matrices and/or get a super-fast element access.
|
-# Quickly initialize small matrices and/or get a super-fast element access.
|
||||||
|
@ -503,7 +503,7 @@ VSX_IMPL_CONV_EVEN_2_4(vec_uint4, vec_double2, vec_ctu, vec_ctuo)
|
|||||||
VSX_IMPL_CONV_2VARIANT(vec_int4, vec_float4, vec_cts, vec_cts)
|
VSX_IMPL_CONV_2VARIANT(vec_int4, vec_float4, vec_cts, vec_cts)
|
||||||
VSX_IMPL_CONV_2VARIANT(vec_float4, vec_int4, vec_ctf, vec_ctf)
|
VSX_IMPL_CONV_2VARIANT(vec_float4, vec_int4, vec_ctf, vec_ctf)
|
||||||
// define vec_cts for converting double precision to signed doubleword
|
// define vec_cts for converting double precision to signed doubleword
|
||||||
// which isn't combitable with xlc but its okay since Eigen only use it for gcc
|
// which isn't compatible with xlc but its okay since Eigen only uses it for gcc
|
||||||
VSX_IMPL_CONV_2VARIANT(vec_dword2, vec_double2, vec_cts, vec_ctsl)
|
VSX_IMPL_CONV_2VARIANT(vec_dword2, vec_double2, vec_cts, vec_ctsl)
|
||||||
#endif // Eigen
|
#endif // Eigen
|
||||||
|
|
||||||
|
@ -1537,7 +1537,7 @@ transform_8u( const uchar* src, uchar* dst, const float* m, int len, int scn, in
|
|||||||
static void
|
static void
|
||||||
transform_16u( const ushort* src, ushort* dst, const float* m, int len, int scn, int dcn )
|
transform_16u( const ushort* src, ushort* dst, const float* m, int len, int scn, int dcn )
|
||||||
{
|
{
|
||||||
#if CV_SIMD && !defined(__aarch64__) && !defined(_M_ARM64)
|
#if CV_SIMD
|
||||||
if( scn == 3 && dcn == 3 )
|
if( scn == 3 && dcn == 3 )
|
||||||
{
|
{
|
||||||
int x = 0;
|
int x = 0;
|
||||||
|
@ -82,7 +82,7 @@ struct index_creator
|
|||||||
nnIndex = new LshIndex<Distance>(dataset, params, distance);
|
nnIndex = new LshIndex<Distance>(dataset, params, distance);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw FLANNException("Unknown index type");
|
FLANN_THROW(cv::Error::StsBadArg, "Unknown index type");
|
||||||
}
|
}
|
||||||
|
|
||||||
return nnIndex;
|
return nnIndex;
|
||||||
@ -111,7 +111,7 @@ struct index_creator<False,VectorSpace,Distance>
|
|||||||
nnIndex = new LshIndex<Distance>(dataset, params, distance);
|
nnIndex = new LshIndex<Distance>(dataset, params, distance);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw FLANNException("Unknown index type");
|
FLANN_THROW(cv::Error::StsBadArg, "Unknown index type");
|
||||||
}
|
}
|
||||||
|
|
||||||
return nnIndex;
|
return nnIndex;
|
||||||
@ -140,7 +140,7 @@ struct index_creator<False,False,Distance>
|
|||||||
nnIndex = new LshIndex<Distance>(dataset, params, distance);
|
nnIndex = new LshIndex<Distance>(dataset, params, distance);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw FLANNException("Unknown index type");
|
FLANN_THROW(cv::Error::StsBadArg, "Unknown index type");
|
||||||
}
|
}
|
||||||
|
|
||||||
return nnIndex;
|
return nnIndex;
|
||||||
|
@ -34,7 +34,6 @@
|
|||||||
|
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
|
||||||
#include "general.h"
|
|
||||||
#include "nn_index.h"
|
#include "nn_index.h"
|
||||||
#include "ground_truth.h"
|
#include "ground_truth.h"
|
||||||
#include "index_testing.h"
|
#include "index_testing.h"
|
||||||
|
@ -33,7 +33,6 @@
|
|||||||
|
|
||||||
//! @cond IGNORED
|
//! @cond IGNORED
|
||||||
|
|
||||||
#include "general.h"
|
|
||||||
#include "nn_index.h"
|
#include "nn_index.h"
|
||||||
#include "kdtree_index.h"
|
#include "kdtree_index.h"
|
||||||
#include "kmeans_index.h"
|
#include "kmeans_index.h"
|
||||||
|
@ -82,11 +82,11 @@ NNIndex<Distance>* load_saved_index(const Matrix<typename Distance::ElementType>
|
|||||||
IndexHeader header = load_header(fin);
|
IndexHeader header = load_header(fin);
|
||||||
if (header.data_type != Datatype<ElementType>::type()) {
|
if (header.data_type != Datatype<ElementType>::type()) {
|
||||||
fclose(fin);
|
fclose(fin);
|
||||||
throw FLANNException("Datatype of saved index is different than of the one to be created.");
|
FLANN_THROW(cv::Error::StsError, "Datatype of saved index is different than of the one to be created.");
|
||||||
}
|
}
|
||||||
if ((size_t(header.rows) != dataset.rows)||(size_t(header.cols) != dataset.cols)) {
|
if ((size_t(header.rows) != dataset.rows)||(size_t(header.cols) != dataset.cols)) {
|
||||||
fclose(fin);
|
fclose(fin);
|
||||||
throw FLANNException("The index saved belongs to a different dataset");
|
FLANN_THROW(cv::Error::StsError, "The index saved belongs to a different dataset");
|
||||||
}
|
}
|
||||||
|
|
||||||
IndexParams params;
|
IndexParams params;
|
||||||
@ -140,7 +140,7 @@ public:
|
|||||||
{
|
{
|
||||||
FILE* fout = fopen(filename.c_str(), "wb");
|
FILE* fout = fopen(filename.c_str(), "wb");
|
||||||
if (fout == NULL) {
|
if (fout == NULL) {
|
||||||
throw FLANNException("Cannot open file");
|
FLANN_THROW(cv::Error::StsError, "Cannot open file");
|
||||||
}
|
}
|
||||||
save_header(fout, *nnIndex_);
|
save_header(fout, *nnIndex_);
|
||||||
saveIndex(fout);
|
saveIndex(fout);
|
||||||
|
@ -31,6 +31,8 @@
|
|||||||
#ifndef OPENCV_FLANN_GENERAL_H_
|
#ifndef OPENCV_FLANN_GENERAL_H_
|
||||||
#define OPENCV_FLANN_GENERAL_H_
|
#define OPENCV_FLANN_GENERAL_H_
|
||||||
|
|
||||||
|
#if CV_VERSION_MAJOR <= 4
|
||||||
|
|
||||||
//! @cond IGNORED
|
//! @cond IGNORED
|
||||||
|
|
||||||
#include "opencv2/core.hpp"
|
#include "opencv2/core.hpp"
|
||||||
@ -48,6 +50,14 @@ public:
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define FLANN_THROW(TYPE, STR) throw FLANNException(STR)
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define FLANN_THROW(TYPE, STR) CV_Error(TYPE, STR)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
//! @endcond
|
//! @endcond
|
||||||
|
|
||||||
#endif /* OPENCV_FLANN_GENERAL_H_ */
|
#endif /* OPENCV_FLANN_GENERAL_H_ */
|
||||||
|
@ -382,7 +382,7 @@ public:
|
|||||||
chooseCenters = &HierarchicalClusteringIndex::GroupWiseCenterChooser;
|
chooseCenters = &HierarchicalClusteringIndex::GroupWiseCenterChooser;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
throw FLANNException("Unknown algorithm for choosing initial centers.");
|
FLANN_THROW(cv::Error::StsError, "Unknown algorithm for choosing initial centers.");
|
||||||
}
|
}
|
||||||
|
|
||||||
root = new NodePtr[trees_];
|
root = new NodePtr[trees_];
|
||||||
@ -446,7 +446,7 @@ public:
|
|||||||
void buildIndex() CV_OVERRIDE
|
void buildIndex() CV_OVERRIDE
|
||||||
{
|
{
|
||||||
if (branching_<2) {
|
if (branching_<2) {
|
||||||
throw FLANNException("Branching factor must be at least 2");
|
FLANN_THROW(cv::Error::StsError, "Branching factor must be at least 2");
|
||||||
}
|
}
|
||||||
|
|
||||||
free_indices();
|
free_indices();
|
||||||
|
@ -93,7 +93,7 @@ float search_with_ground_truth(NNIndex<Distance>& index, const Matrix<typename D
|
|||||||
if (matches.cols<size_t(nn)) {
|
if (matches.cols<size_t(nn)) {
|
||||||
Logger::info("matches.cols=%d, nn=%d\n",matches.cols,nn);
|
Logger::info("matches.cols=%d, nn=%d\n",matches.cols,nn);
|
||||||
|
|
||||||
throw FLANNException("Ground truth is not computed for as many neighbors as requested");
|
FLANN_THROW(cv::Error::StsError, "Ground truth is not computed for as many neighbors as requested");
|
||||||
}
|
}
|
||||||
|
|
||||||
KNNResultSet<DistanceType> resultSet(nn+skipMatches);
|
KNNResultSet<DistanceType> resultSet(nn+skipMatches);
|
||||||
|
@ -37,7 +37,6 @@
|
|||||||
#include <map>
|
#include <map>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
#include "general.h"
|
|
||||||
#include "nn_index.h"
|
#include "nn_index.h"
|
||||||
#include "dynamic_bitset.h"
|
#include "dynamic_bitset.h"
|
||||||
#include "matrix.h"
|
#include "matrix.h"
|
||||||
|
@ -37,7 +37,6 @@
|
|||||||
#include <map>
|
#include <map>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
#include "general.h"
|
|
||||||
#include "nn_index.h"
|
#include "nn_index.h"
|
||||||
#include "matrix.h"
|
#include "matrix.h"
|
||||||
#include "result_set.h"
|
#include "result_set.h"
|
||||||
|
@ -370,7 +370,7 @@ public:
|
|||||||
chooseCenters = &KMeansIndex::chooseCentersKMeanspp;
|
chooseCenters = &KMeansIndex::chooseCentersKMeanspp;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
throw FLANNException("Unknown algorithm for choosing initial centers.");
|
FLANN_THROW(cv::Error::StsBadArg, "Unknown algorithm for choosing initial centers.");
|
||||||
}
|
}
|
||||||
cb_index_ = 0.4f;
|
cb_index_ = 0.4f;
|
||||||
|
|
||||||
@ -442,7 +442,7 @@ public:
|
|||||||
void buildIndex() CV_OVERRIDE
|
void buildIndex() CV_OVERRIDE
|
||||||
{
|
{
|
||||||
if (branching_<2) {
|
if (branching_<2) {
|
||||||
throw FLANNException("Branching factor must be at least 2");
|
FLANN_THROW(cv::Error::StsError, "Branching factor must be at least 2");
|
||||||
}
|
}
|
||||||
|
|
||||||
free_indices();
|
free_indices();
|
||||||
@ -559,7 +559,7 @@ public:
|
|||||||
{
|
{
|
||||||
int numClusters = centers.rows;
|
int numClusters = centers.rows;
|
||||||
if (numClusters<1) {
|
if (numClusters<1) {
|
||||||
throw FLANNException("Number of clusters must be at least 1");
|
FLANN_THROW(cv::Error::StsBadArg, "Number of clusters must be at least 1");
|
||||||
}
|
}
|
||||||
|
|
||||||
DistanceType variance;
|
DistanceType variance;
|
||||||
|
@ -33,7 +33,6 @@
|
|||||||
|
|
||||||
//! @cond IGNORED
|
//! @cond IGNORED
|
||||||
|
|
||||||
#include "general.h"
|
|
||||||
#include "nn_index.h"
|
#include "nn_index.h"
|
||||||
|
|
||||||
namespace cvflann
|
namespace cvflann
|
||||||
|
@ -42,7 +42,6 @@
|
|||||||
#include <map>
|
#include <map>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "general.h"
|
|
||||||
#include "nn_index.h"
|
#include "nn_index.h"
|
||||||
#include "matrix.h"
|
#include "matrix.h"
|
||||||
#include "result_set.h"
|
#include "result_set.h"
|
||||||
|
@ -35,8 +35,6 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#include "general.h"
|
|
||||||
|
|
||||||
namespace cvflann
|
namespace cvflann
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -31,7 +31,6 @@
|
|||||||
#ifndef OPENCV_FLANN_NNINDEX_H
|
#ifndef OPENCV_FLANN_NNINDEX_H
|
||||||
#define OPENCV_FLANN_NNINDEX_H
|
#define OPENCV_FLANN_NNINDEX_H
|
||||||
|
|
||||||
#include "general.h"
|
|
||||||
#include "matrix.h"
|
#include "matrix.h"
|
||||||
#include "result_set.h"
|
#include "result_set.h"
|
||||||
#include "params.h"
|
#include "params.h"
|
||||||
|
@ -91,7 +91,7 @@ T get_param(const IndexParams& params, cv::String name)
|
|||||||
return it->second.cast<T>();
|
return it->second.cast<T>();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
throw FLANNException(cv::String("Missing parameter '")+name+cv::String("' in the parameters given"));
|
FLANN_THROW(cv::Error::StsBadArg, cv::String("Missing parameter '")+name+cv::String("' in the parameters given"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,8 +37,6 @@
|
|||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "general.h"
|
|
||||||
|
|
||||||
namespace cvflann
|
namespace cvflann
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -112,11 +112,11 @@ inline IndexHeader load_header(FILE* stream)
|
|||||||
size_t read_size = fread(&header,sizeof(header),1,stream);
|
size_t read_size = fread(&header,sizeof(header),1,stream);
|
||||||
|
|
||||||
if (read_size!=(size_t)1) {
|
if (read_size!=(size_t)1) {
|
||||||
throw FLANNException("Invalid index file, cannot read");
|
FLANN_THROW(cv::Error::StsError, "Invalid index file, cannot read");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(header.signature,FLANN_SIGNATURE_)!=0) {
|
if (strcmp(header.signature,FLANN_SIGNATURE_)!=0) {
|
||||||
throw FLANNException("Invalid index file, wrong signature");
|
FLANN_THROW(cv::Error::StsError, "Invalid index file, wrong signature");
|
||||||
}
|
}
|
||||||
|
|
||||||
return header;
|
return header;
|
||||||
@ -150,7 +150,7 @@ void load_value(FILE* stream, T& value, size_t count = 1)
|
|||||||
{
|
{
|
||||||
size_t read_cnt = fread(&value, sizeof(value), count, stream);
|
size_t read_cnt = fread(&value, sizeof(value), count, stream);
|
||||||
if (read_cnt != count) {
|
if (read_cnt != count) {
|
||||||
throw FLANNException("Cannot read from file");
|
FLANN_THROW(cv::Error::StsParseError, "Cannot read from file");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -159,12 +159,12 @@ void load_value(FILE* stream, cvflann::Matrix<T>& value)
|
|||||||
{
|
{
|
||||||
size_t read_cnt = fread(&value, sizeof(value), 1, stream);
|
size_t read_cnt = fread(&value, sizeof(value), 1, stream);
|
||||||
if (read_cnt != 1) {
|
if (read_cnt != 1) {
|
||||||
throw FLANNException("Cannot read from file");
|
FLANN_THROW(cv::Error::StsParseError, "Cannot read from file");
|
||||||
}
|
}
|
||||||
value.data = new T[value.rows*value.cols];
|
value.data = new T[value.rows*value.cols];
|
||||||
read_cnt = fread(value.data, sizeof(T), value.rows*value.cols, stream);
|
read_cnt = fread(value.data, sizeof(T), value.rows*value.cols, stream);
|
||||||
if (read_cnt != (size_t)(value.rows*value.cols)) {
|
if (read_cnt != (size_t)(value.rows*value.cols)) {
|
||||||
throw FLANNException("Cannot read from file");
|
FLANN_THROW(cv::Error::StsParseError, "Cannot read from file");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -175,12 +175,12 @@ void load_value(FILE* stream, std::vector<T>& value)
|
|||||||
size_t size;
|
size_t size;
|
||||||
size_t read_cnt = fread(&size, sizeof(size_t), 1, stream);
|
size_t read_cnt = fread(&size, sizeof(size_t), 1, stream);
|
||||||
if (read_cnt!=1) {
|
if (read_cnt!=1) {
|
||||||
throw FLANNException("Cannot read from file");
|
FLANN_THROW(cv::Error::StsError, "Cannot read from file");
|
||||||
}
|
}
|
||||||
value.resize(size);
|
value.resize(size);
|
||||||
read_cnt = fread(&value[0], sizeof(T), size, stream);
|
read_cnt = fread(&value[0], sizeof(T), size, stream);
|
||||||
if (read_cnt != size) {
|
if (read_cnt != size) {
|
||||||
throw FLANNException("Cannot read from file");
|
FLANN_THROW(cv::Error::StsError, "Cannot read from file");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,7 +13,6 @@
|
|||||||
#include "opencv2/flann/index_testing.h"
|
#include "opencv2/flann/index_testing.h"
|
||||||
#include "opencv2/flann/params.h"
|
#include "opencv2/flann/params.h"
|
||||||
#include "opencv2/flann/saving.h"
|
#include "opencv2/flann/saving.h"
|
||||||
#include "opencv2/flann/general.h"
|
|
||||||
|
|
||||||
// index types
|
// index types
|
||||||
#include "opencv2/flann/all_indices.h"
|
#include "opencv2/flann/all_indices.h"
|
||||||
|
@ -54,6 +54,12 @@ int rotatedRectangleIntersection( const RotatedRect& rect1, const RotatedRect& r
|
|||||||
// L2 metric
|
// L2 metric
|
||||||
const float samePointEps = std::max(1e-16f, 1e-6f * (float)std::max(rect1.size.area(), rect2.size.area()));
|
const float samePointEps = std::max(1e-16f, 1e-6f * (float)std::max(rect1.size.area(), rect2.size.area()));
|
||||||
|
|
||||||
|
if (rect1.size.empty() || rect2.size.empty())
|
||||||
|
{
|
||||||
|
intersectingRegion.release();
|
||||||
|
return INTERSECT_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
Point2f vec1[4], vec2[4];
|
Point2f vec1[4], vec2[4];
|
||||||
Point2f pts1[4], pts2[4];
|
Point2f pts1[4], pts2[4];
|
||||||
|
|
||||||
|
@ -366,4 +366,29 @@ TEST(Imgproc_RotatedRectangleIntersection, regression_12221_2)
|
|||||||
EXPECT_LE(intersections.size(), (size_t)8);
|
EXPECT_LE(intersections.size(), (size_t)8);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(Imgproc_RotatedRectangleIntersection, regression_18520)
|
||||||
|
{
|
||||||
|
RotatedRect rr_empty(
|
||||||
|
Point2f(2, 2),
|
||||||
|
Size2f(0, 0), // empty
|
||||||
|
0);
|
||||||
|
RotatedRect rr(
|
||||||
|
Point2f(50, 50),
|
||||||
|
Size2f(4, 4),
|
||||||
|
0);
|
||||||
|
|
||||||
|
{
|
||||||
|
std::vector<Point2f> intersections;
|
||||||
|
int interType = cv::rotatedRectangleIntersection(rr_empty, rr, intersections);
|
||||||
|
EXPECT_EQ(INTERSECT_NONE, interType) << "rr_empty, rr";
|
||||||
|
EXPECT_EQ((size_t)0, intersections.size()) << "rr_empty, rr";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
std::vector<Point2f> intersections;
|
||||||
|
int interType = cv::rotatedRectangleIntersection(rr, rr_empty, intersections);
|
||||||
|
EXPECT_EQ(INTERSECT_NONE, interType) << "rr, rr_empty";
|
||||||
|
EXPECT_EQ((size_t)0, intersections.size()) << "rr, rr_empty";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}} // namespace
|
}} // namespace
|
||||||
|
@ -822,7 +822,7 @@ class JSWrapperGenerator(object):
|
|||||||
|
|
||||||
|
|
||||||
# Generate bindings for properties
|
# Generate bindings for properties
|
||||||
for property in sorted(class_info.props):
|
for property in class_info.props:
|
||||||
_class_property = class_property_enum_template if property.tp in type_dict else class_property_template
|
_class_property = class_property_enum_template if property.tp in type_dict else class_property_template
|
||||||
class_bindings.append(_class_property.substitute(js_name=property.name, cpp_name='::'.join(
|
class_bindings.append(_class_property.substitute(js_name=property.name, cpp_name='::'.join(
|
||||||
[class_info.cname, property.name])))
|
[class_info.cname, property.name])))
|
||||||
|
Loading…
Reference in New Issue
Block a user