Changeset 25619


Ignore:
Timestamp:
10/01/20 12:57:00 (4 years ago)
Author:
dlcheng
Message:

CHG: bamg.m discontinous track/domain intersection support.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/m/mesh/bamg.m

    r25455 r25619  
    364364        %Deal with tracks
    365365        if exist(options,'tracks'),
    366 
    367366                %read tracks
    368                 track=getfieldvalue(options,'tracks');
    369                 if all(ischar(track)),
    370                         A=expread(track);
    371                         track=[];
    372                         for i=1:length(A),
    373                                 track=[track; [A(i).x A(i).y]];
    374                         end
    375                 else
    376                         track=double(track); %for some reason, it is of class "single"
    377                 end
     367                intrack=getfieldvalue(options,'tracks');
     368                if all(ischar(intrack)),
     369                        intrack=expread(intrack);
     370        else
     371            intrack=double(intrack); %for some reason, it is of class "single"
     372            intrack=struct('x',intrack(:,1),'y',intrack(:,2));
     373            intrack=repmat(intrack, [1,1]);
     374        end
     375       
     376        %Process multiple tracks and handle domain intersections
     377        track=[];
     378        edges=[];
     379        newcount=count;
     380        for i=1:length(intrack),
     381            nods=size(intrack(i).x,1);
     382            newtrack=[intrack(i).x intrack(i).y];
     383            newedges=[transpose(newcount+1:newcount+nods-1) transpose(newcount+2:newcount+nods) 3.*ones(nods-1,1)];
     384
     385            %only keep those inside
     386            flags=ContourToNodes(newtrack(:,1),newtrack(:,2),domainfile,0);
     387            edgeflags = flags(1:end-1) & flags(2:end);
     388
     389            %calculate edge offset, accounting for broken tracks
     390            offsets=zeros(size(edgeflags,1)+1,3);
     391            for j=2:size(offsets,1),
     392                if edgeflags(j-1)==0,
     393                    offsets(j,:)=offsets(j-1,:)+[1 1 0];
     394                else
     395                    offsets(j,:)=offsets(j-1,:);
     396                end
     397            end
     398            newedges=newedges-offsets(2:end,:);
     399
     400            %add track segments
     401            newtrack=newtrack(find(flags),:);
     402            newedges=newedges(find(edgeflags),:);
     403            nods=size(newtrack,1);
     404            track=[track; newtrack];
     405            edges=[edges; newedges];
     406            newcount=newcount+nods;
     407        end
    378408                if(size(track,2)==2), track=[track 3.*ones(size(track,1),1)]; end
    379 
    380                 %only keep those inside
    381                 flags=ContourToNodes(track(:,1),track(:,2),domainfile,0);
    382                 track=track(find(flags),:);
    383 
     409       
    384410                %Add all points to bamg_geometry
    385411                nods=size(track,1);
    386412                bamg_geometry.Vertices=[bamg_geometry.Vertices; track];
    387                 bamg_geometry.Edges=[bamg_geometry.Edges; [transpose(count+1:count+nods-1) transpose(count+2:count+nods)  3.*ones(nods-1,1)]];
     413                bamg_geometry.Edges=[bamg_geometry.Edges; edges];
    388414
    389415                %update counter
Note: See TracChangeset for help on using the changeset viewer.