Writing .dat to .obj converter in JS, but having BFC problems


Re: Writing .dat to .obj converter in JS, but having BFC problems
#5
Please find below my 0.01 cent for this discussion. That is the code I use for inlineing in my applications. It is wirtten in visual basic net. I am sure there is a more elegant way so solve but this is mine.
The sub Inline and Reversewinding are what you need. I hope this is not too complicated to understand. For me each line is an object and both sub are methods of the line object.

Code:
''' <summary> ''' Manipulates the current matrix values according the values from the given Originalline ''' </summary> ''' <param name="objOriginalLine">Line that calls this subpart</param> ''' <param name="reverse">Does nothing so far</param> ''' <remarks></remarks> Public Sub Inline(ByVal objOriginalLine As cls_LDraw_Line, Optional ByVal reverse As Boolean = False) 'Originalline is the line that should be further extracted. If objOriginalLine.LineType <> LDraw_DatLineType.Subpart Then Exit Sub Select Case Me.LineType Case LDraw_DatLineType.Subpart Dim tmpDatLinePoint As New cls_LDraw_Point Dim tmpDatMatrix As New cls_LDraw_Matrix '3x3 tmpDatLinePoint.X = varDatLinePoint1.X tmpDatLinePoint.Y = varDatLinePoint1.Y tmpDatLinePoint.Z = varDatLinePoint1.Z tmpDatMatrix.TransX.X = varDatMatrix.TransX.X tmpDatMatrix.TransX.Y = varDatMatrix.TransX.Y tmpDatMatrix.TransX.Z = varDatMatrix.TransX.Z tmpDatMatrix.TransY.X = varDatMatrix.TransY.X tmpDatMatrix.TransY.Y = varDatMatrix.TransY.Y tmpDatMatrix.TransY.Z = varDatMatrix.TransY.Z tmpDatMatrix.TransZ.X = varDatMatrix.TransZ.X tmpDatMatrix.TransZ.Y = varDatMatrix.TransZ.Y tmpDatMatrix.TransZ.Z = varDatMatrix.TransZ.Z varDatLinePoint1.X = _ tmpDatLinePoint.X * objOriginalLine.TransformMatrix.TransX.X + _ tmpDatLinePoint.Y * objOriginalLine.TransformMatrix.TransX.Y + _ tmpDatLinePoint.Z * objOriginalLine.TransformMatrix.TransX.Z + _ 1 * objOriginalLine.Coordinate.X varDatLinePoint1.Y = _ tmpDatLinePoint.X * objOriginalLine.TransformMatrix.TransY.X + _ tmpDatLinePoint.Y * objOriginalLine.TransformMatrix.TransY.Y + _ tmpDatLinePoint.Z * objOriginalLine.TransformMatrix.TransY.Z + _ 1 * objOriginalLine.Coordinate.Y varDatLinePoint1.Z = _ tmpDatLinePoint.X * objOriginalLine.TransformMatrix.TransZ.X + _ tmpDatLinePoint.Y * objOriginalLine.TransformMatrix.TransZ.Y + _ tmpDatLinePoint.Z * objOriginalLine.TransformMatrix.TransZ.Z + _ 1 * objOriginalLine.Coordinate.Z varDatMatrix.TransX.X = _ tmpDatMatrix.TransX.X * objOriginalLine.TransformMatrix.TransX.X + _ tmpDatMatrix.TransY.X * objOriginalLine.TransformMatrix.TransX.Y + _ tmpDatMatrix.TransZ.X * objOriginalLine.TransformMatrix.TransX.Z + _ 0 * objOriginalLine.Coordinate.X 'ok varDatMatrix.TransX.Y = _ tmpDatMatrix.TransX.Y * objOriginalLine.TransformMatrix.TransX.X + _ tmpDatMatrix.TransY.Y * objOriginalLine.TransformMatrix.TransX.Y + _ tmpDatMatrix.TransZ.Y * objOriginalLine.TransformMatrix.TransX.Z + _ 0 * objOriginalLine.Coordinate.X 'ok varDatMatrix.TransX.Z = _ tmpDatMatrix.TransX.Z * objOriginalLine.TransformMatrix.TransX.X + _ tmpDatMatrix.TransY.Z * objOriginalLine.TransformMatrix.TransX.Y + _ tmpDatMatrix.TransZ.Z * objOriginalLine.TransformMatrix.TransX.Z + _ 0 * objOriginalLine.Coordinate.X 'ok varDatLinePoint2 = varDatMatrix.TransX varDatMatrix.TransY.X = _ tmpDatMatrix.TransX.X * objOriginalLine.TransformMatrix.TransY.X + _ tmpDatMatrix.TransY.X * objOriginalLine.TransformMatrix.TransY.Y + _ tmpDatMatrix.TransZ.X * objOriginalLine.TransformMatrix.TransY.Z + _ 0 * objOriginalLine.Coordinate.Y 'ok varDatMatrix.TransY.Y = _ tmpDatMatrix.TransX.Y * objOriginalLine.TransformMatrix.TransY.X + _ tmpDatMatrix.TransY.Y * objOriginalLine.TransformMatrix.TransY.Y + _ tmpDatMatrix.TransZ.Y * objOriginalLine.TransformMatrix.TransY.Z + _ 0 * objOriginalLine.Coordinate.Y 'ok varDatMatrix.TransY.Z = _ tmpDatMatrix.TransX.Z * objOriginalLine.TransformMatrix.TransY.X + _ tmpDatMatrix.TransY.Z * objOriginalLine.TransformMatrix.TransY.Y + _ tmpDatMatrix.TransZ.Z * objOriginalLine.TransformMatrix.TransY.Z + _ 0 * objOriginalLine.Coordinate.Y 'ok varDatLinePoint3 = varDatMatrix.TransY varDatMatrix.TransZ.X = _ tmpDatMatrix.TransX.X * objOriginalLine.TransformMatrix.TransZ.X + _ tmpDatMatrix.TransY.X * objOriginalLine.TransformMatrix.TransZ.Y + _ tmpDatMatrix.TransZ.X * objOriginalLine.TransformMatrix.TransZ.Z + _ 0 * objOriginalLine.Coordinate.Z 'ok varDatMatrix.TransZ.Y = _ tmpDatMatrix.TransX.Y * objOriginalLine.TransformMatrix.TransZ.X + _ tmpDatMatrix.TransY.Y * objOriginalLine.TransformMatrix.TransZ.Y + _ tmpDatMatrix.TransZ.Y * objOriginalLine.TransformMatrix.TransZ.Z + _ 0 * objOriginalLine.Coordinate.Z 'ok varDatMatrix.TransZ.Z = _ tmpDatMatrix.TransX.Z * objOriginalLine.TransformMatrix.TransZ.X + _ tmpDatMatrix.TransY.Z * objOriginalLine.TransformMatrix.TransZ.Y + _ tmpDatMatrix.TransZ.Z * objOriginalLine.TransformMatrix.TransZ.Z + _ 0 * objOriginalLine.Coordinate.Z 'ok varDatLinePoint4 = varDatMatrix.TransZ If varDatLineColor = "16" Then varDatLineColor = objOriginalLine.LineColor End If Case LDraw_DatLineType.Line 'für linetype2 Dim x1, x2, y1, y2, z1, z2 As Double 'Die Werte für X sind ok aber nicht y und z, da bereits x verändert wurde.:-( x1 = varDatLinePoint1.X x2 = varDatLinePoint2.X y1 = varDatLinePoint1.Y y2 = varDatLinePoint2.Y z1 = varDatLinePoint1.Z z2 = varDatLinePoint2.Z varDatLinePoint1.X = _ x1 * objOriginalLine.TransformMatrix.TransX.X + _ y1 * objOriginalLine.TransformMatrix.TransX.Y + _ z1 * objOriginalLine.TransformMatrix.TransX.Z + _ objOriginalLine.Coordinate.X varDatLinePoint1.Y = _ x1 * objOriginalLine.TransformMatrix.TransY.X + _ y1 * objOriginalLine.TransformMatrix.TransY.Y + _ z1 * objOriginalLine.TransformMatrix.TransY.Z + _ objOriginalLine.Coordinate.Y varDatLinePoint1.Z = _ x1 * objOriginalLine.TransformMatrix.TransZ.X + _ y1 * objOriginalLine.TransformMatrix.TransZ.Y + _ z1 * objOriginalLine.TransformMatrix.TransZ.Z + _ objOriginalLine.Coordinate.Z varDatLinePoint2.X = _ x2 * objOriginalLine.TransformMatrix.TransX.X + _ y2 * objOriginalLine.TransformMatrix.TransX.Y + _ z2 * objOriginalLine.TransformMatrix.TransX.Z + _ objOriginalLine.Coordinate.X varDatLinePoint2.Y = _ x2 * objOriginalLine.TransformMatrix.TransY.X + _ y2 * objOriginalLine.TransformMatrix.TransY.Y + _ z2 * objOriginalLine.TransformMatrix.TransY.Z + _ objOriginalLine.Coordinate.Y varDatLinePoint2.Z = _ x2 * objOriginalLine.TransformMatrix.TransZ.X + _ y2 * objOriginalLine.TransformMatrix.TransZ.Y + _ z2 * objOriginalLine.TransformMatrix.TransZ.Z + _ objOriginalLine.Coordinate.Z If varDatLineColor = "16" Then varDatLineColor = objOriginalLine.LineColor End If Case LDraw_DatLineType.Triangle 'für linetype3 Dim x1, x2, x3, y1, y2, y3, z1, z2, z3 As Double x1 = varDatLinePoint1.X x2 = varDatLinePoint2.X x3 = varDatLinePoint3.X y1 = varDatLinePoint1.Y y2 = varDatLinePoint2.Y y3 = varDatLinePoint3.Y z1 = varDatLinePoint1.Z z2 = varDatLinePoint2.Z z3 = varDatLinePoint3.Z varDatLinePoint1.X = x1 * objOriginalLine.TransformMatrix.TransX.X + _ y1 * objOriginalLine.TransformMatrix.TransX.Y + _ z1 * objOriginalLine.TransformMatrix.TransX.Z + _ objOriginalLine.Coordinate.X varDatLinePoint1.Y = x1 * objOriginalLine.TransformMatrix.TransY.X + _ y1 * objOriginalLine.TransformMatrix.TransY.Y + _ z1 * objOriginalLine.TransformMatrix.TransY.Z + _ objOriginalLine.Coordinate.Y varDatLinePoint1.Z = x1 * objOriginalLine.TransformMatrix.TransZ.X + _ y1 * objOriginalLine.TransformMatrix.TransZ.Y + _ z1 * objOriginalLine.TransformMatrix.TransZ.Z + _ objOriginalLine.Coordinate.Z varDatLinePoint2.X = x2 * objOriginalLine.TransformMatrix.TransX.X + _ y2 * objOriginalLine.TransformMatrix.TransX.Y + _ z2 * objOriginalLine.TransformMatrix.TransX.Z + _ objOriginalLine.Coordinate.X varDatLinePoint2.Y = x2 * objOriginalLine.TransformMatrix.TransY.X + _ y2 * objOriginalLine.TransformMatrix.TransY.Y + _ z2 * objOriginalLine.TransformMatrix.TransY.Z + _ objOriginalLine.Coordinate.Y varDatLinePoint2.Z = x2 * objOriginalLine.TransformMatrix.TransZ.X + _ y2 * objOriginalLine.TransformMatrix.TransZ.Y + _ z2 * objOriginalLine.TransformMatrix.TransZ.Z + _ objOriginalLine.Coordinate.Z varDatLinePoint3.X = x3 * objOriginalLine.TransformMatrix.TransX.X + _ y3 * objOriginalLine.TransformMatrix.TransX.Y + _ z3 * objOriginalLine.TransformMatrix.TransX.Z + _ objOriginalLine.Coordinate.X varDatLinePoint3.Y = x3 * objOriginalLine.TransformMatrix.TransY.X + _ y3 * objOriginalLine.TransformMatrix.TransY.Y + _ z3 * objOriginalLine.TransformMatrix.TransY.Z + _ objOriginalLine.Coordinate.Y varDatLinePoint3.Z = x3 * objOriginalLine.TransformMatrix.TransZ.X + _ y3 * objOriginalLine.TransformMatrix.TransZ.Y + _ z3 * objOriginalLine.TransformMatrix.TransZ.Z + _ objOriginalLine.Coordinate.Z If varDatLineColor = "16" Then varDatLineColor = objOriginalLine.LineColor End If If reverse Then Me.ReverseWinding() End If Case LDraw_DatLineType.Quad Dim x1, x2, x3, x4, y1, y2, y3, y4 As Double x1 = varDatLinePoint1.X x2 = varDatLinePoint2.X x3 = varDatLinePoint3.X x4 = varDatLinePoint4.X y1 = varDatLinePoint1.Y y2 = varDatLinePoint2.Y y3 = varDatLinePoint3.Y y4 = varDatLinePoint4.Y varDatLinePoint1.X = varDatLinePoint1.X * objOriginalLine.TransformMatrix.TransX.X + _ varDatLinePoint1.Y * objOriginalLine.TransformMatrix.TransX.Y + _ varDatLinePoint1.Z * objOriginalLine.TransformMatrix.TransX.Z + _ objOriginalLine.Coordinate.X varDatLinePoint1.Y = x1 * objOriginalLine.TransformMatrix.TransY.X + _ varDatLinePoint1.Y * objOriginalLine.TransformMatrix.TransY.Y + _ varDatLinePoint1.Z * objOriginalLine.TransformMatrix.TransY.Z + _ objOriginalLine.Coordinate.Y varDatLinePoint1.Z = x1 * objOriginalLine.TransformMatrix.TransZ.X + _ y1 * objOriginalLine.TransformMatrix.TransZ.Y + _ varDatLinePoint1.Z * objOriginalLine.TransformMatrix.TransZ.Z + _ objOriginalLine.Coordinate.Z varDatLinePoint2.X = varDatLinePoint2.X * objOriginalLine.TransformMatrix.TransX.X + _ varDatLinePoint2.Y * objOriginalLine.TransformMatrix.TransX.Y + _ varDatLinePoint2.Z * objOriginalLine.TransformMatrix.TransX.Z + _ objOriginalLine.Coordinate.X varDatLinePoint2.Y = x2 * objOriginalLine.TransformMatrix.TransY.X + _ varDatLinePoint2.Y * objOriginalLine.TransformMatrix.TransY.Y + _ varDatLinePoint2.Z * objOriginalLine.TransformMatrix.TransY.Z + _ objOriginalLine.Coordinate.Y varDatLinePoint2.Z = x2 * objOriginalLine.TransformMatrix.TransZ.X + _ y2 * objOriginalLine.TransformMatrix.TransZ.Y + _ varDatLinePoint2.Z * objOriginalLine.TransformMatrix.TransZ.Z + _ objOriginalLine.Coordinate.Z varDatLinePoint3.X = varDatLinePoint3.X * objOriginalLine.TransformMatrix.TransX.X + _ varDatLinePoint3.Y * objOriginalLine.TransformMatrix.TransX.Y + _ varDatLinePoint3.Z * objOriginalLine.TransformMatrix.TransX.Z + _ objOriginalLine.Coordinate.X varDatLinePoint3.Y = x3 * objOriginalLine.TransformMatrix.TransY.X + _ varDatLinePoint3.Y * objOriginalLine.TransformMatrix.TransY.Y + _ varDatLinePoint3.Z * objOriginalLine.TransformMatrix.TransY.Z + _ objOriginalLine.Coordinate.Y varDatLinePoint3.Z = x3 * objOriginalLine.TransformMatrix.TransZ.X + _ y3 * objOriginalLine.TransformMatrix.TransZ.Y + _ varDatLinePoint3.Z * objOriginalLine.TransformMatrix.TransZ.Z + _ objOriginalLine.Coordinate.Z varDatLinePoint4.X = varDatLinePoint4.X * objOriginalLine.TransformMatrix.TransX.X + _ varDatLinePoint4.Y * objOriginalLine.TransformMatrix.TransX.Y + _ varDatLinePoint4.Z * objOriginalLine.TransformMatrix.TransX.Z + _ objOriginalLine.Coordinate.X varDatLinePoint4.Y = x4 * objOriginalLine.TransformMatrix.TransY.X + _ varDatLinePoint4.Y * objOriginalLine.TransformMatrix.TransY.Y + _ varDatLinePoint4.Z * objOriginalLine.TransformMatrix.TransY.Z + _ objOriginalLine.Coordinate.Y varDatLinePoint4.Z = x4 * objOriginalLine.TransformMatrix.TransZ.X + _ y4 * objOriginalLine.TransformMatrix.TransZ.Y + _ varDatLinePoint4.Z * objOriginalLine.TransformMatrix.TransZ.Z + _ objOriginalLine.Coordinate.Z If varDatLineColor = "16" Then varDatLineColor = objOriginalLine.LineColor End If If reverse Then Me.ReverseWinding() End If Case LDraw_DatLineType.OptLine Dim x1, x2, x3, x4, y1, y2, y3, y4 As Double x1 = varDatLinePoint1.X x2 = varDatLinePoint2.X x3 = varDatLinePoint3.X x4 = varDatLinePoint4.X y1 = varDatLinePoint1.Y y2 = varDatLinePoint2.Y y3 = varDatLinePoint3.Y y4 = varDatLinePoint4.Y varDatLinePoint1.X = x1 * objOriginalLine.TransformMatrix.TransX.X + _ y1 * objOriginalLine.TransformMatrix.TransX.Y + _ varDatLinePoint1.Z * objOriginalLine.TransformMatrix.TransX.Z + _ objOriginalLine.Coordinate.X varDatLinePoint1.Y = x1 * objOriginalLine.TransformMatrix.TransY.X + _ y1 * objOriginalLine.TransformMatrix.TransY.Y + _ varDatLinePoint1.Z * objOriginalLine.TransformMatrix.TransY.Z + _ objOriginalLine.Coordinate.Y varDatLinePoint1.Z = x1 * objOriginalLine.TransformMatrix.TransZ.X + _ y1 * objOriginalLine.TransformMatrix.TransZ.Y + _ varDatLinePoint1.Z * objOriginalLine.TransformMatrix.TransZ.Z + _ objOriginalLine.Coordinate.Z varDatLinePoint2.X = varDatLinePoint2.X * objOriginalLine.TransformMatrix.TransX.X + _ y2 * objOriginalLine.TransformMatrix.TransX.Y + _ varDatLinePoint2.Z * objOriginalLine.TransformMatrix.TransX.Z + _ objOriginalLine.Coordinate.X varDatLinePoint2.Y = x2 * objOriginalLine.TransformMatrix.TransY.X + _ y2 * objOriginalLine.TransformMatrix.TransY.Y + _ varDatLinePoint2.Z * objOriginalLine.TransformMatrix.TransY.Z + _ objOriginalLine.Coordinate.Y varDatLinePoint2.Z = x2 * objOriginalLine.TransformMatrix.TransZ.X + _ y2 * objOriginalLine.TransformMatrix.TransZ.Y + _ varDatLinePoint2.Z * objOriginalLine.TransformMatrix.TransZ.Z + _ objOriginalLine.Coordinate.Z varDatLinePoint3.X = varDatLinePoint3.X * objOriginalLine.TransformMatrix.TransX.X + _ y3 * objOriginalLine.TransformMatrix.TransX.Y + _ varDatLinePoint3.Z * objOriginalLine.TransformMatrix.TransX.Z + _ objOriginalLine.Coordinate.X varDatLinePoint3.Y = x3 * objOriginalLine.TransformMatrix.TransY.X + _ y3 * objOriginalLine.TransformMatrix.TransY.Y + _ varDatLinePoint3.Z * objOriginalLine.TransformMatrix.TransY.Z + _ objOriginalLine.Coordinate.Y varDatLinePoint3.Z = x3 * objOriginalLine.TransformMatrix.TransZ.X + _ y3 * objOriginalLine.TransformMatrix.TransZ.Y + _ varDatLinePoint3.Z * objOriginalLine.TransformMatrix.TransZ.Z + _ objOriginalLine.Coordinate.Z varDatLinePoint4.X = varDatLinePoint4.X * objOriginalLine.TransformMatrix.TransX.X + _ y4 * objOriginalLine.TransformMatrix.TransX.Y + _ varDatLinePoint4.Z * objOriginalLine.TransformMatrix.TransX.Z + _ objOriginalLine.Coordinate.X varDatLinePoint4.Y = x4 * objOriginalLine.TransformMatrix.TransY.X + _ y4 * objOriginalLine.TransformMatrix.TransY.Y + _ varDatLinePoint4.Z * objOriginalLine.TransformMatrix.TransY.Z + _ objOriginalLine.Coordinate.Y varDatLinePoint4.Z = x4 * objOriginalLine.TransformMatrix.TransZ.X + _ y4 * objOriginalLine.TransformMatrix.TransZ.Y + _ varDatLinePoint4.Z * objOriginalLine.TransformMatrix.TransZ.Z + _ objOriginalLine.Coordinate.Z If varDatLineColor = "16" Then varDatLineColor = objOriginalLine.LineColor End If End Select End Sub ''' <summary> ''' Method to reversewind this line ''' </summary> ''' <remarks></remarks> Public Sub ReverseWinding() Dim x1, x2, z1, y1, y2, z2 As Double Dim x3, x4, z3, y3, y4, z4 As Double Try Select Case Me.LineType Case LDraw_DatLineType.Comment Case LDraw_DatLineType.Line Case LDraw_DatLineType.OptLine Case LDraw_DatLineType.Quad 'save values x1 = varDatLinePoint1.X y1 = varDatLinePoint1.Y z1 = varDatLinePoint1.Z x2 = varDatLinePoint2.X y2 = varDatLinePoint2.Y z2 = varDatLinePoint2.Z x3 = varDatLinePoint3.X y3 = varDatLinePoint3.Y z3 = varDatLinePoint3.Z x4 = varDatLinePoint4.X y4 = varDatLinePoint4.Y z4 = varDatLinePoint4.Z 'Change BFC of that line If varDatLineBFC = "CW" Then varDatLineBFC = "CCW" Else varDatLineBFC = "CW" End If 'Change the point of that line varDatLinePoint1.X = x4 varDatLinePoint1.Y = y4 varDatLinePoint1.Z = z4 varDatLinePoint2.X = x3 varDatLinePoint2.Y = y3 varDatLinePoint2.Z = z3 varDatLinePoint3.X = x2 varDatLinePoint3.Y = y2 varDatLinePoint3.Z = z2 varDatLinePoint4.X = x1 varDatLinePoint4.Y = y1 varDatLinePoint4.Z = z1 Case LDraw_DatLineType.Subpart 'Nothing to do Case LDraw_DatLineType.Triangle 'save values x1 = varDatLinePoint1.X y1 = varDatLinePoint1.Y z1 = varDatLinePoint1.Z x2 = varDatLinePoint3.X y2 = varDatLinePoint3.Y z2 = varDatLinePoint3.Z 'Change BFC of that line If varDatLineBFC = "CW" Then varDatLineBFC = "CCW" Else varDatLineBFC = "CW" End If 'Change the point of that line varDatLinePoint1.X = x2 varDatLinePoint1.Y = y2 varDatLinePoint1.Z = z2 varDatLinePoint3.X = x1 varDatLinePoint3.Y = y1 varDatLinePoint3.Z = z1 End Select Catch ex As Exception MessageBox.Show("Error in cls_LDraw_Line in ReverseWinding" & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub
Reply
« Next Oldest | Next Newest »



Messages In This Thread
Re: Writing .dat to .obj converter in JS, but having BFC problems - by Michael Heidemann - 2012-12-30, 21:32

Forum Jump:


Users browsing this thread: 1 Guest(s)