Ruby API to Google SketchUp의 기능은 open_file
이지만, close_file
기능을 찾을 수 없습니다. 많은 파일을 일괄 처리해야하기 때문에 다음 파일로 넘어 가기 전에 각 파일을 닫고 싶습니다. 그렇지 않으면 프로그램이 메모리 소모로 인해 충돌합니다.Google SketchUp 닫기 파일
SketchUp 파일을 프로그래밍 방식으로 닫는 가장 좋은 방법은 무엇입니까?
Mac OS X을 사용하고 있으며 AppleScript 기능을 사용하여 창을 닫을 신호를 보내고 있습니다.
편집
은 지금까지 열매를 맺지 증명 몇 가지 방법을 고려하고있다.
- this question에 설명 된대로 appscript Ruby gem을 사용합니다. 여기서 문제는 I cannot get SketchUp to recognize my installed gems입니다.
유사한 비슷한 맥락에서 나는 창을 닫기 위해 osascript (셸에서 AppleScripts를 실행하는 bash 프로그램)을 사용하려고합니다.
% X [osascript -e '응용 프로그램 "스케치"창 1을 닫에게']
퍼센트 X [osascript : 그건 내가 다음 중 하나를 사용하여 스케치의 루비 콘솔 창에서 쉘에게 전화입니다 -e "어플리케이션"스케치 "윈도우 (1)를 닫는에게 '&]
퍼센트 X [osascript -e] 어플리케이션"스케치 "모든 윈도우를 닫에게'
% X [-e '애플리케이션에게 osascript 모든 창을 닫으려면 "SketchUp"&]
이 두 번째 방법을 시도 할 때마다 SketchUp이 고정됩니다. 그러나 이 명령을 IRB에서 실행하거나 SketchUp 외부의 Bash 프롬프트에서 직접 실행하면 원하는 동작이 나타납니다. 모델 창이 닫히고 (우연히도 Ruby 콘솔 창이 열린 상태로 유지됩니다.)
각 모델을 처리하기 위해 슬레이브 스크립트를 시작하는 마스터 스크립트가 있어야합니다. 슬레이브는 마스터가 대기하는 동안 Google SketchUp 프로그램 내에서 실행됩니다. 슬레이브가 완료되면 마스터에 신호를 보내고 마스터는 SketchUp 파일을 닫습니다. 이 프로세스 간 통신을 수행하기 위해 drb을 사용해 보았습니다. 지속적으로 신호 때이 애플 스크립트를 사용하여 구글 스케치 업 창을 닫 실행하는 별도의 프로세스를 갖는
Error: LoadError: (eval):5:in 'require': no such file to load -- drb
편집 2
: 나는 SketchUp을 내 drb
을 필요로 할 때 그러나, 다음과 같은 메시지가 뜹니다 여러 가지 이유로 서투른입니다. 첫째, Sketchup 창을 닫을 때 별도의 프로세스를 사용해야하는 것은 바람직하지 않습니다. 둘째, 외부 스크립트와 통신하는 유일한 효과적인 방법은 파일을 만드는 것입니다.이 방법은 낭비적이고 디스크 액세스가 속도를 저하시킬 수 있습니다.
그러나 가장 심각한 문제는 Sketchup이 AppleScript 명령에 응답하는 속도가 느리다는 것입니다.꽤 계산 집약적 인 스크립트가 Sketchup에서 실행 중이며 AppleScript 응답이 굶주린 것처럼 보입니다. 즉, Windows가 닫히기 전에 oscript가 시간 초과됩니다. Sketchup은 Sketchup에 계산 중심의 스크립트 실행을 일시 중지하는 대화 상자 프롬프트가있을 때만 AppleScript에 응답합니다.
EDIT 3
내가 대화 상자를 표시하여 스크립트의 실행을 일시 중지 내 close_file
기능을 수정했습니다. 이것은 본질적으로 현재의 thread를 산출하고 애플 스크립트 실행 명령에 응답하는 스레드 수 :
def close_file()
f = '/temp/mutex.txt' # for finer control, use different mutex for each window you want closed
File.new(f, 'w').close
result = UI.messagebox "Click OK when window has closed."
end
그런 다음 추가해야합니다 AppleScript를 통해 창을 닫 별도의 루비 스크립트 대화 상자에서 "확인"을 클릭합니다. AppleScript는 다음과 같습니다 :
tell application "System Events"
tell process "SketchUp"
set frontmost to true
keystroke return
end tell
end tell
이 수정은 개선 된 기능입니다. EDIT 2에서 언급 한 "가장 심각한 문제"를 수정하지만 다른 문제는 남아 있습니다.
AppleScript 편집기를 사용하여 스크립트를'/ temp/closeWindow.scpt'라는 파일에 저장했습니다. 그런 다음 Sketchup과 Sketchup에서'% x [osascript /temp/closeWindow.scpt]'를 실행 해 보았습니다. Sketchup의 루비 콘솔에서 창을 닫는 AppleScript를 실행할 수있는 버전은 무엇입니까? – dsg