void WritePS( Rect *gp , Hashtable_type HN , Hashtable_type HE , Hashtable_type HL , Queuetable_type C ) { Node_type *pn; Elem_type *pe; Line_type *pl; int i,j; int nvertex,node; float x,y,dxy; float xmin,xmax,ymin,ymax; Rect r; xmin=gp->low.x; xmax=gp->high.x; ymin=gp->low.y; ymax=gp->high.y; if( ! PsOpen ) PsGraphOpen(); PsStartPage(); PsOpen = TRUE; PsSetWorld(xmin,ymin,xmax,ymax); PsRectifyScale(); PsMove(xmin,ymin); PsPlot(xmax,ymin); PsPlot(xmax,ymax); PsPlot(xmin,ymax); PsPlot(xmin,ymin); /* Plot Window is always a square -> use any direction to compute dxy */ /* FIXME */ dxy = (gp->high.x - gp->low.x)/190.; /* should be 1mm */ for(i=1; i<=NTotNodes; i++) { if( (pn=RetrieveByNodeNumber(HN,i)) != NULL ) { if( !GetUseN(pn) ) { x=pn->coord.x; y=pn->coord.y; if(xmin<=x && x<=xmax && ymin<=y && y<=ymax) { crossPs(x,y,dxy); } } } } PsFlush(); for(i=1; i<=NTotElems; i++) { if( (pe=RetrieveByElemNumber(HE,i)) != NULL ) { nvertex=pe->vertex; PolyMinMaxIndex(HN,nvertex,pe->index,&r); if(r.low.x>xmax||r.high.x<xmin||r.low.y>ymax||r.high.y<ymin) continue; node=pe->index[nvertex-1]; pn=RetrieveByNodeNumber(HN,node); PsMove(pn->coord.x,pn->coord.y); for(j=0; j<nvertex; j++) { node=pe->index[j]; pn=RetrieveByNodeNumber(HN,node); PsPlot(pn->coord.x,pn->coord.y); } } } PsFlush(); for(i=1; i<=NTotLines; i++) { if( (pl=RetrieveByLineNumber(HL,i)) != NULL ) { nvertex=pl->vertex; PolyMinMaxIndex(HN,nvertex,pl->index,&r); if(r.low.x>xmax||r.high.x<xmin||r.low.y>ymax||r.high.y<ymin) continue; /* node=pl->index[nvertex-1]; */ node=pl->index[0]; pn=RetrieveByNodeNumber(HN,node); PsMove(pn->coord.x,pn->coord.y); for(j=1; j<pl->vertex; j++) { node=pl->index[j]; pn=RetrieveByNodeNumber(HN,node); PsPlot(pn->coord.x,pn->coord.y); } } } PsFlush(); PsEndPage(); }
void WriteFile( char *file , NodeList list , int all ) { int i,j; int count; int linetype; FILE *fp; Node_type *pn; Elem_type *pe; Line_type *pl; if( file == NULL ) { fp=fopen("new.grd","w"); } else { fp=fopen(file,"w"); } /* comments */ fprintf(fp,"\n"); fprintf(fp,"0 (mesh) automatic generated grid\n"); fprintf(fp,"\n"); /* nodes */ ResetHashTable(HNN); while( (pn=VisitHashTableN(HNN)) != NULL ) { if( !all && IsNtype(pn, N_EXTERNAL ) ) continue; fprintf(fp,"1 %d %d %f %f" ,pn->number ,(int) pn->type ,pn->coord.x ,pn->coord.y ); if( pn->depth != NULLDEPTH ) fprintf(fp," %f\n",pn->depth); else fprintf(fp,"\n"); } fprintf(fp,"\n"); /* elements */ for(i=1;i<=NTotElems;i++) { if( (pe=RetrieveByElemNumber(HEL,i)) != NULL ) { if( !all && IsEtype(pe, E_EXTERNAL ) ) continue; fprintf(fp,"2 %d %d %d" ,pe->number ,(int) pe->type ,pe->vertex ); for(j=0;j<pe->vertex;j++) { if( j%10 == 0 && pe->vertex > 3 ) fprintf(fp,"\n"); fprintf(fp," %d",pe->index[j]); } fprintf(fp,"\n"); } } fprintf(fp,"\n"); /* lines */ for(i=1;i<=NTotLines;i++) { if( (pl=RetrieveByLineNumber(HLI,i)) != NULL ) { if( IsLtype(pl,L_EXTERNAL_REF) || IsLtype(pl,L_INTERNAL_REF) || IsLtype(pl,L_FAULT_REF) || EqualsLtype(pl,L_NONE) ) { if( IsLtype(pl,L_EXTERNAL_REF) ) { linetype = L_EXTERNAL; } else if( IsLtype(pl,L_INTERNAL_REF) ) { linetype = L_INTERNAL; } else if( IsLtype(pl,L_FAULT_REF) ) { linetype = L_FAULT; } else { linetype = 0; } fprintf(fp,"3 %d %d %d" ,pl->number ,linetype ,pl->vertex ); for(j=0;j<pl->vertex;j++) { if( j%10 == 0 ) fprintf(fp,"\n"); fprintf(fp," %d",pl->index[j]); } fprintf(fp,"\n"); } } } fprintf(fp,"\n"); /* list */ if( list ) { count = list->count; fprintf(fp,"3 1 1 %d",count+1); for(j=0;j<=count;j++) { if( j%10 == 0 ) fprintf(fp,"\n"); fprintf(fp," %d",list->index[j%count]); } fprintf(fp,"\n"); } fclose(fp); }