libDXF 0.0.1
A library with DXF related functions written in C.

Todo List

Global dxf_3dface_write (DxfFile *fp, Dxf3dface *face)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_3dline_write (DxfFile *fp, Dxf3dline *line)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_3dsolid_write (DxfFile *fp, Dxf3dsolid *solid)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_acad_proxy_entity_write (DxfFile *fp, DxfAcadProxyEntity *acad_proxy_entity)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_appid_write (DxfFile *fp, DxfAppid *appid)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_arc_write (DxfFile *fp, DxfArc *arc)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_attdef_get_obl_angle (DxfAttdef *attdef)
Unify the oblique angle.

Global dxf_attdef_get_rot_angle (DxfAttdef *attdef)
Unify the rotation angle.

Global dxf_attdef_set_obl_angle (DxfAttdef *attdef, double obl_angle)
Unify the oblique angle.

Global dxf_attdef_set_rot_angle (DxfAttdef *attdef, double rot_angle)
Unify the rotation angle.

Global dxf_attdef_write (DxfFile *fp, DxfAttdef *attdef)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_attrib_get_obl_angle (DxfAttrib *attrib)
Unify the oblique angle.

Global dxf_attrib_get_rot_angle (DxfAttrib *attrib)
Unify the rotation angle.

Global dxf_attrib_set_obl_angle (DxfAttrib *attrib, double obl_angle)
Unify the oblique angle.

Global dxf_attrib_set_rot_angle (DxfAttrib *attrib, double rot_angle)
Unify the rotation angle.

Global dxf_attrib_write (DxfFile *fp, DxfAttrib *attrib)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_block_read (DxfFile *fp, DxfBlock *block)

After reading information from the BLOCK entity up until the closing Group code 0, the pointer to the following ENDBLK entity needs to be stored in the current (last) DxfBlock struct member endblk.

Resolve this quick hack for preventing an empty block name string in a more elegant manner.

Global dxf_block_record_write (DxfFile *fp, DxfBlockRecord *block_record)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_block_write (DxfFile *fp, DxfBlock *block)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_block_write_table (DxfFile *fp, DxfBlock *blocks_list)
Add code here.

Global dxf_body_write (DxfFile *fp, DxfBody *body)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_circle_write (DxfFile *fp, DxfCircle *circle)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_dictionary_write (DxfFile *fp, DxfDictionary *dictionary)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_dictionaryvar_write (DxfFile *fp, DxfDictionaryVar *dictionaryvar)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_dimension_write (DxfFile *fp, DxfDimension *dimension)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_donut_write (DxfFile *fp, DxfDonut *donut)

Hook up this polyline to the list of polylines.

Hook up this vertex to the list of vertices.

Hook up this vertex to the list of vertices.

Hook up this seqend to the list of seqends.

Global dxf_ellipse_write (DxfFile *fp, DxfEllipse *ellipse)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_endblk_read (DxfFile *fp, DxfEndblk *endblk)
After reading information from the BLOCK entity up until the closing Group code 0, the pointer to the following ENDBLK entity needs to be stored in the current (last) DxfBlock struct member endblk.

Global dxf_endblk_write (DxfFile *fp, DxfEndblk *endblk)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_entities_read_table (char *filename, FILE *fp, int line_number, char *dxf_entities_list, int acad_version_number)
Add code here.

Global dxf_entities_write_table (char *dxf_entities_list, int acad_version_number)
Add code here.

Global dxf_group_write (DxfFile *fp, DxfGroup *group)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_hatch_boundary_path_edge_spline_copy_control_points (DxfHatchBoundaryPathEdgeSpline *spline)
code needs to be checked !

Global dxf_hatch_boundary_path_polyline_close_polyline (DxfHatchBoundaryPathPolyline *polyline)

How do we know what's the last id_code ? This should be taken from a global id_code counter.

How do we know what's the last id_code ? This should be taken from a global id_code counter.

add code here !

Global dxf_hatch_boundary_path_polyline_point_inside_polyline (DxfHatchBoundaryPathPolyline *polyline, DxfPoint *point)
This is a dead code path.

Global dxf_hatch_boundary_path_write (DxfFile *fp, DxfHatchBoundaryPath *path)
Write edges data.

Global dxf_hatch_write (DxfFile *fp, DxfHatch *hatch)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_header_read (DxfFile *fp, DxfHeader *header)
FIXME: stores the autocad version as int

Global dxf_header_read_parser (DxfFile *fp, DxfHeader *header, char *temp_string, int acad_version_number)

: add some kind of control to what we have already read and check if we read all header data.

FIXME: changed from AC1012 to AC1015

Global dxf_helix_struct::spline
We need to use a struct DxfSpline *spline; in stead of a DxfSpline *spline;

Global dxf_helix_write (DxfFile *fp, DxfHelix *helix)

implement as a single linked list of double.

implement as a single linked list of double.

Global dxf_idbuffer_write (DxfFile *fp, DxfIdbuffer *idbuffer)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_image_write (DxfFile *fp, DxfImage *image)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_imagedef_reactor_write (DxfFile *fp, DxfImagedefReactor *imagedef_reactor)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_imagedef_read (DxfFile *fp, DxfImagedef *imagedef)
Check for overrun of array index.

Global dxf_imagedef_write (DxfFile *fp, DxfImagedef *imagedef)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_insert_get_rot_angle (DxfInsert *insert)
We need to normalize the return value in the range 0.0 ... 360.0.

Global dxf_insert_read (DxfFile *fp, DxfInsert *insert)
After a set attributes_follow flag is detected, parsing of following entities should be implemented until the end of sequence marker (SEQEND) is encountered.

Global dxf_insert_set_rot_angle (DxfInsert *insert, double rot_angle)
We need to normalize the value in the range 0.0 ... 360.0 before returning.

Global dxf_insert_write (DxfFile *fp, DxfInsert *insert)

for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

After a set attributes_follow flag is detected, the writing of following entities should be implemented and an end of sequence marker (SEQEND) written.

Global dxf_layer_index_read (DxfFile *fp, DxfLayerIndex *layer_index)
Check for overrun of array index.

Global dxf_layer_index_write (DxfFile *fp, DxfLayerIndex *layer_index)

for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Check for overrun of array index.

Global dxf_layer_write (DxfFile *fp, DxfLayer *layer)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_leader_write (DxfFile *fp, DxfLeader *leader)

for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Xdata belonging to the application ID "ACAD" may follow.
This describes any dimension overrides that have been applied to this entity.

Global dxf_line_create_from_points (DxfPoint *p1, DxfPoint *p2, int id_code, int inheritance)

Do a deep copy of binary_graphics_data.

Do a deep copy of binary_graphics_data.

Global dxf_line_write (DxfFile *fp, DxfLine *line)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_ltype_read (DxfFile *fp, DxfLType *ltype)
We are assuming that 49 is the first group code that is encountered for each element in the linetype definition.
This assumption breaks the "rule" of parsing the dxf file regardless the order in which group codes appear within an entity.

Global dxf_ltype_write (DxfFile *fp, DxfLType *ltype)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_lwpolyline_read (DxfFile *fp, DxfLWPolyline *lwpolyline)

The pointer administration needs to be checked for functionality.

Free memory to the last (unused) vertex in the linked list.

Global dxf_lwpolyline_write (DxfFile *fp, DxfLWPolyline *lwpolyline)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_mline_write (DxfFile *fp, DxfMline *mline)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_mlinestyle_write (DxfFile *fp, DxfMlinestyle *mlinestyle)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_mtext_write (DxfFile *fp, DxfMtext *mtext)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_object_init (DxfObject *object)
Add code for initialising a DxfParam.

Global dxf_object_ptr_read (DxfFile *fp, DxfObjectPtr *object_ptr)
Set pointer to xdata->next for following xdata object.

Global dxf_object_ptr_write (DxfFile *fp, DxfObjectPtr *object_ptr)

for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Write the complete linked list of char values.

Global dxf_object_write_objects (DxfFile *fp, DxfObject *dxf_objects_list)
Add code here.

Global dxf_ole2frame_free (DxfOle2Frame *ole2frame)

Needs a proper implementation.

Needs a proper implementation.

Global dxf_ole2frame_write (DxfFile *fp, DxfOle2Frame *ole2frame)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_oleframe_write (DxfFile *fp, DxfOleFrame *oleframe)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_point_write (DxfFile *fp, DxfPoint *point)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_polyline_write (DxfFile *fp, DxfPolyline *polyline)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_rastervariables_write (DxfFile *fp, DxfRasterVariables *rastervariables)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_ray_write (DxfFile *fp, DxfRay *ray)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_read_close (DxfFile *file)
FIXME: how to free other sub structures

Global dxf_read_init (const char *filename)
FIXME: dxf header and blocks need initialized ? dxf_header_init (file->dxf_header); dxf_block_init (file->dxf_block);

Global dxf_region_write (DxfFile *fp, DxfRegion *region)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_section_read (DxfFile *fp)

Invoke a function for parsing the CLASSES section.

Invoke a function for parsing the TABLES section.

Experimental usage of block_read

Invoke a function for parsing the OBJECTS section.

Invoke a function for parsing the THUMBNAIL section.

Global dxf_seqend_write (DxfFile *fp, DxfSeqend *seqend)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_shape_write (DxfFile *fp, DxfShape *shape)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_solid_write (DxfFile *fp, DxfSolid *solid)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_sortentstable_read (DxfFile *fp, DxfSortentsTable *sortentstable)
Check for overrun of array index.

Global dxf_sortentstable_write (DxfFile *fp, DxfSortentsTable *sortentstable)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_spatial_filter_get_front_clipping_plane_distance (DxfSpatialFilter *spatial_filter)

Add dxf_spatial_filter_get_inverse_block_transformation().

Add dxf_spatial_filter_set_inverse_block_transformation().

Add dxf_spatial_filter_get_block_transformation().

Add dxf_spatial_filter_set_block_transformation().

Global dxf_spatial_filter_get_p0_next (DxfPoint *p0)
This function can be replaced by dxf_point_get_next().

Global dxf_spatial_filter_set_p0_next (DxfPoint *p0, DxfPoint *next)
This function can be replaced by dxf_point_set_next().

Global dxf_spatial_filter_write (DxfFile *fp, DxfSpatialFilter *spatial_filter)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_spatial_index_write (DxfFile *fp, DxfSpatialIndex *spatial_index)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_spline_write (DxfFile *fp, DxfSpline *spline)

for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

On 64 bit machines use group code 160.

implement as a single linked list of double.

implement as a single linked list of double.

Global dxf_style_write (DxfFile *fp, DxfStyle *style)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_tables_write (DxfFile *fp, DxfTables *tables)
Add code here

Global dxf_text_write (DxfFile *fp, DxfText *text)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_tolerance_write (DxfFile *fp, DxfTolerance *tolerance)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_trace_write (DxfFile *fp, DxfTrace *trace)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_ucs_write (DxfFile *fp, DxfUcs *ucs)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_vertex_write (DxfFile *fp, DxfVertex *vertex)

for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Put thickness in the correct order.

We use a 3dPolylineVertex for now, it could have been a 2dVertex as well, in that case use:
fprintf (fp->fp, "100\nAcDb2dVertex\n");

Global dxf_view_write (DxfFile *fp, DxfView *view)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_viewport::frozen_layers [DXF_MAX_LAYERS]
Implement the number of layers in a more efficient way.
A lot of memory is consumed by reserving for DXF_MAX_LAYERS instead of the actual existing number of layers.
Maybe this can be solved by dynamically allocating a reasonable number of layers during compile time, and (re-allocating) shrinking when the actual number of layers is known during run time.

Global dxf_viewport_init (DxfViewport *viewport)
Implement the number of layers in a more efficient way. A lot of memory is consumed by reserving for DXF_MAX_LAYERS instead of the actual existing number of layers. Maybe this can be solved by dynamically allocating a reasonable number of layers during compile time, and (re-allocating) shrinking when the actual number of layers is known during run time.

Global dxf_viewport_write (DxfFile *fp, DxfViewport *viewport)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_vport_write (DxfFile *fp, DxfVPort *vport)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_xline_write (DxfFile *fp, DxfXLine *xline)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

Global dxf_xrecord_write (DxfFile *fp, DxfXrecord *xrecord)
for version R14.
Implementing the start of application-defined group "{application_name", with Group code 102.
For example: "{ACAD_REACTORS" indicates the start of the AutoCAD persistent reactors group.

application-defined codes: Group codes and values within the 102 groups are application defined (optional).

End of group, "}" (optional), with Group code 102.

File point.c
Add a link to somewhere else.