728x90
IntPtr를 이용하여 FocalPoint 얻기 + IntPtr -> Double[] 값 복사하기
double[] ZOOT = new double[3]; int s = Marshal.SizeOf(ZOOT[0]) * ZOOT.Length; System.IntPtr p = Marshal.AllocHGlobal(s); ren1.GetActiveCamera().GetFocalPoint(p); Marshal.Copy(p, ZOOT, 0, ZOOT.Length);
double[] ZOOT = new double[3];// (3);// { 100, 100, 100 }; int s = Marshal.SizeOf(ZOOT[0]) * ZOOT.Length; System.IntPtr p = Marshal.AllocHGlobal(s); Marshal.Copy(ZOOT, 0, p, ZOOT.Length); ren1.GetActiveCamera().SetFocalPoint(p);
/// 변수 선언 double[] fpD = new double[3]; double[] posD = new double[3]; int fps = Marshal.SizeOf(fpD[0]) * fpD.Length; IntPtr fpP = Marshal.AllocHGlobal(fps); ren1.GetActiveCamera().GetFocalPoint(fpP); Marshal.Copy(fpP, fpD, 0, fpD.Length); Console.WriteLine("[{0}] fpD : {1} {2} {3}\n", fpP, fpD[0], fpD[1], fpD[2]); ren1.GetActiveCamera().GetPosition(fpP); Marshal.Copy(fpP, posD, 0, posD.Length); Console.WriteLine("[{0}] posD :{1} {2} {3} \n", fpP, posD[0], posD[1], posD[2]); /// IntPtr를 공유해도 괜찮음. ren1.GetActiveCamera().GetFocalPoint(fpP); Marshal.Copy(fpP, fpD, 0, fpD.Length); Console.WriteLine("[{0}] fpD : {1} {2} {3}\n", fpP, fpD[0], fpD[1], fpD[2]); /// Marshal.Copy 는 데이터 복사가 됨 확인 fpD[0] = 100; fpD[1] = 0; fpD[2] = -100; double[] chkD = new double[3]; ren1.GetActiveCamera().GetFocalPoint(fpP); Marshal.Copy(fpP, chkD, 0, chkD.Length); Console.WriteLine("[{0}] chkD : {1} {2} {3}\n", fpP, chkD[0], chkD[1], chkD[2]); /// Reference 사용에 대한 메모리 공유 여부 확인 double[] refD = new double[3]; ren1.GetActiveCamera().GetFocalPoint(ref refD[0], ref refD[1], ref refD[2]); Console.WriteLine("[{0}] refD : {1} {2} {3}\n", fpP, refD[0], refD[1], refD[2]); /// Reference 주소 값의 값이 변경되지 않음. refD[0] = 100; refD[1] = 0; refD[2] = -100; double[] chkRefD = ren1.GetActiveCamera().GetFocalPoint(); Console.WriteLine("[{0}] chkRefD : {1} {2} {3}\n", fpP, chkRefD[0], chkRefD[1], chkRefD[2]);
728x90
728x90