/* This used to be called when moving all contours in an object but not anymore */ void imod_contour_move(int ob) { /* DNM2/13/03: remove oldpt, co, cont */ int oldob; int oldco; Iobj *obj; Iobj *olObj; Icont *ocont; ImodView *vi = App->cvi; Imod *imod = App->cvi->imod; oldob = imod->cindex.object; oldco = imod->cindex.contour; ocont = imodContourGet(imod); if (!ocont) return; if (ob == oldob) return; if (ob > imod->objsize) return; if (ob < 0) return; obj = &(imod->obj[ob]); olObj = &(imod->obj[oldob]); if (istoreCountContSurfItems(olObj->store, oldco, 0)) { vi->undo->objectPropChg(ob); istoreCopyContSurfItems(olObj->store, &obj->store, oldco, obj->contsize, 0); } vi->undo->contourMove(imod->cindex.object, 0, ob, obj->contsize); /* DNM: switch to this Add and Remove method to avoid problems with labels */ imodObjectAddContour(obj, ocont); imodObjectRemoveContour(olObj, oldco); /* DNM 3/29/01: delete old code. */ return; }
/* * Copy a single contour, cont, to the place it needs to go. * */ static int copyContour(Icont *cont, int coNum) { Iobj *toObj; int co,pt; int section; ImodView *vw = sData.vw; int obnum = vw->imod->cindex.object; if (!cont) return(-1); if (!cont->psize) return(-1); switch(sData.copyOperation){ case COPY_TO_OBJECT: obnum = sData.objectNumber - 1; toObj = &vw->imod->obj[obnum]; /* Don't copy if duplicate contour already exists. */ for(co = 0; co < toObj->contsize; co++){ if (contCompare(&toObj->cont[co], cont) == 0) return(0); } vbCleanupVBD(toObj); /* Remove duplicate points */ if (iobjScat(toObj->flags)){ for(co = 0; co < toObj->contsize; co++){ contRmDup(&toObj->cont[co], cont); } } vw->undo->contourAddition(obnum, toObj->contsize); imodObjectAddContour(toObj, cont); break; case COPY_TO_CURRENT: toObj = imodObjectGet(vw->imod); vw->undo->contourAddition(obnum, toObj->contsize); imodObjectAddContour(toObj, cont); break; case COPY_TO_SECTION: case COPY_TO_NEXT_SECTION: case COPY_TO_PREV_SECTION: toObj = &vw->imod->obj[sData.currentObject]; section = sData.sectionNumber-1; for(pt = 0; pt < cont->psize; pt++){ cont->pts[pt].z = section; } vw->undo->contourAddition(sData.currentObject, toObj->contsize); imodObjectAddContour(toObj, cont); break; case COPY_TO_TIME: case COPY_TO_NEXT_TIME: toObj = &vw->imod->obj[sData.currentObject]; cont->time = sData.timeIndex; vw->undo->contourAddition(sData.currentObject, toObj->contsize); imodObjectAddContour(toObj, cont); break; } // Copy any contour properties from source to destination object if (istoreCountContSurfItems(vw->imod->obj[sData.currentObject].store, coNum, 0)) { vw->undo->objectPropChg(obnum); istoreCopyContSurfItems(vw->imod->obj[sData.currentObject].store, &toObj->store, coNum, toObj->contsize - 1, 0); } return(0); }