å///////////////////////////// // Hair Paint Mesh Brush // // Per-Anders Edwards 2003 // ///////////////////////////// //Slider1(Spacing MIN 1; MAX 100; LONG); //Slider2(Gravity MIN 0; MAX 1000;); //Slider3(Kinkyness MIN 1; MAX 1000;); //Slider4(Kink Scale MIN 1;); //Slider5(Knots MIN 0; LONG); //Slider6(Length MIN 0; MAX 1000; METER); //C/heckBox1(Smooth); var click; var oldpnt; var spacer; main(doc,op) { if (!safe) return; if (!spacer) spacer=0; spacer++; var sl5=slider5+2; slider6=slider6+0.001; if (spacerGetFirstObject(); if (findop->GetName()!="Mesh Brush Spline") { myop=new(SplineObject); if (check1) { //use akima, or linear var bc=myop->GetContainer(); bc->SetData(SPLINEOBJECT_TYPE,2); myop->SetContainer(bc); } doc->AddUndo(UNDO_NEW,myop); var mytag=new(SegmentTag); myop->InsertBefore(findop); myop->InsertTag(mytag,0); myop->SetName("Mesh Brush Spline"); } else myop=findop; doc->AddUndo(UNDO_CHANGE,myop); // var cnt=myop->GetPointCount(); // if (!click) { click=TRUE; var segcnt=myop->GetSegmentCount(); var vc=new(VariableChanged); vc->Init(segcnt,segcnt+1); myop->MultiMessage(MSG_SEGMENTS_CHANGED,vc); var segs=myop->GetSegments(); segs[segcnt]=0; myop->SetSegments(segs); oldpnt=0; // } oldpnt+=sl5; var segcnt=myop->GetSegmentCount(); var vc=new(VariableChanged); vc->Init(segcnt,segcnt); myop->MultiMessage(MSG_SEGMENTS_CHANGED,vc); var segs=myop->GetSegments(); segs[segcnt-1]=oldpnt; myop->SetSegments(segs); myop->Message(MSG_UPDATE); var cnt=myop->GetPointCount(); var vc=new(VariableChanged); vc->Init(cnt,cnt+sl5); myop->MultiMessage(MSG_POINTS_CHANGED,vc); var i; var direction=cursnorm; var vect=vector(0,0,0); var planemat=new(Matrix); planemat->SetScale(vector(1,1,1)); planemat->SetRotHPB(VectorToHPB(cursnorm)); planemat->SetV0(cursor); var area=(softradius+0.001)*2; var kinkscale=1-((slider4/4)+0.75); var noise=new(Noise); var noise1=(0.5-noise->Noise(cursor.x*50,cursor.y*23,cursor.z*34,GeGetSysTime()->second))*area; var noise2=(0.5-noise->Noise(cursor.x+28*74,cursor.y*626,cursor.z*23,GeGetSysTime()->second))*area; var noise3; var lastpos=planemat->GetMulP(vector(noise1,noise2,0)); myop->SetPoint(cnt,op->GetMg()->GetMulP(lastpos)); cnt++; for (i=cnt;iNoise((lastpos.x+50)*kinkscale,(lastpos.y+23)*kinkscale,(lastpos.z+34)*kinkscale,GeGetSysTime()->second)); noise2=(0.5-noise->Noise((lastpos.x+28)*kinkscale,(lastpos.y+626)*kinkscale,(lastpos.z+23)*kinkscale,GeGetSysTime()->second)); noise3=(0.5-noise->Noise((lastpos.x+944)*kinkscale,(lastpos.y+2)*kinkscale,(lastpos.z)*kinkscale,GeGetSysTime()->second)); lastpos+=direction*((slider6*bmultiply)/sl5)*bstrength*ppressure+(vector(noise1,noise2,noise3)*(slider3*10)); myop->SetPoint(i,op->GetMg()->GetMulP(lastpos)); } myop->Message(MSG_UPDATE); }