X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?p=CreaPhase.git;a=blobdiff_plain;f=octave_packages%2Fplot-1.1.0%2Fdxfwrite.m;fp=octave_packages%2Fplot-1.1.0%2Fdxfwrite.m;h=9868f76b6fc748b85cc28887e3b7cd54de8fa22e;hp=0000000000000000000000000000000000000000;hb=f5f7a74bd8a4900f0b797da6783be80e11a68d86;hpb=1705066eceaaea976f010f669ce8e972f3734b05 diff --git a/octave_packages/plot-1.1.0/dxfwrite.m b/octave_packages/plot-1.1.0/dxfwrite.m new file mode 100644 index 0000000..9868f76 --- /dev/null +++ b/octave_packages/plot-1.1.0/dxfwrite.m @@ -0,0 +1,164 @@ +## Copyright (C) 2004 Patrick Labbe +## Copyright (C) 2004 Laurent Mazet +## Copyright (C) 2005 Larry Doolittle +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2 of the License, or +## (at your option) any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program; If not, see . + +## -*- texinfo -*- +## @deftypefn {Function File} {@var{nb} =} dxfwrite (@var{filename}, @var{pl}, @dots{}) +## +## Write @var{filename} as a DXF file. Polyline @var{pl} must be defined as +## matrix of 1, 2 or 3 columns respectively for x, y and z coordinates. The +## number of polyline (@var{nb}) or 0 is returned. +## @end deftypefn + +function [nb] = dxfwrite (filename, varargin) + + ## Check file name + sn = split(filename, "."); + if !strcmp(tolower(deblank(sn(end,:))), "dxf") + filename = [filename, ".dxf"]; + endif + + ## Check arguments + nb = 0; + if nargin <= 1 + usage("dxfwrite = (filename, pl, ...)"); + return; + endif + + ## Open file + fid = fopen (filename, "wt"); + if fid <= 0 + error("error opening file \"%s\"\n", filename); + endif + + ## Format string + FMT = sprintf("%%.%dg", save_precision); + + ## Header declarations + fprintf (fid, ["0\nSECTION\n", "2\nHEADER\n"]); + ## DXF version + fprintf (fid, ["9\n$ACADVER\n", "1\nAC1009\n"]); ## AutoCAD R11 + ## End of headers + fprintf (fid, "0\nENDSEC\n"); + + ## Table declarations + fprintf (fid, ["0\nSECTION\n", "2\nTABLES\n"]); + + ## Line type declarations + fprintf (fid, ["0\nTABLE\n", "2\nLTYPE\n"]); + ## Number of line types + fprintf (fid, "70\n1\n"); + ## New line type + fprintf (fid, "0\nLTYPE\n"); + ## Line type name + fprintf (fid, "2\nCONTINUOUS\n"); + ## Standard flags + fprintf (fid, "70\n0\n"); ## Optimal for AutoCAD + ## Descriptive text for linetype + fprintf (fid, "3\nContinuous line\n"); + ## Alignment code + fprintf (fid, "72\n65\n"); ## the ASCII code for A + ## Number of linetype elements + fprintf (fid, "73\n0\n"); + ## Total pattern length + fprintf (fid, "40\n0\n"); + ## Pattern definition + ## ??? + ## End of line types + fprintf (fid, "0\nENDTAB\n"); + + ## Layers declarations + fprintf (fid, ["0\nTABLE\n", "2\nLAYER\n"]); + ## Number of layers + fprintf (fid, "70\n%d\n", nargin-1); + + nb = 0; + for i=1:nargin-1 + nb++; + ## New layer + fprintf (fid, "0\nLAYER\n"); + ## Layer name + fprintf (fid, "2\nCurve%d\n", nb); + ## Standard flags + fprintf (fid, "70\n0\n"); ## Optimal for AutoCAD + ## Line type + fprintf (fid, "6\nCONTINUOUS\n"); + ## Color number + fprintf (fid, "62\n%d\n", nb); + endfor + ## End of layers + fprintf (fid, "0\nENDTAB\n"); + + ## End of tables + fprintf (fid, "0\nENDSEC\n"); + + ## Entity declarations + fprintf (fid, ["0\nSECTION\n", "2\nENTITIES\n"]); + + nb = 0; + for i=1:nargin-1 + tmp_pl = varargin{1+nb++}; + + ## Check curve dimension (1, 2 or 3) + if columns(tmp_pl) <= 3 + pl = zeros(rows(tmp_pl), 3); + pl(:, 1:columns(tmp_pl)) = tmp_pl; + else + warning ("%dth entry skipped (more than 3 dimensions)", nb); + continue; + endif + + ## Check if the curve is closed + closed = false; + if pl(1, :) == pl(rows(pl), :) + closed = true; + pl = pl([1:rows(pl)-1], :); + endif + + ## New polyline + fprintf (fid, "0\nPOLYLINE\n"); + + ## Layer name + fprintf (fid, "8\nCurve%d\n", nb); + ## Line type name + fprintf (fid, "6\nCONTINUOUS\n"); + ## Color number??? + fprintf (fid, "66\n%d\n", nb); + ## Standard flags + fprintf (fid, "70\n%d\n", closed); + + ## Layer specification + layspec = sprintf("8\nCurve%d\n", nb); + + ## List of vertex + fprintf(fid, ["0\nVERTEX\n", layspec, \ + "10\n",FMT,"\n", "20\n",FMT,"\n", "30\n",FMT,"\n"], pl.'); + + ## End of polyline + fprintf(fid, "0\nSEQEND\n"); + + endfor + + ## End of entities + fprintf(fid, "0\nENDSEC\n"); + + ## End of file + fprintf(fid, "0\nEOF\n"); + + ## Close file + fclose(fid); + +endfunction