i have these function for convert 3D point to 2D point:
Code:
Private Function ConvertPositon3DTo2D(Position As Position3D, World3DSize As Size3D) As POINTAPI    Dim ConvertedPosition As POINTAPI
    Dim PosZZDepth As Long
    
    PosZZDepth = Position.Z + World3DSize.ZDepth
    
    If (PosZZDepth = 0) Then PosZZDepth = 1 'avoiding division by zero
    Dim width As Double
    Dim height As Double
    width = World3DSize.width / 2
    If (width = 0) Then width = 0
    height = World3DSize.height / 2
    If (height = 0) Then height = 0
    ConvertedPosition.X = (Position.X * World3DSize.ZDepth / PosZZDepth) + width
    ConvertedPosition.Y = (Position.Y * World3DSize.ZDepth / PosZZDepth) + height
    ConvertPositon3DTo2D = ConvertedPosition
End Function
these function works.... but when the Z is negative the positions are wrong... and here it's the big problem