Guest User

Untitled

a guest
Jul 21st, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.87 KB | None | 0 0
  1. // Illustrator のスクリプトで、
  2. // 選択範囲を Array で設定できるオブジェクト数の上限は1000
  3.  
  4. // 検証
  5. function test_1001_objects(){
  6. // あらかじめ 1001 個のオブジェクトを選択しておく
  7. var r = activeDocument.selection;
  8. alert(activeDocument.selection.length); // 1001
  9. alert(r.length); // 1001
  10.  
  11. activeDocument.selection = r;
  12. // ... しばらく待つ ...
  13. alert(activeDocument.selection.length); // 1000
  14. // 最背面のオブジェクトが選択されていなかった
  15. }
  16.  
  17. // これを回避する方法の1つは selected のプロパティを使うこと。
  18. // この方法で 10000個のパスが選択できた。
  19.  
  20. function test_select_with_property(){
  21. activeDocument.pageItems[0].selected = true;
  22. }
  23.  
  24. // 選択可能数の上限がよくわからないので、安全のため検証処理を入れたりするといいのかも。
  25.  
  26. function test_warning(){
  27. if(選択されるべき数 != activeDocument.selection.length){
  28. alert("スクリプトで選択可能なオブジェクト数の上限を超えているようです云々");
  29. }
  30. }
  31.  
  32. // 配列で設定したほうが速ければ配列を使う手もあるが、時間はほとんど変わらないみたいだ。
  33.  
  34. function test_time_select_with_property(){
  35. var items = activeDocument.pageItems; // 1000個
  36. var timer = new TimeChecker();
  37.  
  38. for(var i = 0, iEnd = items.length; i < iEnd; i++){
  39. items[i].selected = true;
  40. }
  41.  
  42. alert(timer.getResult()); // 27.465s
  43. }
  44.  
  45. function test_time_select_with_array(){
  46. var items = activeDocument.pageItems; // 1000個
  47. var r = [];
  48. for(var i = 0, iEnd = items.length; i < iEnd; i++){
  49. r.push(items[i]);
  50. }
  51.  
  52. var timer = new TimeChecker();
  53. activeDocument.selection = r;
  54.  
  55. alert(timer.getResult()); // 28.590s
  56. }
  57.  
  58. // 選択すべきオブジェクトを配列に入れておいて、
  59. // 処理が最後まで正常終了した後で現在の選択範囲を解除して、
  60. // ループを回してプロパティで選択する。
  61. // こうすると途中でエラーが起こった場合にスクリプト実行前の
  62. // 選択範囲を維持できるのでいいかもしれない。
  63. // // 配列に入れられる数の上限はいくつなんだろうね。
  64.  
  65. // 以上です。
  66. // ----
  67. // 時間計測用
  68. var TimeChecker = function(){
  69. this.start_time = new Date();
  70.  
  71. this.getResult = function(){
  72. var stop_time = new Date();
  73. var ms = stop_time.getTime() - this.start_time.getTime();
  74. var hours = Math.floor(ms / (60 * 60 * 1000));
  75. ms -= (hours * 60 * 60 * 1000);
  76. var minutes = Math.floor(ms / (60 * 1000));
  77. ms -= (minutes * 60 * 1000);
  78. var seconds = Math.floor(ms / 1000);
  79. ms -= seconds * 1000;
  80. return ("(" + hours + "h " + minutes + "m " + seconds + "s " + ms + ")");
  81. }
  82. }
Add Comment
Please, Sign In to add comment