I believe, but am not sure, that you want to create two vertex points, relative to a known input point (M1), and two known vectors(Vec_F1_Norm, Vec_F2_Norm), and a fixed offset distance of 2mm for each, and what is confusing you is that the normal vectors are translated away from the XYZ axes. It would be easier in future to post file, not just image.

If I understand you correctly, then P1 will be a point on Face1, and P2 will be on Face2.

P1 is then simply M1 + 2.0 * Vec_F2_Norm, and P2 is M1 + 2.0 * Vec_F1_Norm.

So, in the example you state, if the normal vector for Face2 (assuming as it points upward) = (-0.059824540910132035, 0.0, 0.9982089081474338) and, if M1 is located at (0.0, 0.0, 0.0), then P2 = (-0.11964908182026407, 0.0, 1.9964178162948676).

Attached is an approximation of what you show. In my model, Face7 corresponds to your Face1, and Face5 corresponds to your Face2. If you select the model and paste following code into your python console, it will demonstrate by placing M1, P1, P2 on the model. Note that M1 was chosen as the bottom vertex of the side-edge of the cylinder because it appeared close to what you are doing.

Code: Select all

```
Model = App.ActiveObject
F1=Model.Shape.Face7
F2=Model.Shape.Face5
F1_Center = F1.Surface.Center
M1=F1.Edge1.Vertexes[0].Point
F1Norm=(M1-F1_Center).normalize()
F2Norm = -F1.Surface.Axis
P1 = M1 + (2.0 * F2Norm)
P2 = M1 + (2.0 * F1Norm)
V0=Part.Vertex(M1)
V1=Part.Vertex(P1)
V2=Part.Vertex(P2)
Part.show(V0)
Part.show(V1)
Part.show(V2)
```

Best,

Josh