view.c

来自「FreeFem++可以生成高质量的有限元网格。可以用于流体力学」· C语言 代码 · 共 92 行

C
92
字号
#include "medit.h"#include "sproto.h"#include "extern.h"static pTransform  cview   = 0;static pCamera     ccam    = 0;static pPersp      cpersp  = 0;static int         cscene  = 0;static ubyte       curview = 0;void copyView(pTransform view,pCamera cam,pPersp persp) {  cscene = currentScene();  if ( !cview ) {    cview = (pTransform)calloc(1,sizeof(struct transform));    if ( !cview )  exit(2);  }  cview = (pTransform)memcpy(cview,view,sizeof(struct transform));  if ( !cview )  exit(2);    if ( !ccam ) {    ccam = (pCamera)calloc(1,sizeof(struct camera));    if ( !ccam )  exit(2);  }  ccam = (pCamera)memcpy(ccam,cam,sizeof(struct camera));  if ( !ccam )  exit(2);    if ( !cpersp ) {    cpersp = (pPersp)calloc(1,sizeof(struct sperspective));    if ( !cpersp )  exit(2);  }  cpersp = (pPersp)memcpy(cpersp,persp,sizeof(struct sperspective));  if ( !cpersp )  exit(2);  curview = 1;}int pasteView(pTransform view,pCamera cam,pPersp persp) {  if ( !curview && !ccam && !persp )   return(0);   view  = (pTransform)memcpy(view,cview,sizeof(struct transform));  cam   = (pCamera)memcpy(cam,ccam,sizeof(struct camera));  persp = memcpy(persp,cpersp,sizeof(struct sperspective));    if ( !view || !cam || !persp )  exit(2);  curview = 0;  return(1);}/* link scene 1 (slave) to scene 2 (master) */int linkView(pScene slave) {  pScene master;  int    idw = currentScene();  /* default */  if ( ddebug ) printf("link view\n");  if ( !curview || idw == cscene )   return(0);  /* link 2 scenes */  master         = cv.scene[cscene];  master->slave  = idw;  master->master = -1;  memcpy(slave->view,master->view,sizeof(struct transform));  memcpy(slave->camera,master->camera,sizeof(struct camera));  memcpy(slave->persp,master->persp,sizeof(struct sperspective));  memcpy(slave->clip->eqn,master->clip->eqn,4*sizeof(float));  memcpy(slave->clip->cliptr,master->clip->cliptr,sizeof(struct transform));  slave->slave  = -1;  slave->master = cscene;  curview       = 0;  return(1);}void unlinkView(pScene sc1) {  pScene  sc2;  if ( sc1->master == -1 )  return;  /* copy master view */  sc2 = cv.scene[sc1->master];  sc1->view = (pTransform)createTransform();  memcpy(sc1->view,sc2->view,sizeof(struct transform));  /* remove link */  sc1->master = -1;  sc2->slave  = -1;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?