<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Эффективная работа в Adobe InDesign &#187; Скриптинг</title>
	<atom:link href="http://adobeindesign.ru/rubrica/scripting/feed/" rel="self" type="application/rss+xml" />
	<link>http://adobeindesign.ru</link>
	<description>Приемы работы, хитрости и секреты, скрипты, плагины, автоматизация верстки</description>
	<lastBuildDate>Sun, 13 May 2012 12:29:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Свойство geometricBounds, единицы измерения</title>
		<link>http://adobeindesign.ru/2012/04/25/svojstvo-geometricbounds/</link>
		<comments>http://adobeindesign.ru/2012/04/25/svojstvo-geometricbounds/#comments</comments>
		<pubDate>Tue, 24 Apr 2012 22:29:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Скриптинг]]></category>

		<guid isPermaLink="false">http://adobeindesign.ru/?p=10070</guid>
		<description><![CDATA[Свойство geometricBounds является одним из самых употребительных при решении задач автоматизации верстки в Индизайне при программировании на языке JavaScript.  Оно определяет координаты объектов на полосах издания. Представляет собой массив, состоящий из 4-х элементов строкового или числового типа, который содержит координаты Х и Y верхнего левого и правого нижнего углов какого-либо объекта (см. рис.).

Например, координаты можно задать так:

with&#40;myTextFrame&#41;&#123;
geometricBounds = &#91;&#34;61p&#34;, &#34;4p&#34;, &#34;62p&#34;, &#34;45p&#34;&#93;;
&#125;

или при создании нового объекта в в составе метода add()

var myTextFrame = textFrames.add&#40;&#123;geometricBounds:&#91;&#34;0pt&#34;, &#34;0pt&#34;, &#34;100pt&#34;, &#34;100pt&#34;&#93;&#125;&#41;

Здесь задание координат Y1, X1, Y2, X2 производится при помощи массива из четырех членов. ...]]></description>
			<content:encoded><![CDATA[<p>Свойство <strong>geometricBounds</strong> является одним из самых употребительных при решении задач автоматизации верстки в Индизайне при программировании на языке JavaScript.  Оно определяет координаты объектов на полосах издания. Представляет собой массив, состоящий из 4-х элементов строкового или числового типа, который содержит координаты Х и Y верхнего левого и правого нижнего углов какого-либо объекта (см. рис.).<span id="more-10070"></span></p>
<p><a href="http://adobeindesign.ru/wp-content/uploads/geometricBounds1.png" rel="lightbox[10070]"><img class="alignnone size-large wp-image-10071" title="geometricBounds1" src="http://adobeindesign.ru/wp-content/uploads/geometricBounds1-595x207.png" alt="" width="595" height="207" /></a></p>
<p>Например, координаты можно задать так:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">with</span><span style="color: #009900;">&#40;</span>myTextFrame<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
geometricBounds <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;61p&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;4p&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;62p&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;45p&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>или при создании нового объекта в в составе метода <strong>add()</strong></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> myTextFrame <span style="color: #339933;">=</span> textFrames.<span style="color: #660066;">add</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>geometricBounds<span style="color: #339933;">:</span><span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;0pt&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;0pt&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;100pt&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;100pt&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span></pre></div></div>

<p>Здесь задание координат <strong>Y1, X1, Y2, X2</strong> производится при помощи массива из четырех членов. В нашем случае это четыре строки, но чаще используются числа.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">geometricBounds <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #CC0000;">25</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">40</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">100.5</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">80.25</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Заметьте, что первой координатой в паре X-Y является координата Y. Следует также помнить, что в качестве разделителя между целой и дробной частью в числовых единицах измерения используется <strong>точка</strong>, а не запятая. Начинающие разработчики часто набивают себе шишки на этом. Возможно также задание единиц измерения, где в качестве разделителя между целой и дробной частью стоит единица измерения, напр., 1p6 т.е. 1 пика + 6 пунктов.<br />
Если при задании geometricBounds не указаны никакие единицы измерения, например:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">geometricBounds <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span><span style="color: #CC0000;">72</span><span style="color: #339933;">,</span><span style="color: #CC0000;">72</span><span style="color: #009900;">&#93;</span></pre></div></div>

<p>то при выполнении скрипта InDesign будет использовать те единицы измерения, которые сейчас установлены для документа.<br />
В скриптах единицы измерения задаются в установках документа <strong>viewPreferences</strong>. Для этого используется следующий код:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">myDoc <span style="color: #339933;">=</span> app.<span style="color: #660066;">activedocument</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">// задаем единицы измерения picas</span>
<span style="color: #000066; font-weight: bold;">with</span> <span style="color: #009900;">&#40;</span>myDoc.<span style="color: #660066;">viewPreferences</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	horizontalMeasurementUnits <span style="color: #339933;">=</span> MeasurementUnits.<span style="color: #660066;">picas</span><span style="color: #339933;">;</span>
	verticalMeasurementUnits <span style="color: #339933;">=</span> MeasurementUnits.<span style="color: #660066;">picas</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Здесь <strong>horizontalMeasurementUnits</strong> &#8211; единицы измерения для горизонтальной шкалы, <strong>verticalMeasurementUnits</strong> &#8211; для вертикальной.<br />
Если надо задать другие единицы измерения, то внутри конструкции <strong>with</strong> используйте строки:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">horizontalMeasurementUnits <span style="color: #339933;">=</span> MeasurementUnits.<span style="color: #660066;">points</span><span style="color: #339933;">;</span>
verticalMeasurementUnits <span style="color: #339933;">=</span> MeasurementUnits.<span style="color: #660066;">points</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//или</span>
horizontalMeasurementUnits <span style="color: #339933;">=</span> MeasurementUnits.<span style="color: #660066;">inches</span><span style="color: #339933;">;</span>
verticalMeasurementUnits <span style="color: #339933;">=</span> MeasurementUnits.<span style="color: #660066;">inches</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//или</span>
horizontalMeasurementUnits <span style="color: #339933;">=</span> MeasurementUnits.<span style="color: #660066;">inchesDecimal</span><span style="color: #339933;">;</span>
verticalMeasurementUnits <span style="color: #339933;">=</span> MeasurementUnits.<span style="color: #660066;">inchesDecimal</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//или</span>
horizontalMeasurementUnits <span style="color: #339933;">=</span> MeasurementUnits.<span style="color: #660066;">millimeters</span><span style="color: #339933;">;</span>
verticalMeasurementUnits <span style="color: #339933;">=</span> MeasurementUnits.<span style="color: #660066;">millimeters</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//или</span>
horizontalMeasurementUnits <span style="color: #339933;">=</span> MeasurementUnits.<span style="color: #660066;">centimeters</span><span style="color: #339933;">;</span>
verticalMeasurementUnits <span style="color: #339933;">=</span> MeasurementUnits.<span style="color: #660066;">centimeters</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//или</span>
horizontalMeasurementUnits <span style="color: #339933;">=</span> MeasurementUnits.<span style="color: #660066;">ciceros</span><span style="color: #339933;">;</span>
verticalMeasurementUnits <span style="color: #339933;">=</span> MeasurementUnits.<span style="color: #660066;">ciceros</span><span style="color: #339933;">;</span></pre></div></div>

<p>Если вы хотите использовать в скрипте единицы измерения, отличные от тех, которые в настоящий момент использует InDesign, то хорошим тоном считается по окончании работы скрипта вернуть всё на место, как было до запуска скрипта. Фирма Adobe Systems в составе демонстрационных скриптов приводит пример этого:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"> <span style="color: #006600; font-style: italic;">//ResetMeasurementUnits.jsx</span>
<span style="color: #003366; font-weight: bold;">var</span> myDocument <span style="color: #339933;">=</span> app.<span style="color: #660066;">activeDocument</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">with</span> <span style="color: #009900;">&#40;</span>myDocument.<span style="color: #660066;">viewPreferences</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #006600; font-style: italic;">// Сохраняем старые единицы измерения в переменных myOldXUnits, myOldYUnits</span>
	<span style="color: #003366; font-weight: bold;">var</span> myOldXUnits <span style="color: #339933;">=</span> horizontalMeasurementUnits<span style="color: #339933;">;</span>
	<span style="color: #003366; font-weight: bold;">var</span> myOldYUnits <span style="color: #339933;">=</span> verticalMeasurementUnits<span style="color: #339933;">;</span>
	<span style="color: #006600; font-style: italic;">// Устанавливаем новые единицы измерения</span>
	horizontalMeasurementUnits <span style="color: #339933;">=</span> MeasurementUnits.<span style="color: #660066;">points</span><span style="color: #339933;">;</span>
	verticalMeasurementUnits <span style="color: #339933;">=</span> MeasurementUnits.<span style="color: #660066;">points</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #006600; font-style: italic;">//----------------------------------------------------------</span>
<span style="color: #006600; font-style: italic;">// Основной код скрипта</span>
<span style="color: #006600; font-style: italic;">//----------------------------------------------------------</span>
<span style="color: #006600; font-style: italic;">// Возвращаем Индизайну старые единицы измерения</span>
<span style="color: #000066; font-weight: bold;">with</span> <span style="color: #009900;">&#40;</span>myDocument.<span style="color: #660066;">viewPreferences</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #000066; font-weight: bold;">try</span><span style="color: #009900;">&#123;</span>
		horizontalMeasurementUnits <span style="color: #339933;">=</span> myOldXUnits<span style="color: #339933;">;</span>
		verticalMeasurementUnits <span style="color: #339933;">=</span> myOldYUnits<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000066; font-weight: bold;">catch</span><span style="color: #009900;">&#40;</span>myError<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Could not reset custom measurement units.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Определять и задавать единицы измерения можно с использованием прототипов:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> myDocument <span style="color: #339933;">=</span> app.<span style="color: #660066;">activeDocument</span><span style="color: #339933;">;</span>
myDocument.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">setUnitsTo</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>newUnits<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
<span style="color: #003366; font-weight: bold;">var</span> arrUnits <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>newUnits.<span style="color: #660066;">length</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">?</span> newUnits <span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>newUnits<span style="color: #339933;">,</span>newUnits<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">with</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">viewPreferences</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
	horizontalMeasurementUnits <span style="color: #339933;">=</span> arrUnits<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	verticalMeasurementUnits <span style="color: #339933;">=</span> arrUnits<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
Document.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">getUnits</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
<span style="color: #000066; font-weight: bold;">return</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#91;</span>
	<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">viewPreferences</span>.<span style="color: #660066;">horizontalMeasurementUnits</span><span style="color: #339933;">,</span>
	<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">viewPreferences</span>.<span style="color: #660066;">verticalMeasurementUnits</span>
	<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>В тексте программного модуля затем формируется массив из двух значений и устанавливаются новые единицы измерения</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> units <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">activeDocument</span>.<span style="color: #660066;">getUnits</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
app.<span style="color: #660066;">activeDocument</span>.<span style="color: #660066;">setUnitsTo</span><span style="color: #009900;">&#40;</span>MeasurementUnits.<span style="color: #660066;">points</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>В конце работы программы возвращаются первоначальные единицы измерения:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">app.<span style="color: #660066;">activeDocument</span>.<span style="color: #660066;">setUnitsTo</span><span style="color: #009900;">&#40;</span>units<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>&nbsp;</p>
<h3>О чем молчит Adobe</h3>
<p>Если требуется рассчитать <strong>geоmetricBounds</strong> для текстового фрейма, у которого размер равен размеру страницы, то можно воспользоваться функцией, которую приводит фирма Adobe в своих примерах:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">myDocument <span style="color: #339933;">=</span> app.<span style="color: #660066;">activeDocument</span>
<span style="color: #000066; font-weight: bold;">with</span><span style="color: #009900;">&#40;</span>myDocument.<span style="color: #660066;">documentPreferences</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
<span style="color: #003366; font-weight: bold;">var</span> myPageWidth <span style="color: #339933;">=</span> pageWidth<span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> myPageHeight <span style="color: #339933;">=</span> pageHeight<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #003366; font-weight: bold;">var</span> myPage <span style="color: #339933;">=</span> app.<span style="color: #660066;">activeWindow</span>.<span style="color: #660066;">activePage</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> myTextFrame <span style="color: #339933;">=</span> myPage.<span style="color: #660066;">textFrames</span>.<span style="color: #660066;">add</span><span style="color: #009900;">&#40;</span>
<span style="color: #009900;">&#123;</span>
geometricBounds<span style="color: #339933;">:</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> myPageHeight<span style="color: #339933;">,</span> myPageWidth<span style="color: #009900;">&#93;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Конечно редко нужно создавать текстовый фрейм размером на всю страницу. Гораздо чаще требуется ограничить создаваемый фрейм полями страницы. Рассмотрим функцию <strong>myGetBounds()</strong> (демонстрационный пример Adobe), которая рассчитывает <strong>geometricBounds</strong> в этом случае.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> myDocument <span style="color: #339933;">=</span> app.<span style="color: #660066;">activeDocument</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> myTextFrame <span style="color: #339933;">=</span> myPage.<span style="color: #660066;">textFrames</span>.<span style="color: #660066;">add</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>geometricBounds<span style="color: #339933;">:</span>myGetBounds<span style="color: #009900;">&#40;</span>myDocument<span style="color: #339933;">,</span> myPage<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> contents<span style="color: #339933;">:</span>TextFrameContents.<span style="color: #660066;">placeholderText</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>myDocument<span style="color: #339933;">,</span> myPage<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
<span style="color: #003366; font-weight: bold;">var</span> myPageWidth <span style="color: #339933;">=</span> myDocument.<span style="color: #660066;">documentPreferences</span>.<span style="color: #660066;">pageWidth</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> myPageHeight <span style="color: #339933;">=</span> myDocument.<span style="color: #660066;">documentPreferences</span>.<span style="color: #660066;">pageHeight</span>
<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>myPage.<span style="color: #660066;">side</span> <span style="color: #339933;">==</span> PageSideOptions.<span style="color: #660066;">leftHand</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
<span style="color: #003366; font-weight: bold;">var</span> myX2 <span style="color: #339933;">=</span> myPage.<span style="color: #660066;">marginPreferences</span>.<span style="color: #660066;">left</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> myX1 <span style="color: #339933;">=</span> myPage.<span style="color: #660066;">marginPreferences</span>.<span style="color: #660066;">right</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000066; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span>
<span style="color: #003366; font-weight: bold;">var</span> myX1 <span style="color: #339933;">=</span> myPage.<span style="color: #660066;">marginPreferences</span>.<span style="color: #660066;">left</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> myX2 <span style="color: #339933;">=</span> myPage.<span style="color: #660066;">marginPreferences</span>.<span style="color: #660066;">right</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #003366; font-weight: bold;">var</span> myY1 <span style="color: #339933;">=</span> myPage.<span style="color: #660066;">marginPreferences</span>.<span style="color: #660066;">top</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> myX2 <span style="color: #339933;">=</span> myPageWidth <span style="color: #339933;">-</span> myX2<span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> myY2 <span style="color: #339933;">=</span> myPageHeight <span style="color: #339933;">-</span> myPage.<span style="color: #660066;">marginPreferences</span>.<span style="color: #660066;">bottom</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #009900;">&#91;</span>myY1<span style="color: #339933;">,</span> myX1<span style="color: #339933;">,</span> myY2<span style="color: #339933;">,</span> myX2<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Как видите, для правильного расчета координат в скрипте используются свойства по определению положения страницы на развороте &#8211; правая или левая (.leftHand). Но тем не менее здесь скрыт подводный камень, о котором Adobe не сказала ни слова. Засада в том, что функция <strong>myGetBounds()</strong> правильно определяет массив координат <strong>geometricBounds</strong> только в том случае, если у каждой страницы своё начало координат и своя координатная система. Если же система координат общая для всего разворота, то рассчитанные координаты для правой страницы будут неверны, и создаваемый текстовый фрейм вместо правой страницы окажется на левой. Странно, что этот факт нигде не отражен в примерах скриптов фирмы Adobe.<br />
Для того, чтобы эта функция всегда правильно работала, перед её вызовом надо установить отдельную координатную систему на каждую страницу разворота</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">myDocument.<span style="color: #660066;">viewPreferences</span>.<span style="color: #660066;">rulerOrigin</span> <span style="color: #339933;">=</span> RulerOrigin.<span style="color: #660066;">pageOrigin</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> myTextFrame <span style="color: #339933;">=</span> myPage.<span style="color: #660066;">textFrames</span>.<span style="color: #660066;">add</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>geometricBounds<span style="color: #339933;">:</span>myGetBounds<span style="color: #009900;">&#40;</span>myDocument<span style="color: #339933;">,</span> myPage<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> contents<span style="color: #339933;">:</span>TextFrameContents.<span style="color: #660066;">placeholderText</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Если вы намерены менять координатную систему, то по окончании работы скрипта будет благородно вернуть её назад:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> oldRuler <span style="color: #339933;">=</span> myDocument.<span style="color: #660066;">viewPreferences</span>.<span style="color: #660066;">rulerOrigin</span><span style="color: #339933;">;</span>
myDocument.<span style="color: #660066;">viewPreferences</span>.<span style="color: #660066;">rulerOrigin</span> <span style="color: #339933;">=</span> RulerOrigin.<span style="color: #660066;">PAGE_ORIGIN</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> myTextFrame <span style="color: #339933;">=</span> myPage.<span style="color: #660066;">textFrames</span>.<span style="color: #660066;">add</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>geometricBounds<span style="color: #339933;">:</span>myGetBounds<span style="color: #009900;">&#40;</span>myDocument<span style="color: #339933;">,</span> myPage<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> contents<span style="color: #339933;">:</span>TextFrameContents.<span style="color: #660066;">placeholderText</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">// выполняем скрипт</span>
<span style="color: #006600; font-style: italic;">//...............</span>
<span style="color: #006600; font-style: italic;">// Возвращаем первоначальную систему координат</span>
myDocument.<span style="color: #660066;">viewPreferences</span>.<span style="color: #660066;">rulerOrigin</span> <span style="color: #339933;">=</span> oldRuler<span style="color: #339933;">;</span></pre></div></div>

<p>Вы уже заметили использование параметра <strong>RulerOrigin.PAGE_ORIGIN</strong>? Этим параметром произведена установка одного из типов координатной системы. В Индизайне их три: spread, page, spine. Соответственно в объектной модели (раздел Preference &gt; viewPreferences) свойство <strong>ruleOrigin</strong> может принимать значения RulerOrigin.SPREAD_ORIGIN, RulerOrigin.PAGE_ORIGIN, RulerOrigin.SPINE_ORIGIN.</p>
<p>Второй вариант получения всегда правильных координат заключается в модификации функции <strong>myGetBounds()</strong>, где происходит разветвление расчета в зависимости от установленной в текущий момент системы координат:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> myGetBounds<span style="color: #009900;">&#40;</span>myDocument<span style="color: #339933;">,</span> myPage<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
<span style="color: #003366; font-weight: bold;">var</span> myPageWidth <span style="color: #339933;">=</span> myDocument.<span style="color: #660066;">documentPreferences</span>.<span style="color: #660066;">pageWidth</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> myPageHeight <span style="color: #339933;">=</span> myDocument.<span style="color: #660066;">documentPreferences</span>.<span style="color: #660066;">pageHeight</span><span style="color: #339933;">;</span>
myRuler <span style="color: #339933;">=</span> myDocument.<span style="color: #660066;">viewPreferences</span>.<span style="color: #660066;">rulerOrigin</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>myPage.<span style="color: #660066;">side</span> <span style="color: #339933;">==</span> PageSideOptions.<span style="color: #660066;">leftHand</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
<span style="color: #003366; font-weight: bold;">var</span> myX2 <span style="color: #339933;">=</span> myPage.<span style="color: #660066;">marginPreferences</span>.<span style="color: #660066;">left</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> myX1 <span style="color: #339933;">=</span> myPage.<span style="color: #660066;">marginPreferences</span>.<span style="color: #660066;">right</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000066; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span>
<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>myRuler <span style="color: #339933;">==</span> RulerOrigin.<span style="color: #660066;">pageOrigin</span> <span style="color: #339933;">||</span> myRuler <span style="color: #339933;">==</span> RulerOrigin.<span style="color: #660066;">spineOrigin</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
<span style="color: #003366; font-weight: bold;">var</span> myX1 <span style="color: #339933;">=</span> myPage.<span style="color: #660066;">marginPreferences</span>.<span style="color: #660066;">left</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> myX2 <span style="color: #339933;">=</span> myPage.<span style="color: #660066;">marginPreferences</span>.<span style="color: #660066;">right</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000066; font-weight: bold;">else</span> <span style="color: #006600; font-style: italic;">// система координат общая для разворота</span>
<span style="color: #009900;">&#123;</span>
<span style="color: #003366; font-weight: bold;">var</span> myX1 <span style="color: #339933;">=</span> myPageWidth <span style="color: #339933;">+</span> myPage.<span style="color: #660066;">marginPreferences</span>.<span style="color: #660066;">left</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> myX2 <span style="color: #339933;">=</span> myPageWidth <span style="color: #339933;">+</span> myPage.<span style="color: #660066;">marginPreferences</span>.<span style="color: #660066;">right</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #003366; font-weight: bold;">var</span> myY1 <span style="color: #339933;">=</span> myPage.<span style="color: #660066;">marginPreferences</span>.<span style="color: #660066;">top</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> myX2 <span style="color: #339933;">=</span> myPageWidth <span style="color: #339933;">-</span> myX2<span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> myY2 <span style="color: #339933;">=</span> myPageHeight <span style="color: #339933;">-</span> myPage.<span style="color: #660066;">marginPreferences</span>.<span style="color: #660066;">bottom</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #009900;">&#91;</span>myY1<span style="color: #339933;">,</span> myX1<span style="color: #339933;">,</span> myY2<span style="color: #339933;">,</span> myX2<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>В этом случае менять и возвращать первоначальную координатную систему не требуется. Теоретически этот способ более медленный, но вряд ли на практике вы это заметите.</p>
]]></content:encoded>
			<wfw:commentRss>http://adobeindesign.ru/2012/04/25/svojstvo-geometricbounds/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Метод duplicate для текстового фрейма</title>
		<link>http://adobeindesign.ru/2012/01/29/metod-duplicate-dlya-tekstovogo-frejma/</link>
		<comments>http://adobeindesign.ru/2012/01/29/metod-duplicate-dlya-tekstovogo-frejma/#comments</comments>
		<pubDate>Sat, 28 Jan 2012 21:08:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Скриптинг]]></category>

		<guid isPermaLink="false">http://adobeindesign.ru/?p=9796</guid>
		<description><![CDATA[Метод duplicate для текстового фрейма  нет так прост, как может показаться на первый взгляд. В своём активе он имеет два параметра и второй параметр имеет двоякое значение в зависимости от того, применяется или нет первый. Начинающим изучать программирование будет полезно ознакомиться с этим подробнее и на русском языке.
Итак,
Метод duplicate()
Синтаксис: dublicate(to, by);
Каждый из параметров может быть опущен, и оба параметра могут быть опущены одновременно. Первый параметр, &#171;to&#171;, обозначает место, куда будет копироваться фрейм. Это может быть разворот, страница, слой. Понимание параметра &#171;by&#187; немного сложнее. Он состоит из двух значений (массив), относящихся ...]]></description>
			<content:encoded><![CDATA[<p>Метод <strong>duplicate</strong> для текстового фрейма  нет так прост, как может показаться на первый взгляд. В своём активе он имеет два параметра и второй параметр имеет двоякое значение в зависимости от того, применяется или нет первый. Начинающим изучать программирование будет полезно ознакомиться с этим подробнее и на русском языке.<span id="more-9796"></span></p>
<p>Итак,</p>
<h3>Метод duplicate()</h3>
<p>Синтаксис: <strong>dublicate(to, by)</strong>;<br />
Каждый из параметров может быть опущен, и оба параметра могут быть опущены одновременно. Первый параметр, &laquo;<strong>to</strong>&laquo;, обозначает место, куда будет копироваться фрейм. Это может быть разворот, страница, слой. Понимание параметра &laquo;<strong>by</strong>&raquo; немного сложнее. Он состоит из двух значений (массив), относящихся к координатам осей <strong>x</strong> и <strong>y</strong>. Это могут быть как числа, так и строки, которыми задаются координаты.<br />
Возможны следующие варианты:<br />
а) если параметр &laquo;<strong>to</strong>&raquo; указан, то параметром &laquo;<strong>by</strong>&raquo; задается расположение нового текстового фрейма относительно старого. То есть величины сдвига по горизонтали и по вертикали.<br />
b) если параметр &laquo;<strong>to</strong>&raquo; опущен, параметр &laquo;<strong>by</strong>&raquo; задает абсолютные координаты <strong>x</strong>, <strong>y</strong> левого верхнего угла нового текстового фрейма.</p>
<p>Пример 1.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">myDoc <span style="color: #339933;">=</span> app.<span style="color: #006633;">documents</span>.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Создаем новый документ</span>
myPage <span style="color: #339933;">=</span> myDoc.<span style="color: #006633;">pages</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// При создании нового документа всегда есть одна страница</span>
myTextFrame <span style="color: #339933;">=</span> myPage.<span style="color: #006633;">textFrames</span>.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Добавляем на страницу текстовый фрейм</span>
myTextFrame.<span style="color: #006633;">geometricBounds</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">100</span>,<span style="color: #cc66cc;">100</span>,<span style="color: #cc66cc;">200</span>,<span style="color: #cc66cc;">200</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// текстовый фрейм располагаем по координатам [Y1,X1,Y2,X2]</span>
myTextFrame.<span style="color: #006633;">duplicate</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Дублируем текстовый фрейм</span></pre></div></div>

<p>В этом примере оба параметра опущены, в результате будет создан новый текстовый фрейм на той же странице, такого же размера и расположенный по таким же координатам, как и исходный текстовый фрейм.</p>
<p>Пример 2.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">myDoc <span style="color: #339933;">=</span> app.<span style="color: #006633;">documents</span>.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
myPage <span style="color: #339933;">=</span> myDoc.<span style="color: #006633;">pages</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
myTextFrame <span style="color: #339933;">=</span> myPage.<span style="color: #006633;">textFrames</span>.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
myTextFrame.<span style="color: #006633;">geometricBounds</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">100</span>,<span style="color: #cc66cc;">100</span>,<span style="color: #cc66cc;">200</span>,<span style="color: #cc66cc;">200</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
myTextFrame.<span style="color: #006633;">duplicate</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">20</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>В этом примере параметр &laquo;<strong>to</strong>&raquo; опущен, так что массивом <strong>[10,20]</strong> задаются координаты верхнего левого угла x, y, и его <strong>geometricBounds</strong> будут [20,10,120,110]. Новый текстовый фрейм будет располагаться на той же странице, что и исходный, так как параметр &laquo;<strong>to</strong>&raquo; не задан.</p>
<p>Пример 3.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">myPage<span style="color: #339933;">=</span> app.<span style="color: #006633;">documents</span>.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">pages</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
myTextFrame <span style="color: #339933;">=</span> myPage.<span style="color: #006633;">textFrames</span>.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
myTextFrame.<span style="color: #006633;">geometricBounds</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span> <span style="color: #cc66cc;">100</span>,<span style="color: #cc66cc;">100</span>,<span style="color: #cc66cc;">200</span>,<span style="color: #cc66cc;">200</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">;</span>
myTextFrame.<span style="color: #006633;">duplicate</span><span style="color: #009900;">&#40;</span> myPage, <span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">20</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>В этом примере задан параметр &laquo;<strong>to</strong>&laquo;, это первая страница документа, значит числа второго параметра (те, что в квадратных скобках) будут задавать смещение нового текстового фрейма относительно исходного. Новыми координатами будет массив <strong>geometricBounds</strong> [120,110,220,210];</p>
<p>Пример 4.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">myDoc <span style="color: #339933;">=</span> app.<span style="color: #006633;">documents</span>.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
myPage <span style="color: #339933;">=</span> myDoc.<span style="color: #006633;">pages</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
myTextFrame <span style="color: #339933;">=</span> myPage.<span style="color: #006633;">textFrames</span>.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
myTextFrame.<span style="color: #006633;">geometricBounds</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span> <span style="color: #cc66cc;">100</span>,<span style="color: #cc66cc;">100</span>,<span style="color: #cc66cc;">200</span>,<span style="color: #cc66cc;">200</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">;</span>
secondPage <span style="color: #339933;">=</span> myDoc.<span style="color: #006633;">pages</span>.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">;</span>
myTextFrame.<span style="color: #006633;">duplicate</span><span style="color: #009900;">&#40;</span> secondPage <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>В четвертом примере к документу добавляется ещё одна страница и в методе <strong>duplicate</strong> представлен только первый параметр, который указывает назначение копирования. Так как не указано местопожение текстового фрейма, то оно останется таким же как и у исходного фрейма, т.е. <strong>geometricBounds</strong> = [100,100,200,200]. Но на второй странице.</p>
<p>Пример 5.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">myDoc <span style="color: #339933;">=</span> app.<span style="color: #006633;">documents</span>.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
myPage <span style="color: #339933;">=</span> myDoc.<span style="color: #006633;">pages</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
myTextFrame <span style="color: #339933;">=</span> myPage.<span style="color: #006633;">textFrames</span>.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
myTextFrame.<span style="color: #006633;">geometricBounds</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span> <span style="color: #cc66cc;">100</span>,<span style="color: #cc66cc;">100</span>,<span style="color: #cc66cc;">200</span>,<span style="color: #cc66cc;">200</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">;</span>
secondPage <span style="color: #339933;">=</span> myDoc.<span style="color: #006633;">pages</span>.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">;</span>
myTextFrame.<span style="color: #006633;">duplicate</span><span style="color: #009900;">&#40;</span> secondPage, <span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">20</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Здесь задан параметр &laquo;пункт назначения&raquo; &#8211; <strong>secondPage</strong> (2-я страница документа), следовательно, вторым параметром метода <strong>duplicate</strong> задаётся смещение координат нового фрейма относительно исходного. И его <strong>geometricBounds</strong> будут&#8230; Впрочем сосчитайте сами и проверьте.</p>
]]></content:encoded>
			<wfw:commentRss>http://adobeindesign.ru/2012/01/29/metod-duplicate-dlya-tekstovogo-frejma/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Помещение иллюстраций в вёрстку при помощи скрипта</title>
		<link>http://adobeindesign.ru/2012/01/27/pomeshhenie-illyustracij-v-vyorstku-pri-pomoshhi-skripta/</link>
		<comments>http://adobeindesign.ru/2012/01/27/pomeshhenie-illyustracij-v-vyorstku-pri-pomoshhi-skripta/#comments</comments>
		<pubDate>Fri, 27 Jan 2012 09:39:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Скриптинг]]></category>

		<guid isPermaLink="false">http://adobeindesign.ru/?p=9781</guid>
		<description><![CDATA[На днях, делая очередной скрипт, долго ломал голову над какой-то непонятной ошибкой – программа отказывалась помещать картинку в фрейм. И пока докапывался, в чём был просчёт, просматривая другие подобные скрипты, сложилась краткая подборка решений, как инструментами скриптинга работать с картинками.
Помещение картинки в фрейм
Итак, мы хотим поместить картинку в фрейм 185х125 мм. Объявим размеры фрейма:

myFrameWidth = 185;
myFrameHeight =125;

(единица измерения не указывается, программа работает с текущими установками.)
Картинка ‘Закат.jpg’ размещена на диске С\: в каталоге tmp. Вот как надо указать доступ к ней:

myPict = &#34;/c/tmp/Закат.jpg&#34;

(Моя ошибка была в том, что потерялась наклонная черта после ...]]></description>
			<content:encoded><![CDATA[<p>На днях, делая очередной скрипт, долго ломал голову над какой-то непонятной ошибкой – программа отказывалась помещать картинку в фрейм. И пока докапывался, в чём был просчёт, просматривая другие подобные скрипты, сложилась краткая подборка решений, как инструментами скриптинга работать с картинками.<span id="more-9781"></span></p>
<h3><strong>Помещение картинки в фрейм</strong></h3>
<p>Итак, мы хотим поместить картинку в фрейм 185х125 мм. Объявим размеры фрейма:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">myFrameWidth <span style="color: #339933;">=</span> <span style="color: #CC0000;">185</span><span style="color: #339933;">;</span>
myFrameHeight <span style="color: #339933;">=</span><span style="color: #CC0000;">125</span><span style="color: #339933;">;</span></pre></div></div>

<p>(единица измерения не указывается, программа работает с текущими установками.)</p>
<p>Картинка ‘Закат.jpg’ размещена на диске С\: в каталоге tmp. Вот как надо указать доступ к ней:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">myPict <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;/c/tmp/Закат.jpg&quot;</span></pre></div></div>

<p>(Моя ошибка была в том, что потерялась наклонная черта после первой кавычки. И получил сообщение:<br />
<a href="http://adobeindesign.ru/wp-content/uploads/placeRis1.png" rel="lightbox[9781]"><img class="alignnone size-full wp-image-9782" title="placeRis1" src="http://adobeindesign.ru/wp-content/uploads/placeRis1.png" alt="" width="480" height="38" /></a><br />
Скрипт искал каталог С\tmp\ в папке «Мои документы»! )<br />
Добавляем документ с выключенной опцией ‘Facing Pages’ формата А4:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">app.<span style="color: #660066;">documentPreferences</span>.<span style="color: #660066;">facingPages</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> myDoc <span style="color: #339933;">=</span> app.<span style="color: #660066;">documents</span>.<span style="color: #660066;">add</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
myDoc.<span style="color: #660066;">documentPreferences</span>.<span style="color: #660066;">pageSize</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;A4&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<p>и для полноты освещения вопроса добавим еще один слой:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">myDoc.<span style="color: #660066;">layers</span>.<span style="color: #660066;">add</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Добавленный слой стал активным, т.е. с индексом 0. Программа сама присвоила ему имя ‘Layer 2’.<br />
Присвоим имя слою, что был при создании документа. Сейчас индекс этого слоя 1.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">myDoc.<span style="color: #660066;">layers</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#93;</span>.<span style="color: #000066;">name</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Нижний слой&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<p>В документе по умолчанию всегда есть первая страница, и пусть ссылка на неё будет myPage1.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> myPage1 <span style="color: #339933;">=</span> myDoc.<span style="color: #660066;">pages</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Поместим на эту страницу прямоугольник</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> myPicture <span style="color: #339933;">=</span> myPage1.<span style="color: #660066;">rectangles</span>.<span style="color: #660066;">add</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>и определим его габариты. Они определяются парами координат Y и X левого верхнего и правого нижнего углов фрейма.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">Ytop <span style="color: #339933;">=</span> <span style="color: #CC0000;">10</span><span style="color: #339933;">;</span>
Xtop <span style="color: #339933;">=</span> <span style="color: #CC0000;">15</span><span style="color: #339933;">;</span>
myPicture.<span style="color: #660066;">geometricBounds</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>Ytop<span style="color: #339933;">,</span> Xtop<span style="color: #339933;">,</span> Ytop <span style="color: #339933;">+</span> myFrameHeight<span style="color: #339933;">,</span> Xtop <span style="color: #339933;">+</span> myFrameWidth<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Поместим картинку в этот фрейм</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">myP <span style="color: #339933;">=</span> myPicture.<span style="color: #660066;">place</span><span style="color: #009900;">&#40;</span>File<span style="color: #009900;">&#40;</span>myPict<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>подгоним картинку пропорционально под размер фрейма</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">myPicture.<span style="color: #660066;">fit</span> <span style="color: #009900;">&#40;</span>FitOptions.<span style="color: #660066;">PROPORTIONALLY</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//и ставим её по центру</span>
myPicture.<span style="color: #660066;">fit</span><span style="color: #009900;">&#40;</span>FitOptions.<span style="color: #660066;">CENTER_CONTENT</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Вот что получилось:<br />
<a href="http://adobeindesign.ru/wp-content/uploads/placeRis2.png" rel="lightbox[9781]"><img class="alignnone size-large wp-image-9787" title="placeRis2" src="http://adobeindesign.ru/wp-content/uploads/placeRis2-595x330.png" alt="" width="595" height="330" /></a></p>
<p>В документе одна страница. Активен второй созданный слой <em><span style="color: #993366;">Layer2</span></em>. В палитре <strong>LAYERS</strong> этот слой отмечен красным цветом, поэтому контур фрейма с картинкой на этом слое тоже красного цвета. Картинка подогнана под размер фрейма и стоит по центру.</p>
<h3>Помещение картинки на странице</h3>
<p>Очевидно, что когда мы помещаем картинку в фрейм, он уже размещен на каком-то слое и имеет конкретные координаты. А можно поместить картинку на определенной странице в конкретный слой, и указать её координаты?<br />
Да, можно. Будет создан фрейм с размерами, равными помещаемой картинке.<br />
Добавляем в документ страницу, её имя будет <span style="color: #993366;">myPage2</span>:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> myPage2 <span style="color: #339933;">=</span> myDoc.<span style="color: #660066;">pages</span>.<span style="color: #660066;">add</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Вот такая запись поместит картинку myPict на страницу myPage2. Координаты X и Y левого верхнего угла в этом примере [15,35] в текущих единицах измерения, и слой указан не индексом, а его именем:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">myAnotherPict <span style="color: #339933;">=</span> myPage2.<span style="color: #660066;">place</span><span style="color: #009900;">&#40;</span>File<span style="color: #009900;">&#40;</span>myPict<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">15</span><span style="color: #339933;">,</span><span style="color: #CC0000;">35</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>myDoc.<span style="color: #660066;">layers</span>.<span style="color: #000066; font-weight: bold;">item</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Нижний слой&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></pre></div></div>

<h3>Выделение картинки в фрейме</h3>
<p>myAnotherPict — это объект Image. Чтобы добраться до фрейма, надо указать <span style="color: #993366;">myAnotherPict.parent</span>. Содержимое иллюстрационного фрейма — это первый и единственный объект массива <span style="color: #993366;"><strong>allGraphics[]</strong></span>.<br />
Такая строка выделит картинку в фрейме:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">myAnotherPict.<span style="color: #660066;">parent</span>.<span style="color: #660066;">allGraphics</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">select</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Вот что получилось:<br />
<a href="http://adobeindesign.ru/wp-content/uploads/placeRis3.png" rel="lightbox[9781]"><img class="alignnone size-large wp-image-9788" title="placeRis3" src="http://adobeindesign.ru/wp-content/uploads/placeRis3-595x446.png" alt="" width="595" height="446" /></a><br />
Выбрана вторая страница документа, активен «Нижний слой». Размеры созданного фрейма равны размерам рисунка. Выбран рисунок.</p>
<h3>Поворот картинки</h3>
<p>Подробную информацию, как в скрипте выполнять масштабирование, поворот и деформацию сдвигом можно найти в документе <strong>“Adobe InDesign CS3 Scripting: Working with Transformations in JavaScript”</strong>.<br />
Тут только пример, как применить сведения из этой книги к повороту объекта. Объект — это выделенный объект, в нашем случае помещенная в фрейм картинка.<br />
Идея всех таких преобразований — определить матрицу трансформации и опорную точку, относительно которой будет выполняться поворот, масштабирование, сдвиг.<br />
Определим матрицу поворота против часовой стрелки на 45 градусов:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> myRotateMatrix <span style="color: #339933;">=</span> app.<span style="color: #660066;">transformationMatrices</span>.<span style="color: #660066;">add</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>counterclockwiseRotationAngle<span style="color: #339933;">:</span><span style="color: #CC0000;">45</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>выделенный объект (он указывается как <span style="color: #000080;">app.selection[0]</span>), поворачивается относительно центральной точки в соответствии с установками матрицы поворота myRotatematrix:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">app.<span style="color: #660066;">selection</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">transform</span><span style="color: #009900;">&#40;</span>CoordinateSpaces.<span style="color: #660066;">pasteboardCoordinates</span><span style="color: #339933;">,</span> AnchorPoint.<span style="color: #660066;">centerAnchor</span><span style="color: #339933;">,</span> myRotateMatrix<span style="color: #009900;">&#41;</span></pre></div></div>

<p><a href="http://adobeindesign.ru/wp-content/uploads/placeRis4.png" rel="lightbox[9781]"><img class="alignnone size-large wp-image-9789" title="placeRis4" src="http://adobeindesign.ru/wp-content/uploads/placeRis4-543x600.png" alt="" width="543" height="600" /></a><br />
Курсором выделено и он оставлен на скриншоте, что угол поворота объекта отображается в панели измерений.</p>
<p style="text-align: left;">Вот, собственно, и весь опыт работы с иллюстрациями.<br />
А началось всё с потерянной наклонной черты. : ))</p>
<p style="text-align: right;"><em>Михаил Иванюшин</em></p>
]]></content:encoded>
			<wfw:commentRss>http://adobeindesign.ru/2012/01/27/pomeshhenie-illyustracij-v-vyorstku-pri-pomoshhi-skripta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Скриптинг. Карта памяти</title>
		<link>http://adobeindesign.ru/2012/01/11/skripting-karta-pamyati/</link>
		<comments>http://adobeindesign.ru/2012/01/11/skripting-karta-pamyati/#comments</comments>
		<pubDate>Wed, 11 Jan 2012 14:52:21 +0000</pubDate>
		<dc:creator>iv-mi</dc:creator>
				<category><![CDATA[Скриптинг]]></category>
		<category><![CDATA[Script]]></category>

		<guid isPermaLink="false">http://adobeindesign.ru/?p=9745</guid>
		<description><![CDATA[Сейчас популярны инструменты, позволяющие визуализировать связи между объектами. Эта визуализация помогает найти интересные решения, и просто разобраться в иерархии и соподчиненности объектов. В общем, применений этой методике много, и есть программы, позволяющие успешно рисовать такие матрицы зависимостей. Эти чертежи называют часто &#171;карты памяти&#187;.
Это сообщение не о программах, позволяющих создавать карты памяти, а образец такой карты применительно к скриптингу. Найден на сайте Грегора Феленца (Gregor Fellenz), посвященного по скриптингу.
Там выложены скрипты из его книги, и всякая сопутствующая информация, в частности, вот эта карта памяти организации скриптинга.
Хоть она на немецком, разобраться в ...]]></description>
			<content:encoded><![CDATA[<p>Сейчас популярны инструменты, позволяющие визуализировать связи между объектами. Эта визуализация помогает найти интересные решения, и просто разобраться в иерархии и соподчиненности объектов. В общем, применений этой методике много, и есть программы, позволяющие успешно рисовать такие матрицы зависимостей. Эти чертежи называют часто &laquo;карты памяти&raquo;.<span id="more-9745"></span><br />
Это сообщение не о программах, позволяющих создавать карты памяти, а образец такой карты применительно к скриптингу. Найден на сайте <a href="http://www.indd-skript.de/">Грегора Феленца</a> (Gregor Fellenz), посвященного по скриптингу.<br />
Там выложены скрипты из его книги, и всякая сопутствующая информация, в частности, вот эта карта памяти организации скриптинга.<br />
Хоть она на немецком, разобраться в ней просто.<br />
Распечатайте её на формате А3, держите под рукой &#8211; это сэкономит время в процессе понимания чужих скриптов.</p>
<p style="text-align: right;"><span style="color: #993366;"><strong>Иванюшин Михаил</strong></span></p>
<p><a href="http://adobeindesign.ru/wp-content/uploads/idskurzreferenz.pdf" target="_blank"><strong>Скачать</strong></a> &laquo;карту памяти&raquo;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://adobeindesign.ru/2012/01/11/skripting-karta-pamyati/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Скриптинг функций взаимного перекрытия объектов</title>
		<link>http://adobeindesign.ru/2011/10/22/skripting-funkcij-vzaimnogo-perekrytiya-obektov/</link>
		<comments>http://adobeindesign.ru/2011/10/22/skripting-funkcij-vzaimnogo-perekrytiya-obektov/#comments</comments>
		<pubDate>Sat, 22 Oct 2011 19:53:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Скриптинг]]></category>

		<guid isPermaLink="false">http://adobeindesign.ru/?p=9501</guid>
		<description><![CDATA[InDesign работает с текстовыми фреймами, прямоугольниками, многоугольниками, овалами и графическими линиями. Соответственно, в скрипте можно поместить на страницу любой из этих объектов:

var MyDocument = app.documents&#91;0&#93;;
var obj1=MyDocument&#91;'graphicLines'&#93;.add&#40;&#123;geometricBounds: &#91;20, 10, 50, 80&#93;, fillColor: &#34;C=15 M=100 Y=100 K=0&#34;, strokeWeight: 2, strokeColor: &#34;Black&#34; &#125;&#41;;
var obj2=MyDocument&#91;'textFrames'&#93;.add&#40;&#123;geometricBounds: &#91;50, 60, 80, 20&#93;, fillColor: &#34;C=100 M=0 Y=0 K=0&#34;, strokeWeight: 5, strokeColor: &#34;C=15 M=100 Y=100 K=0&#34; &#125;&#41;;
var obj3=MyDocument&#91;'ovals'&#93;.add&#40;&#123;geometricBounds: &#91;40, 70, 100, 40&#93;, fillColor: &#34;Black&#34;, strokeWeight: 5, strokeColor: &#34;C=15 M=100 Y=100 K=0&#34; &#125;&#41;;
var obj4=MyDocument&#91;'rectangles'&#93;.add&#40;&#123;geometricBounds: &#91;100, 90, 65, 45&#93;, fillColor: &#34;C=0 M=0 Y=100 K=0&#34;, strokeWeight: 5, strokeColor: &#34;C=15 M=100 Y=100 K=0&#34; ...]]></description>
			<content:encoded><![CDATA[<p>InDesign работает с текстовыми фреймами, прямоугольниками, многоугольниками, овалами и графическими линиями. Соответственно, в скрипте можно поместить на страницу любой из этих объектов:<span id="more-9501"></span></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> MyDocument <span style="color: #339933;">=</span> app.<span style="color: #660066;">documents</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> obj1<span style="color: #339933;">=</span>MyDocument<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'graphicLines'</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">add</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>geometricBounds<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #CC0000;">20</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">10</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">50</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">80</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> fillColor<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;C=15 M=100 Y=100 K=0&quot;</span><span style="color: #339933;">,</span> strokeWeight<span style="color: #339933;">:</span> <span style="color: #CC0000;">2</span><span style="color: #339933;">,</span> strokeColor<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Black&quot;</span> <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> obj2<span style="color: #339933;">=</span>MyDocument<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'textFrames'</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">add</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>geometricBounds<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #CC0000;">50</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">60</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">80</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">20</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> fillColor<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;C=100 M=0 Y=0 K=0&quot;</span><span style="color: #339933;">,</span> strokeWeight<span style="color: #339933;">:</span> <span style="color: #CC0000;">5</span><span style="color: #339933;">,</span> strokeColor<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;C=15 M=100 Y=100 K=0&quot;</span> <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> obj3<span style="color: #339933;">=</span>MyDocument<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'ovals'</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">add</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>geometricBounds<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #CC0000;">40</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">70</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">100</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">40</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> fillColor<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Black&quot;</span><span style="color: #339933;">,</span> strokeWeight<span style="color: #339933;">:</span> <span style="color: #CC0000;">5</span><span style="color: #339933;">,</span> strokeColor<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;C=15 M=100 Y=100 K=0&quot;</span> <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> obj4<span style="color: #339933;">=</span>MyDocument<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'rectangles'</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">add</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>geometricBounds<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #CC0000;">100</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">90</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">65</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">45</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> fillColor<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;C=0 M=0 Y=100 K=0&quot;</span><span style="color: #339933;">,</span> strokeWeight<span style="color: #339933;">:</span> <span style="color: #CC0000;">5</span><span style="color: #339933;">,</span> strokeColor<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;C=15 M=100 Y=100 K=0&quot;</span> <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> obj5<span style="color: #339933;">=</span>MyDocument<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'polygons'</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">add</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>geometricBounds<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #CC0000;">20</span><span style="color: #339933;">,</span><span style="color: #CC0000;">20</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">70</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">70</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> fillColor<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;C=75 M=5 Y=100 K=0&quot;</span><span style="color: #339933;">,</span> strokeWeight<span style="color: #339933;">:</span> <span style="color: #CC0000;">5</span><span style="color: #339933;">,</span> strokeColor<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;C=15 M=100 Y=100 K=0&quot;</span> <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>В результате на экране будет вот такая стопа картинок:<br />
<img class="alignnone size-full wp-image-9505" title="overscripting01" src="http://adobeindesign.ru/wp-content/uploads/overscripting01.png" alt="" width="171" height="211" /><br />
Первый нарисованный объект, в данном случае, линия, оказался в самом низу, а многоугольник или полигон, нарисованный последним — на самом верху.<br />
Очевидно, что строка</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> obj<span style="color: #339933;">=</span>MyDocument<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'textFrames'</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">add</span><span style="color: #009900;">&#40;</span></pre></div></div>

<p>эквивалентна</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> obj<span style="color: #339933;">=</span>MyDocument.<span style="color: #660066;">textFrames</span>.<span style="color: #660066;">add</span><span style="color: #009900;">&#40;</span></pre></div></div>

<p>т.е. можно использовать тот вариант записи, который привычнее. Можно указать и страницу, на которую помещаются объекты:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> obj<span style="color: #339933;">=</span>MyDocument.<span style="color: #660066;">pages</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'textFrames'</span><span style="color: #009900;">&#93;</span></pre></div></div>

<p>В меню Объект &gt; Обработка контуров (<strong>Object &gt; Pathfinder</strong>) есть разные варианты взаимного перекрытия объектов:<br />
<img class="alignnone size-full wp-image-9508" title="overscripting2" src="http://adobeindesign.ru/wp-content/uploads/overscripting2.png" alt="" width="372" height="117" /><br />
<img class="alignnone size-full wp-image-9509" title="overscripting3" src="http://adobeindesign.ru/wp-content/uploads/overscripting3.png" alt="" width="317" height="117" /><br />
Все эти опции доступны и в скриптинге.</p>
<h3>Работа с парой объектов</h3>
<p>1) Если, например, к написанному выше скрипту добавить строку, предписывающую выполнить исключающее перекрытие второго и третьего объектов:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">compObj<span style="color: #339933;">=</span>obj2.<span style="color: #660066;">excludeOverlapPath</span> <span style="color: #009900;">&#40;</span>obj3<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>то результат будет такой:<br />
<img class="alignnone size-full wp-image-9510" title="overscripting4" src="http://adobeindesign.ru/wp-content/uploads/overscripting4.png" alt="" width="166" height="203" /><br />
Эта операция объединила второй и третий объекты — текстовый фрейм и овал, выбила их общую часть и присвоила созданному объекту цвет объекта, что был выше в стопе. В данном случае это черный цвет.<br />
2) Добавление (add):</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">compObj<span style="color: #339933;">=</span>obj4.<span style="color: #660066;">addPath</span> <span style="color: #009900;">&#40;</span>obj2<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p><img class="alignnone size-full wp-image-9512" title="overscripting5" src="http://adobeindesign.ru/wp-content/uploads/overscripting5.png" alt="" width="162" height="199" /><br />
Объединились второй и четвертый объекты, новый объект унаследовал цвет нижнего объекта.<br />
3) Пересечение (intersect)</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">compObj<span style="color: #339933;">=</span>obj3.<span style="color: #660066;">intersectPath</span> <span style="color: #009900;">&#40;</span>obj2<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p><img class="size-full wp-image-9514 alignleft" title="overscripting6" src="http://adobeindesign.ru/wp-content/uploads/overscripting6.png" alt="" width="166" height="203" /><br />
<img class="alignnone size-full wp-image-9515" title="overscripting7" src="http://adobeindesign.ru/wp-content/uploads/overscripting7.png" alt="" width="161" height="203" /><br />
Осталась общая часть текстового фрейма (объект 2) и овала (объект 3). Новый объект унаследовал цвет нижнего объекта.<br />
4) Вычитание нижний (Minus back)<br />
<img class="alignnone size-full wp-image-9516" title="overscripting8" src="http://adobeindesign.ru/wp-content/uploads/overscripting8.png" alt="" width="158" height="201" /></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">compObj<span style="color: #339933;">=</span>obj3.<span style="color: #660066;">minusBack</span><span style="color: #009900;">&#40;</span>obj5<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p><img class="alignnone size-full wp-image-9517" title="overscripting9" src="http://adobeindesign.ru/wp-content/uploads/overscripting9.png" alt="" width="162" height="204" /></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">compObj<span style="color: #339933;">=</span>obj5.<span style="color: #660066;">minusBack</span><span style="color: #009900;">&#40;</span>obj3<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Обрабатываются овал, это объект 3 и полигон, это объект 5.<br />
В данном случае хоть команда и называется Минус нижний, но кто из объектов будет нижним, определяется очередностью указания объектов в команде. Остается часть объекта, указанного в скобках команды minusBack. Всё, что пересекалось с объектом, указанным после знака равенства, удаляется вместе с этим объектом.<br />
5) Составной контур (Объект &gt; Контуры &gt; Создать составной контур или<br />
Object &gt; Path &gt; Make Compound Path)<br />
<img class="alignnone size-full wp-image-9522" title="overscripting10" src="http://adobeindesign.ru/wp-content/uploads/overscripting10.png" alt="" width="165" height="212" /></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">compObj<span style="color: #339933;">=</span>obj2.<span style="color: #660066;">makeCompoundPath</span> <span style="color: #009900;">&#40;</span>obj5<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Если среди объединяемых такой командой объектов есть текстовый фрейм, то созданный объект получает его цвет.<br />
<img class="alignnone size-full wp-image-9523" title="overscripting11" src="http://adobeindesign.ru/wp-content/uploads/overscripting11.png" alt="" width="162" height="206" /></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">compObj<span style="color: #339933;">=</span>obj3.<span style="color: #660066;">makeCompoundPath</span> <span style="color: #009900;">&#40;</span>obj5<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<h3>Работа с несколькими объектами</h3>
<p>В приведенных выше примерах показано, как взаимодействуют два объекта.<br />
Но можно собрать объекты в массив, и указать его в качестве второго объекта в любой из перечисленных выше операций с объектами.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> myObjArray<span style="color: #339933;">=</span><span style="color: #003366; font-weight: bold;">new</span> Array<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
myObjArray.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>obj1<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
myObjArray.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>obj2<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
myObjArray.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>obj3<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
myObjArray.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>obj4<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
myObjArray.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>obj5<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
compObj<span style="color: #339933;">=</span>obj2.<span style="color: #660066;">excludeOverlapPath</span> <span style="color: #009900;">&#40;</span>myObjArray<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p><img class="alignnone size-full wp-image-9525" title="overscripting12" src="http://adobeindesign.ru/wp-content/uploads/overscripting12.png" alt="" width="161" height="186" /></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">compObj<span style="color: #339933;">=</span>obj2.<span style="color: #660066;">excludeOverlapPath</span> <span style="color: #009900;">&#40;</span>myObjArray<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Тут может быть любой объект от obj1 до obj4;<br />
<img class="alignnone size-full wp-image-9526" title="overscripting13" src="http://adobeindesign.ru/wp-content/uploads/overscripting13.png" alt="" width="157" height="181" /></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">compObj<span style="color: #339933;">=</span>obj5.<span style="color: #660066;">excludeOverlapPath</span> <span style="color: #009900;">&#40;</span>myObjArray<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>В большинстве случаев созданная фигура красится цветом верхнего объекта, как это показано на предпоследнем рисунке. Но если в качестве опорного объекта выбран верхний объект, obj5, как показано на последнем рисунке, то созданный объект красится цветом предыдущей фигуры. В нашем случае предпоследний сверху объект окрашен желтым цветом.</p>
<p style="text-align: right;">М.И.</p>
]]></content:encoded>
			<wfw:commentRss>http://adobeindesign.ru/2011/10/22/skripting-funkcij-vzaimnogo-perekrytiya-obektov/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Переопределение метода onDraw</title>
		<link>http://adobeindesign.ru/2011/10/16/pereopredelenie-metoda-ondraw/</link>
		<comments>http://adobeindesign.ru/2011/10/16/pereopredelenie-metoda-ondraw/#comments</comments>
		<pubDate>Sun, 16 Oct 2011 19:03:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Скриптинг]]></category>

		<guid isPermaLink="false">http://adobeindesign.ru/?p=9488</guid>
		<description><![CDATA[Некоторое время назад на сайте был выложен перевод руководства Питера Карела по скриптингу. Позже было размещено обновление. А глянул я недавно на его сайт, а там уже седьмая версия этого документа! Сейчас я фоновом режиме делаю обновление того перевода, он будет процентов на 20 больше предыдущего.
Но среди обновлений нашлась такая «вкусная» тема, что жаль, если скриптописатели, листая экран с обновленным переводом, вдруг пропустят её. Поэтому расскажу об этом специально.
Итак, в инструментарии JavaScript есть класс Image, который, в свою очередь, имеет метод onDraw.
Этот метод вызывается всякий раз, когда помещается картинка:

add(&#34;image&#34;, ...)

Например, ...]]></description>
			<content:encoded><![CDATA[<p><em>Некоторое время назад на сайте был выложен <a href="http://adobeindesign.ru/2010/11/08/scriptui-rus/">перевод руководства</a> Питера Карела по скриптингу. Позже было размещено <a href="http://adobeindesign.ru/2010/12/26/scriptsui/">обновление</a>. А глянул я недавно на его сайт, а там уже седьмая версия этого документа! Сейчас я фоновом режиме делаю обновление того перевода, он будет процентов на 20 больше предыдущего.</em></p>
<p><em>Но среди обновлений нашлась такая «вкусная» тема, что жаль, если скриптописатели, листая экран с обновленным переводом, вдруг пропустят её. Поэтому расскажу об этом специально.<span id="more-9488"></span></em></p>
<p>Итак, в инструментарии JavaScript есть класс Image, который, в свою очередь, имеет метод <strong>onDraw</strong>.</p>
<p>Этот метод вызывается всякий раз, когда помещается картинка:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;">add(&quot;image&quot;, ...)</pre></div></div>

<p>Например, вот этот скрипт выведет на экран картинку в масштабе 100%, и величина окна будет определяться размерами картинки:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;">var w = new Window (&quot;dialog&quot;);
var pict = w.add (&quot;image&quot;, undefined, File (&quot;/c/tmp/флаг-колокольчик.png&quot;));
w.show ();</pre></div></div>

<p><a href="http://adobeindesign.ru/wp-content/uploads/onDraw1.png" rel="lightbox[9488]"><img class="alignnone size-full wp-image-9491" title="onDraw1" src="http://adobeindesign.ru/wp-content/uploads/onDraw1.png" alt="onDraw1" width="465" height="437" /></a><br />
Если задать размеры окна, то метод onDraw поместит картинку в центр окна, но масштаб её останется 100%:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;">var w = new Window (&quot;dialog&quot;);
var pict = w.add (&quot;image&quot;, undefined, File (&quot;/c/tmp/флаг-колокольчик.png&quot;));
pict.size = [200,200];
w.show();</pre></div></div>

<p><a href="http://adobeindesign.ru/wp-content/uploads/onDraw2.png" rel="lightbox[9488]"><img class="alignnone size-full wp-image-9492" title="onDraw2" src="http://adobeindesign.ru/wp-content/uploads/onDraw2.png" alt="onDraw2" width="239" height="268" /></a><br />
Можно ли при помещении картинки в фрейм предустановленного размера автоматически масштабировать её?<br />
Да, и Карел приводит решение этой задачи. Автор идеи Марк Аутрет (Marc Autret), который придумал, как переопределить стандартный метод onDraw, чтобы он при помещении картинки подгонял её под размер фрейма.<br />
Вот код:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;">Image.prototype.onDraw = function()
{ // written by Marc Autret
// &quot;this&quot; is the container; &quot;this.image&quot; is the graphic
if( !this.image ) return;
var WH = this.size,
wh = this.image.size,
k = Math.min(WH[0]/wh[0], WH[1]/wh[1]), xy;
// Resize proportionally:
wh = [k*wh[0],k*wh[1]];
// Center:
xy = [ (WH[0]-wh[0])/2, (WH[1]-wh[1])/2 ];
this.graphics.drawImage(this.image,xy[0],xy[1],wh[0],wh[1]);
WH = wh = xy = null;
}
var w = new Window (&quot;dialog&quot;);
var pict = w.add (&quot;image&quot;, undefined, File (&quot;/c/tmp/флаг-колокольчик.png&quot;));
pict.size = [200,200];
w.show ();</pre></div></div>

<p>Вот результат:<br />
<a href="http://adobeindesign.ru/wp-content/uploads/onDraw3.png" rel="lightbox[9488]"><img class="alignnone size-full wp-image-9493" title="onDraw3" src="http://adobeindesign.ru/wp-content/uploads/onDraw3.png" alt="onDraw3" width="242" height="268" /></a></p>
<p>Отличное решение, правда?</p>
<p style="text-align: right;">М. Иванюшин</p>
]]></content:encoded>
			<wfw:commentRss>http://adobeindesign.ru/2011/10/16/pereopredelenie-metoda-ondraw/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Индикатор исполнения задачи, он же прогрессбар, он же градусник…</title>
		<link>http://adobeindesign.ru/2011/08/01/progressbar/</link>
		<comments>http://adobeindesign.ru/2011/08/01/progressbar/#comments</comments>
		<pubDate>Mon, 01 Aug 2011 18:25:19 +0000</pubDate>
		<dc:creator>iv-mi</dc:creator>
				<category><![CDATA[Headline]]></category>
		<category><![CDATA[Скриптинг]]></category>

		<guid isPermaLink="false">http://adobeindesign.ru/?p=9368</guid>
		<description><![CDATA[А мужики-то не знают!..
В обсуждавшейся недавно теме пост 20 вывел на такую ссылку: пост 527 и 528. Этот пример организации прогрессбара стал мне знаком после перевода на русский язык руководства Питера Карела по интерефейсу скриптов:
Элемент интерфейса progressbar (индикатор выполнения задания)
Этот элемент управления используется для вывода на экран одной или нескольких линий, отображающих ход исполнения задания. В основе простая идея — длительность линии и время исполнения скрипта связаны между собой. Пока не было лучшего примера использования этого инструмента, кроме скрипта Марка Аутрета (Marc Autret). Вот код этого скрипта: (далее идет код, ...]]></description>
			<content:encoded><![CDATA[<p><strong>А мужики-то не знают!..</strong></p>
<p>В обсуждавшейся недавно <a href="http://forum.rudtp.ru/showthread.php?t=48119">теме</a> пост 20 вывел на такую<a href="http://forum.rudtp.ru/showthread.php?t=20634&amp;p=533666&amp;viewfull=1#post533666"> ссылку</a>: пост 527 и 528. Этот пример организации прогрессбара стал мне знаком после перевода на русский язык <a href="http://adobeindesign.ru/2010/11/08/scriptui-rus/">руководства Питера Карела</a> по интерефейсу скриптов:</p>
<h3>Элемент интерфейса progressbar (индикатор выполнения задания)</h3>
<p>Этот элемент управления используется для вывода на экран одной или нескольких линий, отображающих ход исполнения задания. В основе простая идея — длительность линии и время исполнения скрипта связаны между собой. Пока не было лучшего примера использования этого инструмента, кроме скрипта <strong>Марка Аутрета</strong> (Marc Autret). Вот код этого скрипта: (<em>далее идет код, на который ссылается упомянутый ранее пост 527</em>).</p>
<p>Для меня слова Карела «Пока не было лучшего примера использования этого инструмента, кроме скрипта М<strong>арка Аутрета</strong>» стали аргументом сделать этот скрипт своим инструментом, и он уже успешно используется в нескольких последних программах. Приглашаю всех скриптописцев попробовать его в деле. Карел прав — этот скрипт действительно лучший.</p>
<p><strong>Скрипт отображения прогрессбара. Инструкция по эксплуатации</strong></p>
<p><span style="text-decoration: underline;">Что делает каждая из строк</span></p>
<p>Исходный скрипт был несколько видоизменен, и вот объяснение его организации:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;">var ProgressBar = function(title)
{
var w = new Window('palette', title, {x:0, y:0, width:640, height:60},{closeButton: false}),
pb = w.add('progressbar', {x:20, y:32, width:600, height:12}),
st = w.add('statictext', {x:20, y:12, width:600, height:20});
st.justify = 'left';
w.center();
this.reset = function(msg,maxValue) {
st.text = msg;
pb.value = 0;
pb.maxvalue = maxValue;
w.show();
};
this.hit = function() {++pb.value;};
this.hide = function() {w.hide();}; // эта функция гасит окно процесса исполнения задания
this.close = function() {w.close();};
}</pre></div></div>

<p><span style="color: #0000ff;">this</span> здесь — ключевое слово, указывающее на владельца исполняемой функции, в данном случае <span style="color: #0000ff;">ProgressBar.</span></p>
<p>1 — объявление функции,<span style="color: #0000ff;"> titul</span> — передаваемый параметр.</p>
<p>3 — окно типа <span style="color: #0000ff;">palette</span> шириной 640 и высотой 80 точек, кнопка закрытия окна отключена.</p>
<p>4 — строка, определяющая геометрические размеры и положение прогрессбара внутри окна, определенного строкой выше.</p>
<p>5 — определено место информационной строки. Её положение определено так, что она появится над полосой прогрессбара.</p>
<p>6 — выравнивание строки влево</p>
<p>7 — выравнивание объявленного в строке 3 окна по центру экрана</p>
<p>8 — сброс отображения прогрессбара. Параметры этой функции — сообщение и максимальное значение.</p>
<p>9 — Сообщение из параметров предыдущей строки выводится в поле окна, определенном в 4-й строке.</p>
<p>10 — определено начальное значение прогрессбара.</p>
<p>11 — определено максимальное значение прогрессбара, это второй параметр функции из строки 8</p>
<p>12 — включение отображения окна</p>
<p>14 — функция пошагового наращения текущего значения шкалы</p>
<p>15 — функция скрытия окна</p>
<p>16 — функция закрытия окна</p>
<p>Примечание. Если интересно, в чем состоит изменение исходного кода, так вот описание:</p>
<p>а) добавлено условие <span style="color: #0000ff;">{closeButton: false}</span> в строке 3. Сделано по той причине, что коль скоро невозможно щелчком на красном крестике закрыть это окно в процессе исполнения задания, то и пиктограммы быть не должно.</p>
<p>б) в оригинале строка 4 выглядит так: <span style="color: #0000ff;">pb = w.add(&#8216;progressbar&#8217;, {x:20, y:12, width:300, height:12}, 0, 100)</span>, но эти 0, 100 смысла не имеют.</p>
<p>в) в оригинале 11 строка выглядит так: <span style="color: #0000ff;">pb.maxvalue = maxValue||0</span>. Т.е. если <span style="color: #0000ff;">maxValue</span> определено, его значение присваивается переменной <span style="color: #0000ff;">pb.maxvalue</span>. Если не определено, этой переменной присваивается нулевое значение. На мой взгляд, это ненужное усложнение кода. Во-первых, если предполагается воспользоваться этим индикатором, то значение <span style="color: #0000ff;">maxValue</span> будет определено. Во-вторых, мало проку иметь для <span style="color: #0000ff;">pb.maxvalue</span> нулевое значение.</p>
<p>г) вообще убрана строка <span style="color: #0000ff;">pb.visible = !!maxValue</span>; не вижу смысла управлять видимостью шкалы. Если скрипт запускается, прогрессбар должен быть виден всегда.</p>
<p><span style="text-decoration: underline;">Как его использовать</span></p>
<p>Вот несколько строк работающего кода:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;">var myProgramTitul = &quot; Что для иностранца progressbar, то для русского градусник  &quot;;
var pBar = new ProgressBar(myProgramTitul);
pBar.reset(&quot; Задание выполняется... &quot; , 150);
for( i=0 ; i <span style="color: #ddbb00;">&amp;lt;</span> 150; ++i, pBar.hit())  { // обращение к функци pBar.hit()
…
}
pBar.close();</pre></div></div>

<p>&#8230; и комментарий этих строк:</p>
<p>1 — определен заголовок окна с прогрессбаром;</p>
<p>2 — обращение к описанной выше функции <span style="color: #0000ff;">ProgressBar</span></p>
<p>3 — сброс прогрессбара. Вот пример работы упомянутого ранее ключевого слова this: определив в строке прогресс бар с именем pBar, определив в скрипте <span style="color: #0000ff;">this.reset = function(msg,maxValue)</span>, тут пишем <span style="color: #0000ff;">pBar.reset(&raquo; Задание выполняется&#8230; &raquo; , 150</span>), и в окне этого прогрессбара будет выведено сообщение &raquo; Задание выполняется&#8230; &laquo;, и максимальное значение прогрессбара установлено равным 150.</p>
<p>4 — в цикле for, в поле изменения счетчика цикла ++i через запятую указано обращение к функции <span style="color: #0000ff;">pBar.hit()</span>, которая при каждом вызове её наращивает длину полосы на один шаг.</p>
<p>Вот, собственно, и всё! Весь интерфейс скрипта как на ладони!</p>
<p>Этот пример в файле <strong>gradusnik.jsx</strong>, дорабатывайте его под свои задачи — добавьте строки в свой скрипт, сделайте свой заголовок окна прогрессбара (в моем примере это переменная <span style="color: #0000ff;">myProgramTitul</span>) и свое сообщение, выводимое в окне (текстовая переменная в третьей строке), и получите замечательный градусник!</p>
<p>Ну а когда всё так просто, почему бы не покуролесить, не попробовать найти другие варианты использования этого инструмента? : ))</p>
<p><strong>А можно двигать полоску не вперед, а назад?</strong></p>
<p>В скрипте <strong>gradusnik1.jsx</strong>, полоска сперва нарастает, двигаясь слева направо, а затем уменьшается справа налево. Сделано это с помощью введения новой функции сброса <span style="color: #0000ff;">this.reset_dn</span>, устанавливающей начальное значение прогрессбара в максимальное значение, и в цикле for при наращении переменной вызывается функция <span style="color: #0000ff;">this.decr()</span>, пошагово уменьшающая длину прогрессбара: <span style="color: #0000ff;">this.decr = function() {&#8211;pb.value;}</span></p>
<p><strong>А можно в одном окне отображать несколько процессов?</strong></p>
<p>Хороший вопрос, на который есть утвердительный ответ.</p>
<p>Действительно, мы определили текстовое поле <span style="color: #0000ff;">st</span> для вывода названия процесса, и переменную <span style="color: #0000ff;">pb</span> для графического отображения состояния этого процесса. А кто мешает сделать несколько таких пар параметров в одном окне? Например, первая пара отображала бы общее число заданий, а вторая — состояние исполнения текущего задания.</p>
<p>Такая задача решена в скрипте <strong>gradusnik2.jsx</strong>.</p>
<p>Если изменить значение переменной <span style="color: #0000ff;">SecDirectionR2L</span> на <span style="color: #0000ff;">true</span>, то в процессе демонстрации полоса второго уровня будет ползти справа налево.</p>
<p align="right"><strong>Михаил Иванюшин</strong></p>
<p style="text-align: left;"><a href="http://adobeindesign.ru/wp-content/uploads/Прогрессбар.zip">Скачать</a> скрипты прогрессбара<strong><br />
</strong></p>
<p><strong>P.</strong><strong>S.</strong></p>
<p><strong>Обязательна ли инструкция #targetengine?</strong></p>
<p>Справочное руководство по скрипам, описывая демонстрационный пример прогрессбара, предписывает включать эту инструкцию. Но на самом деле и без неё всё работает. Использование этого оператора имеет смысл, если несколько скриптов используют один и тот же прогрессбар.</p>
<p><strong> </strong></p>
]]></content:encoded>
			<wfw:commentRss>http://adobeindesign.ru/2011/08/01/progressbar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Неприятности с окном диалога</title>
		<link>http://adobeindesign.ru/2011/04/15/nepriyatnosti-s-oknom-dialoga/</link>
		<comments>http://adobeindesign.ru/2011/04/15/nepriyatnosti-s-oknom-dialoga/#comments</comments>
		<pubDate>Thu, 14 Apr 2011 21:20:23 +0000</pubDate>
		<dc:creator>iv-mi</dc:creator>
				<category><![CDATA[Скриптинг]]></category>

		<guid isPermaLink="false">http://adobeindesign.ru/?p=9012</guid>
		<description><![CDATA[Работая с окнами, сделанными при помощи скриптов, я наткнулся на весьма неприятную ситуацию — появление на экране моего окна запрещало работу с текстом. Эта ошибка имеет место только в версии CS4. В CS3 все безупречно, в CS5 тоже в порядке, а вот четверка дурит… : (
Я до этого думал, что там только один хронический баг — потеря сносок. Мы на сайте не раз об этом говорили. Но оказалось, есть еще недоделки.
Вот последовательность шагов, как добраться до этих граблей:
1) сохраните на машине этот скрипт:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#target indesign
#targetengine &#34;session&#34;
FRAME_TO_CONTENT = 1718906723
app.documents&#91;0&#93;.textFrames&#91;0&#93;.insertionPoints&#91;0&#93;.select&#40;&#41;;
var mySelection = app.selection&#91;0&#93;;
var ...]]></description>
			<content:encoded><![CDATA[<p>Работая с окнами, сделанными при помощи скриптов, я наткнулся на весьма неприятную ситуацию — появление на экране моего окна запрещало работу с текстом. Эта ошибка имеет место только в версии CS4. В CS3 все безупречно, в CS5 тоже в порядке, а вот четверка дурит… : (</p>
<p>Я до этого думал, что там только один хронический баг — потеря сносок. Мы на сайте не раз об этом говорили. Но оказалось, есть еще недоделки.<span id="more-9012"></span></p>
<p>Вот последовательность шагов, как добраться до этих граблей:</p>
<p>1) сохраните на машине этот скрипт:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">#target indesign
#targetengine <span style="color: #3366CC;">&quot;session&quot;</span>
FRAME_TO_CONTENT <span style="color: #339933;">=</span> <span style="color: #CC0000;">1718906723</span>
app.<span style="color: #660066;">documents</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">textFrames</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">insertionPoints</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">select</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> mySelection <span style="color: #339933;">=</span> app.<span style="color: #660066;">selection</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> myWin <span style="color: #339933;">=</span> myDialog<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
myWin.<span style="color: #660066;">show</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">/////////</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">function</span> myDialog<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #006600; font-style: italic;">// myDialog</span>
<span style="color: #003366; font-weight: bold;">var</span> myWindow <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Window <span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;palette&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;Проблема с обработкой текста&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
myWindow.<span style="color: #660066;">orientation</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;column&quot;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> myButtonGroup <span style="color: #339933;">=</span> myWindow.<span style="color: #660066;">add</span> <span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;panel&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
myButtonGroup.<span style="color: #660066;">alignment</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;center&quot;</span><span style="color: #339933;">;</span>
myButtonGroup.<span style="color: #660066;">orientation</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;row&quot;</span><span style="color: #339933;">;</span>
myOKButon <span style="color: #339933;">=</span> myButtonGroup.<span style="color: #660066;">add</span> <span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;button&quot;</span><span style="color: #339933;">,</span> undefined<span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;Втиснуть текст в фрейм&quot;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span><span style="color: #3366CC;">&quot;OK&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
myCancelButon <span style="color: #339933;">=</span> myButtonGroup.<span style="color: #660066;">add</span> <span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;button&quot;</span><span style="color: #339933;">,</span> undefined<span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;Завершить&quot;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span><span style="color: #3366CC;">&quot;cancel&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
myCancelButon.<span style="color: #660066;">onClick</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #006600; font-style: italic;">// myCancelButon.onClick</span>
myWindow.<span style="color: #000066;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
exit<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #006600; font-style: italic;">// myCancelButon.onClick</span>
&nbsp;
myOKButon.<span style="color: #660066;">onClick</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #006600; font-style: italic;">// myOKButon.onClick</span>
app.<span style="color: #660066;">documents</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">textFrames</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">select</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
app.<span style="color: #660066;">documents</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">textFrames</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">fit</span><span style="color: #009900;">&#40;</span>FRAME_TO_CONTENT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #006600; font-style: italic;">// myOKButon.onClick</span>
<span style="color: #000066; font-weight: bold;">return</span> myWindow<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #006600; font-style: italic;">// myDialog</span></pre></td></tr></table></div>

<p>2) Откройте новую работу, нарисуйте текстовый фрейм, напишите в нем чего-нибудь.</p>
<p>3) Оставьте курсор в тексте и запустите скрипт из п. 1. Что мы видим? На экране окно диалога, в текстовом блоке мигает курсор, набирай — не хочу! Но попробуйте ввести текст — у вас ничего не выйдет!!</p>
<p>Это открытое окно перехватывает всю работу с клавиатурой. В сравнении с этим поведением окна, в CS5 при попытке ввода текста это открытое окно чуточку гаснет, становясь неактивным, после чего можно вводить текст. Окно станет активным опять после щелчка на нем или на одной из кнопок.</p>
<p>Вот такие грабли в полный рост.</p>
<p>Если кто знает, как средствами JavaScript обойти эту засаду, сообщите, благодарность моя будет не знать границ в разумных пределах — я скажу Вам спасибо на нашем сайте. : ))</p>
<p>Но пока я нашел такое решение: щелчок курсором в любом из полей панели измерений, например, в окне названия шрифта или поле размера буквы, делает это окно неактивным и можно работать с текстом.</p>
<p>Вот такие дела.</p>
<p align="right"><strong>М.И.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://adobeindesign.ru/2011/04/15/nepriyatnosti-s-oknom-dialoga/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Что за джинн этот targetengine</title>
		<link>http://adobeindesign.ru/2011/03/10/chto-za-dzhinn-etot-targetengine/</link>
		<comments>http://adobeindesign.ru/2011/03/10/chto-za-dzhinn-etot-targetengine/#comments</comments>
		<pubDate>Thu, 10 Mar 2011 15:38:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Скриптинг]]></category>
		<category><![CDATA[targetengine]]></category>

		<guid isPermaLink="false">http://adobeindesign.ru/?p=8804</guid>
		<description><![CDATA[В инструментарии разработки скриптов есть инструкция, в 99% её использования применяемая в программах так:

#targetengine &#34;session&#34;

Она предписывает  сохранять на время сеанса работы программы InDesign все переменные скрипта, в котором использовалась  эта инструкция. И слово ‘session’ в этой записи вовсе не термин языка javascript. : )  На самом деле во время одного сеанса программы может быть объявлено несколько движков (этим словом часто переводят слово engine) исполнения скриптов, и на ‘session’ свет клином не сошелся, каждому движку можно присваивать своё имя.

Вот простейшие примеры, объясняющие это.
target1.jsx

// Скрипт присваивает движку имя script1.
//В рамках этого движка ...]]></description>
			<content:encoded><![CDATA[<p>В инструментарии разработки скриптов есть инструкция, в 99% её использования применяемая в программах так:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">#targetengine <span style="color: #3366CC;">&quot;session&quot;</span></pre></div></div>

<p>Она предписывает  сохранять на время сеанса работы программы InDesign все переменные скрипта, в котором использовалась  эта инструкция. И слово ‘session’ в этой записи вовсе не термин языка javascript. : )  На самом деле во время одного сеанса программы может быть объявлено несколько движков (этим словом часто переводят слово engine) исполнения скриптов, и на ‘session’ свет клином не сошелся, каждому движку можно присваивать своё имя.</p>
<p><span id="more-8804"></span></p>
<p>Вот простейшие примеры, объясняющие это.</p>
<p>target1.jsx</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">// Скрипт присваивает движку имя script1.</span>
<span style="color: #006600; font-style: italic;">//В рамках этого движка определяется переменная a1</span>
#target indesign
#targetengine <span style="color: #3366CC;">&quot;script1&quot;</span>
<span style="color: #003366; font-weight: bold;">var</span> a1 <span style="color: #339933;">=</span><span style="color: #CC0000;">11</span><span style="color: #339933;">;</span>
<span style="color: #000066;">alert</span> <span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Активизирован движок targetengine 'script1'.<span style="color: #000099; font-weight: bold;">\n</span>Определена переменная 'a1', её значение 11.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
exit<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>target2.jsx</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">// Скрипт присваивает движку имя script2.</span>
<span style="color: #006600; font-style: italic;">// В рамках этого движка определяется переменная a2</span>
#target indesign
#targetengine <span style="color: #3366CC;">&quot;script2&quot;</span>
<span style="color: #003366; font-weight: bold;">var</span> a2 <span style="color: #339933;">=</span><span style="color: #CC0000;">22</span><span style="color: #339933;">;</span>
<span style="color: #000066;">alert</span> <span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Активизирован движок targetengine 'script2'.<span style="color: #000099; font-weight: bold;">\n</span>Определена переменная 'a2', её значение 22.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
exit<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>SetEngine1AndAskVariables.jsx</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">// Скрипт объявляет, что будет работа в рамках движка script1.</span>
<span style="color: #006600; font-style: italic;">// Затем пытается вывести на экран переменные а1, а2, а3</span>
#target indesign
#targetengine <span style="color: #3366CC;">&quot;script1&quot;</span>
<span style="color: #003366; font-weight: bold;">var</span> tt <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> b<span style="color: #339933;">;</span>
<span style="color: #000066;">alert</span> <span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#targetengine script1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>b <span style="color: #339933;">=</span> a1<span style="color: #009900;">&#125;</span>
<span style="color: #000066; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000066;">alert</span> <span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Переменная a1 не определена&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> tt<span style="color: #339933;">=</span><span style="color: #CC0000;">1</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>tt <span style="color: #339933;">==</span> <span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #000066;">alert</span> <span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;a1 = &quot;</span> <span style="color: #339933;">+</span> a1<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
tt <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>b <span style="color: #339933;">=</span> a2<span style="color: #009900;">&#125;</span>
<span style="color: #000066; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000066;">alert</span> <span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Переменная a2 не определена&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> tt<span style="color: #339933;">=</span><span style="color: #CC0000;">1</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>tt <span style="color: #339933;">==</span> <span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #000066;">alert</span> <span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;a2 = &quot;</span> <span style="color: #339933;">+</span> a2<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
tt <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>b <span style="color: #339933;">=</span> a3<span style="color: #009900;">&#125;</span>
<span style="color: #000066; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000066;">alert</span> <span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Переменная a3 не определена&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> tt<span style="color: #339933;">=</span><span style="color: #CC0000;">1</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>tt <span style="color: #339933;">==</span> <span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #000066;">alert</span> <span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;a3 = &quot;</span> <span style="color: #339933;">+</span> a3<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
exit<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>SetEngine2AndAskVariables.jsx</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">// Скрипт объявляет, что будет работа в рамках движка script2.</span>
<span style="color: #006600; font-style: italic;">// Обратите внимание, имя активного движка можно выводить с помощью инструкции $.engineName</span>
<span style="color: #006600; font-style: italic;">// Затем пытается вывести на экран переменные а1, а2, а3</span>
#target indesign
#targetengine <span style="color: #3366CC;">&quot;script2&quot;</span>
<span style="color: #003366; font-weight: bold;">var</span> tt <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> b<span style="color: #339933;">;</span>
<span style="color: #000066;">alert</span> <span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#targetengine &quot;</span> <span style="color: #339933;">+</span> $.<span style="color: #660066;">engineName</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>b <span style="color: #339933;">=</span> a1<span style="color: #009900;">&#125;</span>
<span style="color: #000066; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000066;">alert</span> <span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Переменная a1 не определена&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> tt<span style="color: #339933;">=</span><span style="color: #CC0000;">1</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>tt <span style="color: #339933;">==</span> <span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #000066;">alert</span> <span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;a1 = &quot;</span> <span style="color: #339933;">+</span> a1<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
tt <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>b <span style="color: #339933;">=</span> a2<span style="color: #009900;">&#125;</span>
<span style="color: #000066; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000066;">alert</span> <span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Переменная a2 не определена&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> tt<span style="color: #339933;">=</span><span style="color: #CC0000;">1</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>tt <span style="color: #339933;">==</span> <span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #000066;">alert</span> <span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;a2 = &quot;</span> <span style="color: #339933;">+</span> a2<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
tt <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>b <span style="color: #339933;">=</span> a3<span style="color: #009900;">&#125;</span>
<span style="color: #000066; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000066;">alert</span> <span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Переменная a3 не определена&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> tt<span style="color: #339933;">=</span><span style="color: #CC0000;">1</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>tt <span style="color: #339933;">==</span> <span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #000066;">alert</span> <span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;a3 = &quot;</span> <span style="color: #339933;">+</span> a3<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
exit<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>target2&amp;newVariable.jsx</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">// В рамках движка script2 определяется переменная a3</span>
#target indesign
#targetengine <span style="color: #3366CC;">&quot;script2&quot;</span>
<span style="color: #003366; font-weight: bold;">var</span> a3 <span style="color: #339933;">=</span><span style="color: #CC0000;">33</span><span style="color: #339933;">;</span>
<span style="color: #000066;">alert</span> <span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Активизирован движок targetengine 'script2'.<span style="color: #000099; font-weight: bold;">\n</span>Определена переменная 'a3', её значение 33.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
exit<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Запустите InDesign, затем из панели скриптов выполните скрипт target1.jsx, затем target2.jsx. По идее, это должно в рамках программы активизировать два движка, script1 и script2, и по одной переменной в каждом из движков — в первом а1, во втором а2.<br />
Давайте теперь запуском скриптов из панели Scripts убедимся, что так и есть.<br />
Выполним скрипт SetEngine1AndAskVariables.jsx. Он попробует в рамках движка script1 вывести все переменные, окажется, что доступна только определенная ранее в рамках этого движка а1. Скрипт SetEngine2AndAskVariables.jsx попробует ввести все переменные в рамках движка script2, но окажется, что доступна только а2.<br />
При запуске обоих последних скриптов упоминалась не определенная нигде переменная а3. Давайте определим её и попробуем вывести. Скрипт target2&amp;newVariable.jsx определяет её в рамках движка script2 и делает равной 33.<br />
Теперь при запуске скрипта SetEngine2AndAskVariables.jsx на экран будет выведено значение а2 и а3. Как видите, в рамках движка дополнительные скрипты могут добавлять в перечень переменных движка новые экземпляры.<br />
Если всё, что вы только что прочитали, для вас в новинку, то, думаю, вы удивитесь ещё больше, если я скажу, что в разработке скриптов есть ситуация, когда всё, описанное выше, не работает.<br />
При запуске любого из этих скриптов в отладчике ExtendedScript Toolkit 2, он в основном используется при разработке скриптов для inDesign CS3, на экран будет выведено сообщение о невозможности выполнить скрипт в выбранном движке. (В каком-то из релизов этой программы выводилось усеченное сообщение “Cannot execute”, без уточнения.)<br />
<a href="http://adobeindesign.ru/wp-content/uploads/engine01.png" rel="lightbox[8804]"><img class="alignnone size-full wp-image-8810" title="engine01" src="http://adobeindesign.ru/wp-content/uploads/engine01.png" alt="engine01" width="396" height="246" /></a><br />
Если запустить ExtendedScript Toolkit 4, это отладчик для InDesign CS4, то при выполнении скриптов target1.jsx и target2.jsx такого сообщения не будет, и скрипт SetEngine1AndAskVariables.jsx верно сообщит название движка, но о всех переменных скажет, что они undefined!<br />
Прелестные грабли для начинающих скриптописателей, не правда ли?<br />
Такое может напрочь отбить охоту заниматься скриптами.  : ((<br />
Причина такой работы программ в том, что эти версии отладчиков работают только с ранее запущенными движками, запуск нового движка из отладчика не предусмотрен.<br />
Поэтому, чтобы движки работали в отладчике, надо сперва активизировать их запуском target1.jsx и target2.jsx. из панели скриптов. После этого SetEngine1AndAskVariables.jsx, и SetEngine2AndAskVariables.jsx будут работать верно.<br />
Доступные для отладчика движки показаны списке движков, вот, после запуска из панели скриптов программы target1.jsx в этом меню появился script1:<br />
<a href="http://adobeindesign.ru/wp-content/uploads/engine02.png" rel="lightbox[8804]"><img class="alignnone size-full wp-image-8811" title="engine02" src="http://adobeindesign.ru/wp-content/uploads/engine02.png" alt="engine02" width="118" height="115" /></a><br />
Очевидно, поскольку по умолчанию используется движок main, эту недоработку можно обойти, указав в скрипте</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">#targetengine <span style="color: #3366CC;">&quot;main&quot;</span>.</pre></div></div>

<p>В версии InDesign CS5 этой ошибки уже нет: указанный в инструкции #targetengine движок сразу появляется в том списке движков.</p>
<p><strong>М.И.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://adobeindesign.ru/2011/03/10/chto-za-dzhinn-etot-targetengine/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>&#171;Отэмбеддить&#187; все внедренные линки</title>
		<link>http://adobeindesign.ru/2011/03/03/unembed-links/</link>
		<comments>http://adobeindesign.ru/2011/03/03/unembed-links/#comments</comments>
		<pubDate>Wed, 02 Mar 2011 22:45:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Скриптинг]]></category>
		<category><![CDATA[Скрипты]]></category>
		<category><![CDATA[Links]]></category>

		<guid isPermaLink="false">http://adobeindesign.ru/?p=8763</guid>
		<description><![CDATA[Случалось ли вам получать файл, в котором все изображения были внедрены, а не прилинкованы? Такое случается не каждый день, но, как известно, It happens! К счастью в InDesign есть возможность извлечь все внедренные линки в отдельную папку. Правда с каждым линком придется возиться отдельно и если их много, то это довольно трудоемкая работа – выбрать линк, потом в контекстном меню или выпадающем меню палитры Links выбрать Unembed Link. Куда как проще сделать это с помощью скрипта.

Класс Link имеет метод unembed(), позволяющий извлечь линк из документа и сохранить отдельным файлом или перелинковать с существующим файлом. То есть, ...]]></description>
			<content:encoded><![CDATA[<p>Случалось ли вам получать файл, в котором все изображения были внедрены, а не прилинкованы? Такое случается не каждый день, но, как известно, It happens! К счастью в InDesign есть возможность извлечь все внедренные линки в отдельную папку. Правда с каждым линком придется возиться отдельно и если их много, то это довольно трудоемкая работа – выбрать линк, потом в контекстном меню или выпадающем меню палитры <strong>Links</strong> выбрать <strong>Unembed Link</strong>. Куда как проще сделать это с помощью скрипта.</p>
<p><span id="more-8763"></span></p>
<p>Класс <strong>Link</strong> имеет метод <strong>unembed()</strong>, позволяющий извлечь линк из документа и сохранить отдельным файлом или перелинковать с существующим файлом. То есть, если файла в папке назначения не существует, то InDesign создаст новый (извлекая его из документа). Причем файл хранится в документе целиком – если на одном компьютере внедрить <strong>psd</strong> со слоями, а на другой машине извлечь, то вы получите точно такой же файл! Все это замечательно, но вполне понятно, что это не лучший метод хранения файлов, поскольку размер файла верстки очень быстро растет, что в свою очередь замедляет работу с ним и создает вероятность ошибок.</p>
<p>Скрипт работает так:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">// ищем первый линк в документе</span>
<span style="color: #003366; font-weight: bold;">var</span> myLink <span style="color: #339933;">=</span> app.<span style="color: #660066;">activeDocument</span>.<span style="color: #660066;">links</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">// проверить статус внедрения</span>
$.<span style="color: #660066;">writeln</span><span style="color: #009900;">&#40;</span>myLink.<span style="color: #000066;">status</span> <span style="color: #339933;">==</span> LinkStatus.<span style="color: #660066;">LINK_EMBEDDED</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">// извлечь в папку по умолчанию</span>
myLink.<span style="color: #660066;">unembed</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">// извлечь в отдельную папку</span>
<span style="color: #006600; font-style: italic;">// если файл существует, то он будет переписан извлеченным файлом</span>
<span style="color: #003366; font-weight: bold;">var</span> myDest <span style="color: #339933;">=</span> Folder<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;/c/myDestination&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
myLink.<span style="color: #660066;">unembed</span><span style="color: #009900;">&#40;</span>myDest<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>А вот <a href="http://adobeindesign.ru/wp-content/uploads/UnEmbedAllLinks.zip">скрипт</a>, который перед тем как извлечь линки, спросит куда именно это сделать. И если вдруг окажется, что в папке назначения файл уже существует, то скрипт просто создаст связь с ним, вместо того, чтобы переписать файл поверх существующего (что происходит по умолчанию в методе <strong>unembed()</strong>). Просто и легко!</p>
<p>Автор скрипта &#8211; <strong>Marijan Tompa</strong></p>
<p>Взято <a href="http://indisnip.wordpress.com/2011/02/21/easy-way-to-unembed-all-embedded-links/">отюда</a></p>
<hr />
<p style="text-align: left;"><a href="http://adobeindesign.ru/wp-content/uploads/UnEmbedAllLinks.zip">Скачать UnEmbedAllLinks.jsx (zip)</a></p>
<p style="text-align: right;"><a href="http://adobeindesign.ru/wp-content/uploads/UnEmbedAllLinks.zip"></a><br />
Материал подготовил <span style="color: #993366;">Stacco</span></p>
]]></content:encoded>
			<wfw:commentRss>http://adobeindesign.ru/2011/03/03/unembed-links/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

