I want to get the coordinates of the points I have selected "en"
-
User Information:
Cinema 4D Version: 21.115
Platform: Windows ;
Language(s) : C++ ;
I've converted objects to polygons,
And selected a pointAnd print out the serial number of these points
How can I get the coordinates of these points
Here's my code
BaseDocument*doc = GetActiveDocument(); BaseObject * obj1 = doc->GetActiveObject(); if (obj1->GetType()!= Opolygon) { break; } PointObject *slpoint = ToPoint(obj1); BaseSelect *pointsel = slpoint->GetPointS(); Int32 seg = 0, i, a, b; while (pointsel->GetRange(seg++, LIMIT <Int32> ::MAX,&a,&b)) { for ( i = a; i < b; i++) { ApplicationOutput("aa: @"_s, i); } }
-
hello,
For your next threads, please help us keeping things organised and clean.
- Q&A New Functionality.
- How to Post Questions especially the tagging part.
I've added the tags and marked this thread as a question so when you considered it as solved, please change the state
you can use GetPointR to retrieve the points array pointer.
You will retrieve the point in object position so you have to multiply by the matrix of the object to retrieve the world coordinate of the point.
Watch out that your range could have only one point so be careful with the condition of the for loop and use inforior or equal to b
for (i=a; i<=b; ++i)
Something like this will work
PointObject *slpoint = ToPoint(obj1); BaseSelect *pointsel = slpoint->GetPointS(); const maxon::Vector* padr = slpoint->GetPointR(); const maxon::Matrix opmg = slpoint->GetMg(); Int32 seg = 0, i, a, b; while (pointsel->GetRange(seg++, LIMIT<Int32>::MAX, &a, &b)) { for (i = a; i <= b; i++) { const maxon::Vector pointPosition = padr[i]; const maxon::Vector worldPointPosition = opmg * pointPosition ; ApplicationOutput("aa index : @, object position @, wordl position @", i, pointPosition, worldPointPosition); } }
Cheers
Manuel -
@m_magalhaes
非常感谢
我用另外一个办法解决了不用求矩阵
代码如下PointObject *slpoint = ToPoint(obj1); //转换为点对象 BaseSelect *pointsel = slpoint->GetPointS();//获取选择的点 Int32 pointConst = slpoint->GetPointCount();//获取所有的点 Vector *points = slpoint->GetPointW();//获取所有点的坐标 Vector pt; Int32 i; for (i = 0; i < pointConst; i++)//利用for循环来不断读取所有点的数据 { if (pointsel->IsSelected(i))//来判断当前的点是否选择住 { pt += points[i];//若果选择 所有向量相加 } }
-
@m_magalhaes
I'll write it in your wayThank you very much.
Cheers!