Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode.
Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 06/06/2008 at 12:00, xxxxxxxx wrote:
User Information: Cinema 4D Version: 10.1+ Platform: Windows ; Language(s) : C++ ;
--------- I have questions about the following code-snippet...
//---------------------------------------------------------------------------------------------------- //****************************************************************************************************** // ObjLoader::MakeSplineObject() //****************************************************************************************************** //------------------------------------------------------------------------------------------------------ BaseObject *ObjLoader::MakeSplineObject(DWORD numSegments, DWORD *pSegIndices, String splineName) { SplineObject *op; Vector *padr; Segment *sadr; objSegment *pSeg; DWORD *pSegNdx; DWORD i, j, numVerts; if( !numSegments ) return NULL; // first figure out how many vertices are used... numVerts = 0; pSegNdx = pSegIndices; for( i=0; i<numSegments; i++) { pSeg = &m_pSegs[*pSegNdx]; numVerts += pSeg->vCount; pSegNdx++; } op = SplineObject::Alloc(numVerts,Tlinear); // allocate spline object large enough for all points if( !op || !op->MakeVariableTag(Tsegment,numSegments) ) { MessageDialog(String("Spline Object Allocation Failed")); return NULL; } op->SetName(splineName); #ifdef _R10p1_SDK_ padr = op->GetPointW(); sadr = op->GetSegmentW(); #else padr = op->GetPoint(); sadr = op->GetSegment(); #endif // set up the points... numVerts = 0; if( padr ) { pSegNdx = pSegIndices; for( i=0; i<numSegments; i++) { pSeg = &m_pSegs[*pSegNdx]; for(j=0; j<pSeg->vCount; j++) padr[numVerts++] = m_pVerts[pSeg->v[j]]; pSegNdx++; } } // set up the segments... if (sadr) { pSegNdx = pSegIndices; for( i=0; i<numSegments; i++) { pSeg = &m_pSegs[*pSegNdx]; sadr[i].cnt = pSeg->vCount; sadr[i].closed = m_MpOpts.MpCloseSplines() ? true : false; // <-- this is failing pSegNdx++; } } return op; }
...assuming that 'm_MpOpts.MpCloseSplines()' returns true (which it does), the splines are still not being 'closed'. In the SDK, I see a SplineObject::IsClosed(void) method, but no other way to Set it to closed. Am I missing something? Thanks, Keith
On 06/06/2008 at 13:06, xxxxxxxx wrote:
You have to:
Segment* sadr = op->GetSegmentW();
and set each segment in the spline to be closed, set:
sadr[n].closed = TRUE;
which is what you're already doing. I don't know what the m_MpOpts.MpCloseSplines() is but maybe it is the problem. Try just doing:
sadr[n].closed = m_MpOpts.MpCloseSpline();
and see what results. Don't forget to update the SplineObject after changing it:
op->Message(MSG_UPDATE);
On 06/06/2008 at 13:14, xxxxxxxx wrote:
Hey Robert, I have it coded that way because 'm_MpOpts.MpCloseSpline()' call returns a masked value or zero (not really a boolean), but I've also just hard-coded a 'true' there with no better luck. Your 'MSG_UPDATE' suggestion may lead somewhere though.. lemme look into the code again - thanks.
On 06/06/2008 at 13:18, xxxxxxxx wrote:
...hmm - nope - I was already doing a op->Message(MSG_UPDATE); everywhere, after adding the spline to the scene/document (I also just tried doing it before, but neither works).
On 06/06/2008 at 13:30, xxxxxxxx wrote:
I'm surprised since this is almost identical in places to my code which exists in several forms throughout my plugin code.
There is one difference though. I insert the SplineObject into the document before doing any setup. Could this be the culprit?
Oh, I just noticed this tidbit in my code as well (eh hem) :
splineObj->GetDataInstance()->SetBool(SPLINEOBJECT_CLOSED,FALSE);
So, you may want to add this (with TRUE of course).
On 06/06/2008 at 13:51, xxxxxxxx wrote:
D'oh! or, maybe "Eureka" is more appropriate :). Thanks Robert, I'm sure that will fix it... and - yep! it did. Thanks again.