Spline Segments



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 15/01/2003 at 07:55, xxxxxxxx wrote:

    User Information:
    Cinema 4D Version:   8.012 
    Platform:      
    Language(s) :   C.O.F.F.E.E  ;

    ---------
    *NEWBIE COFFEE QUESTION*

    How do I choose which spline segment it is that i'm affecting in my spline object? like if i want to make a new segment and put a point in it, how would i do this?



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 16/01/2003 at 17:37, xxxxxxxx wrote:

    See SplineObject::GetSegments().



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 16/01/2003 at 19:24, xxxxxxxx wrote:

    i can't seem to get it to work at all... i thought i had... but then it turned out i was wrong.

    here's the code for making a spline with four points and two segments, but it doesn't seem to work, it just creates a single spline with 1 segment, and the getsegemtns command always returns 0 with this even when it has 1 segment.

    if (!instanceof(op,PointObject)) return FALSE;        // Not a point object.

    //segment making part

    var sc= new(VariableChanged); if (!sc) return FALSE;
              var cnt=op->GetSegmentCount();
              sc->Init(cnt,2);

    var bt = new(BackupTags); if (!bt) return FALSE; // Allocate a BackupTags object.
              bt->Init(op);                                    // Backup up 'op'

    // Send the message to all tags and keys and let them return
              // a boolean, telling us if everything is alright:

    var ok = op->MultiMessage(MSG_SEGMENTS_CHANGED,sc);

    if (!ok)
              {
               bt->Restore(); // Restore the object if something went wrong                                
               return FALSE;
              }

    var seg=new(array,2);
              seg[0]=2;
              seg[1]=2;

    op->SetSegments(seg);

    //end of segment making part

    //spline making part

    var vc = new(VariableChanged); if (!vc) return FALSE; // Allocate class.

    var cnt = op->GetPointCount(); // Get actual point count.
              vc->Init(cnt,4);            // Resize point count from cnt to cnt+1.
                                    // Just for adding a point at the end of
                                    // the point list one doesn't need a map.

    var bt = new(BackupTags); if (!bt) return FALSE; // Allocate a BackupTags object.
              bt->Init(op);                                    // Backup up 'op'

    // Send the message to all tags and keys and let them return
              // a boolean, telling us if everything is alright:

    var ok = op->MultiMessage(MSG_POINTS_CHANGED,vc);

    if (!ok)
              {
               bt->Restore(); // Restore the object if something went wrong                                
               return FALSE;
              }

    // Now all tags and structures have reacted and resized their
              // memory part, so one can access the new point:
              
              var pnts=new(array,4);
              pnts[0]=apos;
              pnts[1]=bpos;
              pnts[2]=cpos;
              pnts[3]=dpos;

    op->SetPoints(pnts);    // Set data p for new point
    //end of spline making part
              op->Message(MSG_UPDATE); // Notify object of change

    i've tried both ways around with the points being made first, and the segmenst second, but i just can't seem to get it to work. apos,bpos,cpos and dpos are the positions of four nulls, and op is the spline.


Log in to reply