public PolyTubeSO BuildSO(SOMaterial material, float scale = 1.0f) { Vector3d vCenter = curve.GetBoundingBox().Center; DCurve3 shifted = new DCurve3(curve); for (int i = 0; i < shifted.VertexCount; ++i) { shifted[i] -= vCenter; } Frame3f shiftedFrame = new Frame3f((Vector3f)vCenter, Quaternionf.Identity); PolyTubeSO so = new PolyTubeSO() { Curve = shifted, Polygon = polygon }; so.Create(material); so.SetLocalFrame(shiftedFrame, CoordSpace.WorldCoords); return(so); }