image thumbnail
from IGES Toolbox by Per Bergström
Extracts the parameter data in an IGES file to Matlab.

icpSrfLinRep.m
function [MODEL,DIRVEC,MINDIRsq,MNORMAL]=icpSrfLinRep(model,nrmlmodel,srfind,srfs,nrmls,srfb,nrmlb,dir1model,dir2model,ldirmodel,dir1s,dir2s,ldirs,dir1b,dir2b,ldirb)
% icpSrfLinRep returns a gathered surface representation and removes duplicate points. 
% It uses the output from projpartIGES, srfRepInProjection, and linAppSrfIGES
%
% Usage:
%
% [MODEL,DIRVEC,MINDIR,MNORMAL]=...
%    icpSrfLinRep(model,nrmlmodel,srfind,srfs,nrmls,srfb,nrmlb,dir1model,dir2model,ldirmodel,dir1s,dir2s,ldirs,dir1b,dir2b,ldirb)
%
%
% m-file can be downloaded at
% http://www.mathworks.com/matlabcentral/fileexchange/13253-iges-toolbox
%
% written by Per Bergstrm 2012-03-13
%


modelBOOLind=srfind>0;

MODEL=[model(:,modelBOOLind),srfs,srfb];

DIRVEC=[ldirmodel(1,modelBOOLind),ldirs(1,:),ldirb(1,:);...
    dir1model(:,modelBOOLind),dir1s,dir1b;...
    ldirmodel(2,modelBOOLind),ldirs(2,:),ldirb(2,:);...
    dir2model(:,modelBOOLind),dir2s,dir2b];

MINDIRsq=[min(ldirmodel(:,modelBOOLind),[],1),min(ldirs,[],1),min(ldirb,[],1)].^2;

MNORMAL=[nrmlmodel(:,modelBOOLind),nrmls,nrmlb];

clear modelBOOLind model nrmlmodel srfind srfs nrmls srfb nrmlb dir1model dir2model ldirmodel dir1s dir2s ldirs dir1b dir2b ldirb

% Remove duplicate points

leMod=size(MODEL,2);

delvec1=false(1,leMod);
delvec2=false(1,leMod);
delvec3=false(1,leMod);

[soM1,indM1]=sort(MODEL(1,:));
[soM2,indM2]=sort(MODEL(2,:));
[soM3,indM3]=sort(MODEL(3,:));

for i=2:leMod
    
    if abs(soM1(i-1)-soM1(i))<1e-8
        delvec1(indM1(i-1))=true;
        delvec1(indM1(i))=true;
    end
    
    if abs(soM2(i-1)-soM2(i))<1e-8
        delvec2(indM2(i-1))=true;
        delvec2(indM2(i))=true;
    end
    
    if abs(soM3(i-1)-soM3(i))<1e-8
        delvec3(indM3(i-1))=true;
        delvec3(indM3(i))=true;
    end
    
end

delvec=and(and(delvec1,delvec2),delvec3);

clear delvec1 soM1 indM1 delvec2 soM2 indM2 delvec3 soM3 indM3

if any(delvec)

    distvec=(MODEL(1,delvec)-100*rand).^2+(MODEL(2,delvec)-100*rand).^2+(MODEL(3,delvec)-100*rand).^2+(MODEL(1,delvec)-100*rand).^2+(MODEL(2,delvec)-100*rand).^2+(MODEL(3,delvec)-100*rand).^2+(MODEL(1,delvec)-100*rand).^2+(MODEL(2,delvec)-100*rand).^2+(MODEL(3,delvec)-100*rand).^2+(MODEL(1,delvec)-100*rand).^2+(MODEL(2,delvec)-100*rand).^2+(MODEL(3,delvec)-100*rand).^2;
    
    [so,in]=sort(distvec);
    delind=find(delvec);
    oldval=-1;
    for i=1:length(delind)
        if so(i)-oldval>1e-8
            delvec(delind(in(i)))=false;
            oldval=so(i);
        end
    end
    
end

MODEL=MODEL(:,not(delvec));
DIRVEC=DIRVEC(:,not(delvec));
MINDIRsq=MINDIRsq(:,not(delvec));
MNORMAL=MNORMAL(:,not(delvec));

Contact us