% Genera file dati per 'emesh' da una descrizione della geometria
% per soli nodi, operando in memoria (25 aprile 1999)
%
% Versione 25 aprile 1999 - M. Politi
% - aumentata precisione file .poly (30 aprile 1999)
% - modificato nome 'fun_mk_em_file' -> 'make_em_file' (3 dic. 1999)
% - corretta gestione marker lato (27 giu. 2006)
%

function Make_em_file(nomef, dati)

%
% costruisci matrici NN e SS
%

len = size(dati, 1);
Nn = 0;
Ns = 0;
NN = [];
SS = [];
table = zeros(1, max(dati(:,1)));
for i = 1 : len
	ni = dati(i,1);
	xi = dati(i,2);
	yi = dati(i,3);
	dl = dati(i,4);
	mni = dati(i,5);
	msi = dati(i,6);
	teta = dati(i,7);
	ns = dati(i,8);
	
	if ni > 0 & dl > 0 & msi < 0			% primo nodo
		if Nn == 0 | table(ni) == 0
			Nn = Nn + 1;
			NN = [NN; Nn xi yi dl mni];
			table(ni) = Nn;
		end
		nii = table(ni);
		xii = xi;
		yii = yi;
	elseif ni > 0 & dl > 0 & msi >=0		% nodo intermedio
		if abs(teta) == 90

%	determina coordinate (x0, y0) del centro

			dx = xi - xii;
			dy = yi - yii;
			alfa = -teta * pi /180;
			xm = (xi + xii) / 2;
			ym = (yi + yii) / 2;
			vet = [	cos(alfa) sin(alfa); ...
				-sin(alfa) cos(alfa)] * [dx; dy] / 2;
			x0 = xm + vet(1);
			y0 = ym + vet(2);

%	determina coordinate poligonale

			dx = xii - x0;
			dy = yii - y0;
			dt = alfa / ns;
			for j = 1 : ns
				alfaj = j * dt;
				vet = [	cos(alfaj) sin(alfaj); ...
					-sin(alfaj) cos(alfaj)] * [dx; dy];
				xj = x0 + vet(1);
				yj = y0 + vet(2);
				Nn = Nn + 1;
				NN = [NN; Nn xj yj dl msi];
				Ns = Ns + 1;
				SS = [SS; Ns nii Nn msi];
				nii = Nn;
			end
		else
			Nn = Nn + 1;
			NN = [NN; Nn xi yi dl mni];
			Ns = Ns + 1;
			SS = [SS; Ns nii Nn msi];
		end
		table(ni) = Nn;
		nii = table(ni);
		xii = xi;
		yii = yi;
	elseif ni > 0 & dl <= 0				% nodo ausiliario
		Nn = Nn + 1;
		NN = [NN; Nn xi yi dl mni];
	elseif ni < 0					    % ultimo nodo
		if abs(teta) == 90

%	determina coordinate (x0, y0)

			dx = xi - xii;
			dy = yi - yii;
			alfa = -teta * pi /180;
			xm = (xi + xii) / 2;
			ym = (yi + yii) / 2;
			vet = [	cos(alfa) sin(alfa); ...
				-sin(alfa) cos(alfa)] * [dx; dy] / 2;
			x0 = xm + vet(1);
			y0 = ym + vet(2);

%	determina coordinate poligonale

			dx = xii - x0;
			dy = yii - y0;
			dt = alfa / ns;
			for j = 1 : ns-1
				alfaj = j * dt;
				vet = [	cos(alfaj) sin(alfaj); ...
					-sin(alfaj) cos(alfaj)] * [dx; dy];
				xj = x0 + vet(1);
				yj = y0 + vet(2);
				Nn = Nn + 1;
				NN = [NN; Nn xj yj dl msi];
				Ns = Ns + 1;
				SS = [SS; Ns nii Nn msi];
				nii = Nn;
			end
			Ns = Ns + 1;
			SS = [SS; Ns nii table(-ni) msi];
		else
			Ns = Ns + 1;
			SS = [SS; Ns nii table(-ni) msi];
			nii = Nn;
		end
	else
		disp('*** Make_em_file: errore dati ! ***')
	end
end

%
% scrivi file 'nomef.d'
%

fidd = fopen([nomef '.d'], 'w');
fprintf(fidd, '%4i\n', Nn);
NNx = NN;
NNx(:,1) = NNx(:,1) - 1;
for i = 1 : Nn
	fprintf(fidd, '%4i: %20.16f %20.16f %12.6f %4i\n', NNx(i,:));
end
SSx = SS;
SSx(:,1:3) = SSx(:,1:3) - 1;
fprintf(fidd, '%4i\n', Ns);
for i = 1 : Ns
	fprintf(fidd, '%4i: %4i %4i %4i\n', SSx(i,:));
end
fclose(fidd);
