zmax = Surface.Mesh.BoundBox.ZMax
zmin = Surface.Mesh.BoundBox.ZMin
h = 0
dh =1000
while h < zmax:
if h > zmin:
CrossSections = Surface.Mesh.crossSections([((0,0,h),(0,0,1))],0.5)
for i in CrossSections[0]:
Contour = Draft.makeWire(i, face=False)
self.Contours.addObject(Contour)
h += dh
else:
h += dh
Currently there are some mesh algorithms that don't respect the placement. To overcome this limitation you can apply the placement directly on the geometry, i.e. the mesh points are directly changed.
At the moment this requires that the shape must be near to the mesh already and then you define a maximum distance. However, it's not the same as the parallel projection offered by OCCT for projecting on shapes. Instead it seems to project it in a way that the projection direction for each point of the shape is normal to the mesh surface.
In the Surface workbench you find a function to draw a line onto a mesh. Afterwards it collects the intersection points with the triangle edges and build a wire. It's rather the opposite of what you need but the used algorithm can be used to project a given wire on the mesh.