~ubuntu-branches/ubuntu/wily/spatialite/wily-proposed

« back to all changes in this revision

Viewing changes to src/dxf/dxf_parser.c

  • Committer: Package Import Robot
  • Author(s): Bas Couwenberg
  • Date: 2015-07-14 11:57:46 UTC
  • mfrom: (16.1.1 sid)
  • Revision ID: package-import@ubuntu.com-20150714115746-e2iljfmb5sq7o5hh
Tags: 4.3.0-1
Move from experimental to unstable.

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
 
3
3
 dxf_parser.c -- implements DXF support [parsing]
4
4
 
5
 
 version 4.1, 2013 May 14
 
5
 version 4.3, 2015 June 29
6
6
 
7
7
 Author: Sandro Furieri a.furieri@lqt.it
8
8
 
24
24
 
25
25
The Initial Developer of the Original Code is Alessandro Furieri
26
26
 
27
 
Portions created by the Initial Developer are Copyright (C) 2008-2013
 
27
Portions created by the Initial Developer are Copyright (C) 2008-2015
28
28
the Initial Developer. All Rights Reserved.
29
29
 
30
30
Contributor(s): 
43
43
 
44
44
*/
45
45
 
 
46
/*
 
47
 
 
48
CREDITS:
 
49
 
 
50
inital development of the DXF module has been funded by:
 
51
Regione Toscana - Settore Sistema Informativo Territoriale ed Ambientale
 
52
 
 
53
*/
 
54
 
46
55
#include <stdlib.h>
47
56
#include <stdio.h>
48
57
#include <string.h>
61
70
#include <spatialite/gg_dxf.h>
62
71
#include <spatialite.h>
63
72
 
 
73
#include "dxf_private.h"
 
74
 
 
75
#ifndef OMIT_GEOS               /* only if GEOS is enabled */
 
76
 
64
77
typedef struct dxf_segment
65
78
{
66
79
/* a DXF segment */
90
103
} dxfRingsCollection;
91
104
typedef dxfRingsCollection *dxfRingsCollectionPtr;
92
105
 
93
 
 
94
 
 
95
106
static gaiaDxfHatchSegmPtr
96
107
alloc_dxf_hatch_segm (double x0, double y0, double x1, double y1)
97
108
{
336
347
}
337
348
 
338
349
static void
339
 
create_dxf_hatch_lines (gaiaDxfHatchPtr hatch, int srid)
 
350
create_dxf_hatch_lines (const void *p_cache, gaiaDxfHatchPtr hatch, int srid)
340
351
{
341
352
/* creating Pattern Hatch lines */
342
353
    gaiaDxfBoundaryPathPtr path;
386
397
          path = path->next;
387
398
      }
388
399
/* attempting to reassemble the Boundary */
389
 
 
390
 
    result = gaiaPolygonize (geom, 0);
 
400
    if (p_cache != NULL)
 
401
        result = gaiaPolygonize_r (p_cache, geom, 0);
 
402
    else
 
403
        result = gaiaPolygonize (geom, 0);
391
404
    gaiaFreeGeomColl (geom);
392
405
    if (result == NULL)
393
406
        return;
416
429
        apply_hatch (result, geom, angle, hatch->spacing, hatch->base_x,
417
430
                     hatch->base_y);
418
431
    gaiaMbrGeometry (geom);
419
 
    clipped = gaiaGeometryIntersection (geom, result);
 
432
    if (p_cache != NULL)
 
433
        clipped = gaiaGeometryIntersection_r (p_cache, geom, result);
 
434
    else
 
435
        clipped = gaiaGeometryIntersection (geom, result);
420
436
    gaiaFreeGeomColl (geom);
421
437
    if (clipped == NULL)
422
438
        return;
481
497
    free (hole);
482
498
}
483
499
 
 
500
static int
 
501
force_closure (gaiaDxfPolylinePtr line)
 
502
{
 
503
/* checking (and eventually forcing) first/last vertex coherency */
 
504
    if (check_unclosed_polyg (line, 1))
 
505
      {
 
506
          /* not properly closed: forcing the last vertex */
 
507
          double *ptr_x;
 
508
          double *ptr_y;
 
509
          double *ptr_z;
 
510
          ptr_x = realloc (line->x, sizeof (double) * (line->points + 1));
 
511
          ptr_y = realloc (line->y, sizeof (double) * (line->points + 1));
 
512
          ptr_z = realloc (line->z, sizeof (double) * (line->points + 1));
 
513
          if (ptr_x == NULL || ptr_y == NULL || ptr_z == NULL)
 
514
            {
 
515
                /* some unexpected error happened - giving up */
 
516
                if (ptr_x == NULL)
 
517
                    free (ptr_x);
 
518
                if (ptr_y == NULL)
 
519
                    free (ptr_y);
 
520
                if (ptr_z == NULL)
 
521
                    free (ptr_z);
 
522
                return 0;
 
523
            }
 
524
          line->x = ptr_x;
 
525
          line->y = ptr_y;
 
526
          line->z = ptr_z;
 
527
          *(line->x + line->points) = *(line->x + 0);
 
528
          *(line->y + line->points) = *(line->y + 0);
 
529
          *(line->z + line->points) = *(line->z + 0);
 
530
          line->points += 1;
 
531
      }
 
532
    return 1;
 
533
}
 
534
 
484
535
static void
485
 
linked_rings (gaiaDxfPolylinePtr line)
 
536
linked_rings (const void *p_cache, gaiaDxfPolylinePtr line)
486
537
{
487
538
/* attempt to identify linked Polygon rings */
488
539
    int i;
506
557
        return;
507
558
    if (line->points <= 0)
508
559
        return;
 
560
    if (line->is_closed == 0)
 
561
        return;
 
562
 
 
563
    if (!force_closure (line))
 
564
        return;
509
565
 
510
566
    coll = malloc (sizeof (dxfLinkedSegments));
511
567
    coll->count = line->points - 1;
581
637
    free (coll);
582
638
 
583
639
/* attempting to reassemble a polygon */
584
 
    result = gaiaPolygonize (geom, 0);
 
640
    if (p_cache != NULL)
 
641
        result = gaiaPolygonize_r (p_cache, geom, 0);
 
642
    else
 
643
        result = gaiaPolygonize (geom, 0);
585
644
    gaiaFreeGeomColl (geom);
586
645
    if (result == NULL)
587
646
        return;
1246
1305
}
1247
1306
 
1248
1307
static void
1249
 
unlinked_rings (gaiaDxfPolylinePtr line)
 
1308
unlinked_rings (const void *p_cache, gaiaDxfPolylinePtr line)
1250
1309
{
1251
1310
/* attempt to identify unlinked Polygon rings */
1252
1311
    int invalid;
1271
1330
        return;
1272
1331
    if (line->points <= 0)
1273
1332
        return;
 
1333
    if (line->is_closed == 0)
 
1334
        return;
 
1335
 
 
1336
    if (!force_closure (line))
 
1337
        return;
1274
1338
 
1275
1339
    coll = alloc_dxf_rings ();
1276
1340
    start = 0;
1331
1395
    destroy_dxf_rings (coll);
1332
1396
 
1333
1397
/* attempting to reassemble a polygon */
1334
 
    result = gaiaPolygonize (geom, 0);
 
1398
    if (p_cache != NULL)
 
1399
        result = gaiaPolygonize_r (p_cache, geom, 0);
 
1400
    else
 
1401
        result = gaiaPolygonize (geom, 0);
1335
1402
    gaiaFreeGeomColl (geom);
1336
1403
    if (result == NULL)
1337
1404
        return;
1390
1457
}
1391
1458
 
1392
1459
static void
1393
 
insert_dxf_polyline (gaiaDxfParserPtr dxf, const char *layer_name,
1394
 
                     gaiaDxfPolylinePtr ln)
 
1460
insert_dxf_polyline (const void *p_cache, gaiaDxfParserPtr dxf,
 
1461
                     const char *layer_name, gaiaDxfPolylinePtr ln)
1395
1462
{
1396
1463
/* inserting a POLYLINE object into the appropriate Layer */
1397
1464
    gaiaDxfLayerPtr lyr = dxf->first_layer;
1401
1468
            {
1402
1469
                /* found the matching Layer */
1403
1470
                if (dxf->linked_rings)
1404
 
                    linked_rings (ln);
 
1471
                    linked_rings (p_cache, ln);
1405
1472
                if (dxf->unlinked_rings)
1406
 
                    unlinked_rings (ln);
 
1473
                    unlinked_rings (p_cache, ln);
1407
1474
                if (ln->is_closed)
1408
1475
                  {
1409
1476
                      /* it's a Ring */
1454
1521
}
1455
1522
 
1456
1523
static void
1457
 
insert_dxf_block_polyline (gaiaDxfParserPtr dxf, gaiaDxfPolylinePtr ln)
 
1524
insert_dxf_block_polyline (const void *p_cache, gaiaDxfParserPtr dxf,
 
1525
                           gaiaDxfPolylinePtr ln)
1458
1526
{
1459
1527
/* inserting a POLYLINE object into the current Block */
1460
1528
    if (dxf->linked_rings)
1461
 
        linked_rings (ln);
 
1529
        linked_rings (p_cache, ln);
1462
1530
    if (dxf->unlinked_rings)
1463
 
        unlinked_rings (ln);
 
1531
        unlinked_rings (p_cache, ln);
1464
1532
    if (ln->is_closed)
1465
1533
      {
1466
1534
          /* it's a Ring */
1860
1928
}
1861
1929
 
1862
1930
static void
1863
 
save_current_polyline (gaiaDxfParserPtr dxf)
 
1931
save_current_polyline (const void *p_cache, gaiaDxfParserPtr dxf)
1864
1932
{
1865
1933
/* saving the current Polyline */
1866
1934
    int points = 0;
1889
1957
          pt = pt->next;
1890
1958
      }
1891
1959
    if (dxf->is_block)
1892
 
        insert_dxf_block_polyline (dxf, ln);
 
1960
        insert_dxf_block_polyline (p_cache, dxf, ln);
1893
1961
    else
1894
1962
      {
1895
1963
          force_missing_layer (dxf);
1896
 
          insert_dxf_polyline (dxf, dxf->curr_layer_name, ln);
 
1964
          insert_dxf_polyline (p_cache, dxf, dxf->curr_layer_name, ln);
1897
1965
      }
1898
1966
    /* resetting the current polyline */
1899
1967
  clear:
1913
1981
}
1914
1982
 
1915
1983
static void
1916
 
reset_dxf_polyline (gaiaDxfParserPtr dxf)
 
1984
reset_dxf_polyline (const void *p_cache, gaiaDxfParserPtr dxf)
1917
1985
{
1918
1986
/* resetting the current DXF polyline */
1919
1987
    if (dxf->is_polyline)
1920
1988
      {
1921
1989
          if (dxf->first_pt != NULL)
1922
 
              save_current_polyline (dxf);
 
1990
              save_current_polyline (p_cache, dxf);
1923
1991
          dxf->is_polyline = 0;
1924
1992
      }
1925
1993
}
2016
2084
}
2017
2085
 
2018
2086
static void
2019
 
save_current_circle (gaiaDxfParserPtr dxf)
 
2087
save_current_circle (const void *p_cache, gaiaDxfParserPtr dxf)
2020
2088
{
2021
2089
/* saving the current Circle */
2022
2090
    int iv;
2045
2113
          *(ln->z + iv) = dxf->curr_circle.cz;
2046
2114
      }
2047
2115
    if (dxf->is_block)
2048
 
        insert_dxf_block_polyline (dxf, ln);
 
2116
        insert_dxf_block_polyline (p_cache, dxf, ln);
2049
2117
    else
2050
2118
      {
2051
2119
          force_missing_layer (dxf);
2052
 
          insert_dxf_polyline (dxf, dxf->curr_layer_name, ln);
 
2120
          insert_dxf_polyline (p_cache, dxf, dxf->curr_layer_name, ln);
2053
2121
      }
2054
2122
  stop:
2055
2123
    /* resetting curr_layer */
2061
2129
}
2062
2130
 
2063
2131
static void
2064
 
save_current_arc (gaiaDxfParserPtr dxf)
 
2132
save_current_arc (const void *p_cache, gaiaDxfParserPtr dxf)
2065
2133
{
2066
2134
/* saving the current Arc */
2067
2135
    int iv;
2090
2158
          *(ln->z + iv) = dxf->curr_arc.cz;
2091
2159
      }
2092
2160
    if (dxf->is_block)
2093
 
        insert_dxf_block_polyline (dxf, ln);
 
2161
        insert_dxf_block_polyline (p_cache, dxf, ln);
2094
2162
    else
2095
2163
      {
2096
2164
          force_missing_layer (dxf);
2097
 
          insert_dxf_polyline (dxf, dxf->curr_layer_name, ln);
 
2165
          insert_dxf_polyline (p_cache, dxf, dxf->curr_layer_name, ln);
2098
2166
      }
2099
2167
  stop:
2100
2168
    /* resetting curr_layer */
2106
2174
}
2107
2175
 
2108
2176
static void
2109
 
reset_dxf_entity (gaiaDxfParserPtr dxf)
 
2177
reset_dxf_entity (const void *p_cache, gaiaDxfParserPtr dxf)
2110
2178
{
2111
2179
/* resetting the current DXF entity */
2112
2180
    gaiaDxfExtraAttrPtr ext;
2218
2286
                              dxf->curr_end_point.x, dxf->curr_end_point.y,
2219
2287
                              dxf->curr_end_point.z);
2220
2288
          if (dxf->is_block)
2221
 
              insert_dxf_block_polyline (dxf, ln);
 
2289
              insert_dxf_block_polyline (p_cache, dxf, ln);
2222
2290
          else
2223
2291
            {
2224
2292
                force_missing_layer (dxf);
2225
 
                insert_dxf_polyline (dxf, dxf->curr_layer_name, ln);
 
2293
                insert_dxf_polyline (p_cache, dxf, dxf->curr_layer_name, ln);
2226
2294
            }
2227
2295
          /* resetting curr_line */
2228
2296
          dxf->curr_point.x = 0.0;
2244
2312
            {
2245
2313
                if (is_valid_dxf_hatch (dxf->curr_hatch))
2246
2314
                  {
2247
 
                      create_dxf_hatch_lines (dxf->curr_hatch, dxf->srid);
 
2315
                      create_dxf_hatch_lines (p_cache, dxf->curr_hatch,
 
2316
                                              dxf->srid);
2248
2317
                      if (dxf->is_block)
2249
2318
                          insert_dxf_block_hatch (dxf, dxf->curr_hatch);
2250
2319
                      else
2316
2385
    if (dxf->is_lwpolyline)
2317
2386
      {
2318
2387
          /* saving the current Polyline */
2319
 
          save_current_polyline (dxf);
 
2388
          save_current_polyline (p_cache, dxf);
2320
2389
          dxf->is_lwpolyline = 0;
2321
2390
      }
2322
2391
    if (dxf->is_circle)
2323
2392
      {
2324
2393
          /* saving the current Circle */
2325
 
          save_current_circle (dxf);
 
2394
          save_current_circle (p_cache, dxf);
2326
2395
          /* resetting curr_circle */
2327
2396
          dxf->curr_circle.cx = 0.0;
2328
2397
          dxf->curr_circle.cy = 0.0;
2337
2406
    if (dxf->is_arc)
2338
2407
      {
2339
2408
          /* saving the current Arc */
2340
 
          save_current_arc (dxf);
 
2409
          save_current_arc (p_cache, dxf);
2341
2410
          /* resetting curr_arc */
2342
2411
          dxf->curr_arc.cx = 0.0;
2343
2412
          dxf->curr_arc.cy = 0.0;
2352
2421
          dxf->curr_layer_name = NULL;
2353
2422
      }
2354
2423
    if (dxf->extra_key != NULL)
2355
 
        free (dxf->extra_key);
 
2424
      {
 
2425
          free (dxf->extra_key);
 
2426
          dxf->extra_key = NULL;
 
2427
      }
2356
2428
    if (dxf->extra_value != NULL)
2357
 
        free (dxf->extra_value);
 
2429
      {
 
2430
          free (dxf->extra_value);
 
2431
          dxf->extra_value = NULL;
 
2432
      }
2358
2433
    ext = dxf->first_ext;
2359
2434
    while (ext != NULL)
2360
2435
      {
2604
2679
}
2605
2680
 
2606
2681
static int
2607
 
parse_dxf_line (gaiaDxfParserPtr dxf, const char *line)
 
2682
parse_dxf_line (const void *p_cache, gaiaDxfParserPtr dxf, const char *line)
2608
2683
{
2609
2684
/* parsing a DXF line */
2610
2685
    dxf->line_no += 1;
2624
2699
                  }
2625
2700
                dxf->op_code = atoi (line);
2626
2701
                if (dxf->op_code == 0)
2627
 
                    reset_dxf_entity (dxf);
 
2702
                    reset_dxf_entity (p_cache, dxf);
2628
2703
                dxf->op_code_line = 0;
2629
2704
                return 1;
2630
2705
            }
2640
2715
    if (strcmp (line, "SECTION") == 0)
2641
2716
      {
2642
2717
          /* start SECTION tag */
2643
 
          reset_dxf_polyline (dxf);
 
2718
          reset_dxf_polyline (p_cache, dxf);
2644
2719
          if (dxf->section)
2645
2720
            {
2646
2721
                spatialite_e ("ERROR on line %d: unexpected SECTION\n",
2654
2729
    if (strcmp (line, "ENDSEC") == 0)
2655
2730
      {
2656
2731
          /* end SECTION tag */
2657
 
          reset_dxf_polyline (dxf);
 
2732
          reset_dxf_polyline (p_cache, dxf);
2658
2733
          if (!dxf->section)
2659
2734
            {
2660
2735
                spatialite_e ("ERROR on line %d: unexpected ENDSEC\n",
2672
2747
    if (strcmp (line, "TABLES") == 0)
2673
2748
      {
2674
2749
          /* start TABLES tag */
2675
 
          reset_dxf_polyline (dxf);
 
2750
          reset_dxf_polyline (p_cache, dxf);
2676
2751
          if (dxf->section)
2677
2752
            {
2678
2753
                dxf->tables = 1;
2683
2758
    if (strcmp (line, "BLOCKS") == 0)
2684
2759
      {
2685
2760
          /* start BLOCKS tag */
2686
 
          reset_dxf_polyline (dxf);
 
2761
          reset_dxf_polyline (p_cache, dxf);
2687
2762
          if (dxf->section)
2688
2763
            {
2689
2764
                dxf->blocks = 1;
2694
2769
    if (strcmp (line, "BLOCK") == 0)
2695
2770
      {
2696
2771
          /* start BLOCK tag */
2697
 
          reset_dxf_polyline (dxf);
 
2772
          reset_dxf_polyline (p_cache, dxf);
2698
2773
          if (dxf->blocks)
2699
2774
            {
2700
2775
                dxf->is_block = 1;
2705
2780
    if (strcmp (line, "ENDBLK") == 0)
2706
2781
      {
2707
2782
          /* end BLOCK tag */
2708
 
          reset_dxf_polyline (dxf);
 
2783
          reset_dxf_polyline (p_cache, dxf);
2709
2784
          if (dxf->is_block)
2710
2785
            {
2711
2786
                insert_dxf_block (dxf);
2717
2792
    if (strcmp (line, "ENTITIES") == 0)
2718
2793
      {
2719
2794
          /* start ENTITIES tag */
2720
 
          reset_dxf_polyline (dxf);
 
2795
          reset_dxf_polyline (p_cache, dxf);
2721
2796
          if (dxf->section)
2722
2797
            {
2723
2798
                dxf->entities = 1;
2728
2803
    if (strcmp (line, "LAYER") == 0)
2729
2804
      {
2730
2805
          /* start LAYER tag */
2731
 
          reset_dxf_polyline (dxf);
 
2806
          reset_dxf_polyline (p_cache, dxf);
2732
2807
          if (dxf->tables && dxf->op_code == 0)
2733
2808
            {
2734
2809
                dxf->is_layer = 1;
2738
2813
    if (strcmp (line, "INSERT") == 0)
2739
2814
      {
2740
2815
          /* start INSERT tag */
2741
 
          reset_dxf_polyline (dxf);
 
2816
          reset_dxf_polyline (p_cache, dxf);
2742
2817
          if (dxf->entities && dxf->op_code == 0)
2743
2818
            {
2744
2819
                dxf->is_insert = 1;
2748
2823
    if (strcmp (line, "INSERT") == 0)
2749
2824
      {
2750
2825
          /* start INSERT tag */
2751
 
          reset_dxf_polyline (dxf);
 
2826
          reset_dxf_polyline (p_cache, dxf);
2752
2827
          if (dxf->entities && dxf->op_code == 0)
2753
2828
            {
2754
2829
                dxf->is_insert = 1;
2758
2833
    if (strcmp (line, "TEXT") == 0)
2759
2834
      {
2760
2835
          /* start TEXT tag */
2761
 
          reset_dxf_polyline (dxf);
 
2836
          reset_dxf_polyline (p_cache, dxf);
2762
2837
          if (dxf->entities && dxf->op_code == 0)
2763
2838
            {
2764
2839
                dxf->is_text = 1;
2773
2848
    if (strcmp (line, "POINT") == 0)
2774
2849
      {
2775
2850
          /* start POINT tag */
2776
 
          reset_dxf_polyline (dxf);
 
2851
          reset_dxf_polyline (p_cache, dxf);
2777
2852
          if (dxf->entities && dxf->op_code == 0)
2778
2853
            {
2779
2854
                dxf->is_point = 1;
2788
2863
    if (strcmp (line, "POLYLINE") == 0)
2789
2864
      {
2790
2865
          /* start POLYLINE tag */
2791
 
          reset_dxf_polyline (dxf);
 
2866
          reset_dxf_polyline (p_cache, dxf);
2792
2867
          if (dxf->entities && dxf->op_code == 0)
2793
2868
            {
2794
2869
                dxf->is_polyline = 1;
2803
2878
    if (strcmp (line, "LWPOLYLINE") == 0)
2804
2879
      {
2805
2880
          /* start LWPOLYLINE tag */
2806
 
          reset_dxf_polyline (dxf);
 
2881
          reset_dxf_polyline (p_cache, dxf);
2807
2882
          if (dxf->entities && dxf->op_code == 0)
2808
2883
            {
2809
2884
                dxf->is_lwpolyline = 1;
2818
2893
    if (strcmp (line, "LINE") == 0)
2819
2894
      {
2820
2895
          /* start LINE tag */
2821
 
          reset_dxf_polyline (dxf);
 
2896
          reset_dxf_polyline (p_cache, dxf);
2822
2897
          if (dxf->entities && dxf->op_code == 0)
2823
2898
            {
2824
2899
                dxf->is_line = 1;
2833
2908
    if (strcmp (line, "CIRCLE") == 0)
2834
2909
      {
2835
2910
          /* start CIRCLE tag */
2836
 
          reset_dxf_polyline (dxf);
 
2911
          reset_dxf_polyline (p_cache, dxf);
2837
2912
          if (dxf->entities && dxf->op_code == 0)
2838
2913
            {
2839
2914
                dxf->is_circle = 1;
2848
2923
    if (strcmp (line, "ARC") == 0)
2849
2924
      {
2850
2925
          /* start ARC tag */
2851
 
          reset_dxf_polyline (dxf);
 
2926
          reset_dxf_polyline (p_cache, dxf);
2852
2927
          if (dxf->entities && dxf->op_code == 0)
2853
2928
            {
2854
2929
                dxf->is_arc = 1;
2886
2961
    if (strcmp (line, "EOF") == 0)
2887
2962
      {
2888
2963
          /* end of file marker tag */
2889
 
          reset_dxf_polyline (dxf);
 
2964
          reset_dxf_polyline (p_cache, dxf);
2890
2965
          dxf->eof = 1;
2891
2966
          return 1;
2892
2967
      }
3419
3494
      }
3420
3495
}
3421
3496
 
3422
 
GAIAGEO_DECLARE int
3423
 
gaiaParseDxfFile (gaiaDxfParserPtr dxf, const char *path)
 
3497
static int
 
3498
gaiaParseDxfFileCommon (const void *p_cache, gaiaDxfParserPtr dxf,
 
3499
                        const char *path)
3424
3500
{
3425
3501
/* parsing the whole DXF file */
3426
3502
    int c;
3451
3527
            {
3452
3528
                /* end line found */
3453
3529
                *p = '\0';
3454
 
                if (!parse_dxf_line (dxf, line))
 
3530
                if (!parse_dxf_line (p_cache, dxf, line))
3455
3531
                    goto stop;
3456
3532
                if (dxf->eof)
3457
3533
                  {
3474
3550
    fclose (fl);
3475
3551
    return 0;
3476
3552
}
 
3553
 
 
3554
GAIAGEO_DECLARE int
 
3555
gaiaParseDxfFile (gaiaDxfParserPtr dxf, const char *path)
 
3556
{
 
3557
    return gaiaParseDxfFileCommon (NULL, dxf, path);
 
3558
}
 
3559
 
 
3560
GAIAGEO_DECLARE int
 
3561
gaiaParseDxfFile_r (const void *p_cache, gaiaDxfParserPtr dxf, const char *path)
 
3562
{
 
3563
    return gaiaParseDxfFileCommon (p_cache, dxf, path);
 
3564
}
 
3565
 
 
3566
#endif /* GEOS enabled */