コード例 #1
0
ファイル: gridps.c プロジェクト: alesarrett/SHYFEM
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();
}
コード例 #2
0
ファイル: meshfi.c プロジェクト: marcobj/shyfem
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);
}