Christian,
indeed this is one of the most complex steps when working with unstructured meshes. I cannot offer a general, easy and straightforward way so far (as we're dealing with extremely complex geometrical problems here), but I've used the following workflows in different combinations so far:
- re-work AutoCad (or shp) files in a software like Blender that (for simple to moderately complex cases) can detect intersections etc. and partly also resolve them automatically (remove duplicates, intersect polygons, re-distribute vertices, ...)
- use the vertices of the structures only for meshing rather than surfaces - but this may compromise the integrity of the structures, and makes parametrization more complicated
- develop my own pre-processing code for building PLCs (in my case for geology with vertical faults)
In general, TetGen can use PLCs along with 'add-ins', so points, lines, and non-closed triangulated surfaces work as well (also for re-meshing parts of a layered mesh - often a good option for technical structures in regional models). With respect to PLCs, FEFLOW does a number of simple corrections on its own (like duplicate polygons) before handing over geometry to TetGen, but not more complicated ones.
I hope this can help a bit - but as said, producing viable input geometries for unstructured meshing remains a challenging task.
Cheers,
Peter