CorelDRAW a skripty (3) - Pracujeme s vodícími linkami - Grafika.cz - vše o počítačové grafice

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



Vektory

CorelDRAW a skripty (3) - Pracujeme s vodícími linkami

corel

21. srpna 2002, 00.00 | Asi každý uživatel CorelDRAW se někdy dostal do křížku s vodícími linkami. Tentokrát si předvedeme několik skriptů, které mohou zjednodušit práci s nimi.

Vodící linky lze vytvářet několika způsoby. Vytáhnout si je z pravítek a zadat přesné umístění v panelu vlastností, vytvořit je pomocí Nástroje -> Možnosti (ctrl+j) -> Dokument -> Vodicí linky -> svislé / vodorovné / šikmé, nebo použít některé z předvoleb v tomtéž dialogovém okně. K dispozici máme několik předvoleb daných a jednu uživatelsky definovatelnou, které ovšem nelze použít společně. Pokud tedy chcete použít předvolbu Okraje stránky a ještě si k tomu přidat vlastní předvolbu vodících linek 5mm okolo stránky, jednoduše neuspějete.

Vytváříme vodící linky okolo stránky
Následující skript vytvoří 4 vodící linky okolo stránky a přidá další 4 odsazené o 5 mm směrem vně. Za zmínku stojí funkce .StartOfRecording, která zamezí programu CorelDRAW ukládání jednotlivých kroků (8 × vytvořit) do seznamů akcí k vrácení (undo). V seznamu akcí zpět se pak objeví jen jedna: Použít skript.

REM Vytvoří vodící linky okolo stránky
REM a přidá další 5mm vně stránky.

' Hodnota v mm, která určuje odsazení vodících linek,
' lze ji libovolně měnit. Pokud je nastavena na 0,
' linka okolo se nevytvoří. Lze zadávat i desetinná
' čísla, je nutno použít desetinnou tečku, nikoliv
' čárku (např. spad# = 2.5).
spad# = 5

' funkce pro konverzi milimetrů na desetiny mikronů
function dmic& (mm#)
    dmic& = mm# * 10000
end function

WITHOBJECT "CorelDraw.Automation.9"

  ' zjistí rozměry stránky
  .GetPageSize sirka&, vyska&

  ' přepočte jednotlivé hrany na základě
  ' rozměrů stránky
  horni& = vyska& / 2
  dolni& = -1 * vyska& / 2
  leva&  = -1 * sirka& / 2
  prava& = sirka& / 2

  ' zamezí aplikaci CorelDRAW ukládání jednotlivých kroků
  ' do paměti pro zpět (undo)
  .StartOfRecording 

  ' vytvoří vodící linky
  .CreateGuidelineUsingTwoPoints leva&, horni&, leva&, dolni&
  .CreateGuidelineUsingTwoPoints leva&, dolni&, prava&, dolni&
  .CreateGuidelineUsingTwoPoints prava&, dolni&, prava&, horni&
  .CreateGuidelineUsingTwoPoints prava&, horni&, leva&, horni&

  ' pokud je odsazení větší než nula, vytvoří další linky
  if spad# > 0 then

    ' přepočte zadané údaje odsazení v mm na desetiny mikronů
    oco& = dmic&(spad#)
    
    ' vytvoří vodící linky se zadaným odsazením
    .CreateGuidelineUsingTwoPoints \\
       leva&-oco&, horni&+oco&, leva&-oco&, dolni&-oco&
    .CreateGuidelineUsingTwoPoints \\
       leva&-oco&, dolni&-oco&, prava&+oco&, dolni&-oco&
    .CreateGuidelineUsingTwoPoints \\
       prava&+oco&, dolni&-oco&, prava&+oco&, horni&+oco&
    .CreateGuidelineUsingTwoPoints \\
       prava&+oco&, horni&+oco&, leva&-oco&, horni&+oco&
  endif

  ' odznačí výběr, jinak by po ukončení zůstala
  ' vybraná naposledy vytvořená linka
  .UnselectAll
  
  .EndOfRecording 
END WITHOBJECT

Ukázka použití

Vytváříme vodící linky okolo vybraného objektu
Někdy je potřeba vytvořit si vodící linky kolem vybraného objektu, nebo skupiny objektů. V Corelu prakticky není jiná možnost, než si vypočítat jednotlivé strany objektu a ručně vodící linky vytvořit. Tohle za nás ovšem může velice jednoduše udělat následující skript, který je v podstatě shodný, jako ukázka v prvním díle tohoto seriálu. Jen nebudeme kreslit obdélník, ale vodící linky. Tento skript funguje se všemi typy objektů. Pokud je vybráno více objektů, pracuje pouze s referenčním objektem, tj. naposledy přidaným do výběru. Skupina objektů je považována za jeden.

REM Vytvoří vodící linky kolem
REM aktuálně vybraného objektu.

WITHOBJECT "CorelDRAW.Automation.9"

  ' pokud je vybrána vodící linka, 
  ' skript ztrácí smysl
  if .GetObjectType() = 0 then
       ' oznámíme to uživateli, a skript ukončíme
    MessageBox "Vybraný objekt je nejspíš vodící linka," \\
           + chr(13) + "nelze kolem ní vytvářet další.", \\
           "Corel", 48
    stop
  endif

  ' nastavíme referenční bod vybraného objektu
  ' doleva nahoru a zjistíme jeho polohu
  .SetReferencePoint 3
  .GetPosition leva&, horni&

  ' nastavíme referenční bod vybraného objektu
  ' doprava dolu a zjistíme jeho polohu
  .SetReferencePoint 7
  .GetPosition prava&, dolni&

  ' pozastavíme zaznamenávání akcí
  .StartOfRecording 

  ' vytvoříme vodící linky
  .CreateGuidelineUsingTwoPoints leva&, horni&, leva&, dolni&
  .CreateGuidelineUsingTwoPoints leva&, dolni&, prava&, dolni&
  .CreateGuidelineUsingTwoPoints prava&, dolni&, prava&, horni&
  .CreateGuidelineUsingTwoPoints prava&, horni&, leva&, horni&

  ' odznačíme výběr
  .UnselectAll
  
  .EndOfRecording 
END WITHOBJECT

Ukázka použití

Vybíráme vodící linky
Pokud máte v dokumentu vetší množství vodících linek, manipulace s nimi nebývá jednoduchá. Přidávat do výběru jednu po druhé je poměrně zdlouhavé. Pomoci může také funkce Úpravy -> Vybrat vše -> Vodicí linky, ale ta, jak už její název napovídá, vybere všechny. Když chcete vybrat jen svislé nebo vodorovné (za účelem smazání nebo posunutí), poslouží vám k tomu tento skript, ve kterém si vytvoříme i jednoduché uživatelem definované dialogové okno.

REM Skript pro výběr vodících linek
REM v aktuálním dokumentu.

' do proměnné si zadáme text zobrazovaný
' v názvech zpráv a v dialogovém okně
AppTitle$ = "Vybrat vodicí linky"

' definice dialogu, argumenty jsou název, šířka, výška, titulek
BEGIN DIALOG Dialog1 160, 60, AppTitle$
  ' skupina přepínačů, argument je proměnná s jejich stavem
  OPTIONGROUP VybratJake%
    ' jednotlivé přepínače (x, y, šířka, výška a text)
    OPTIONBUTTON  7, 9, 88, 10, "Všech&ny"
    OPTIONBUTTON  7, 21, 88, 10, "&Vodorovné (horizontal)"
    OPTIONBUTTON  7, 33, 88, 10, "&Svislé (vertical)"
    OPTIONBUTTON  7, 44, 88, 10, "Šik&mé"
  ' výchozí tlačítko OK (x, y, šířka, výška)
  OKBUTTON  105, 26, 50, 14
  ' tlačítko storno (x, y, šířka, výška)
  CANCELBUTTON  105, 43, 50, 14
  ' rámeček okolo skupiny, nemá žádný funkční
  ' význam (x, y, šířka, výška a text)
  GROUPBOX  3, 1, 95, 56, ""
' konec definice dialogu
END DIALOG

WITHOBJECT "CorelDraw.Automation.9"

  ' pokud není otevřen žádný, vypíšeme upozornění a skončíme
  if not .IsDocument() then
    messagebox "V aplikaci CorelDRAW nejsou otevřeny" \\
               + " žádné dokumenty.", AppTitle$, 48
    stop
  endif

  ' zjistíme počet vodících linek v dokumentu
  linky% = .GetNumberOfGuidelines()

  ' pokud nejsou žádné, vypíšeme upozornění a skončíme
  if linky% = 0 then
    messagebox "V dokumentu nejou žádné vodící linky.", \\
               AppTitle$, 48
    stop
  ' pokud je jich více než 200, upozorníme uživatele,
  ' že výběr bude trvat déle a zeptáme se, zda pokračovat.
  elseif linky% => 200 then
    ret% = messagebox ("V dokumentu je více než 200 " \\
         + "vodících linek." + chr(13)+ "Jejich výběr" \\
         + " může trvat dlouho." + chr(13) \\
         + "Chcete pokračovat?", AppTitle$, 36)
    ' pokud uživatel nechce pokračovat, ukončíme skript.
    if ret% = 7 then stop
  endif

  ' zobrazí dialogové okno, do proměnné dotaz%
  ' vrátí index stisknutého tlačítka
  dotaz% = DIALOG(Dialog1)

  ' když bylo zvoleno jiné tlačítko než OK (enter),
  ' ukončíme skript
  if dotaz% <> 1 then stop

  ' pokud jsou vybrány nějaké objekty, odznačíme je,
  ' abychom nepřidávali vodící linky do stávajícího výběru
  .UnSelectAll

  ' proměnná určující, zda byla vybrána alespoň jedna linka
  vybrano = false

  ' zamezí vykreslovaní jednotlivých kroků,
  ' to může urychlit běh skriptu
  .SuppressPainting true

  ' cyklus FOR - NEXT projde všechny vodící linky, první linka
  ' má index 0, takže je třeba od celkového počtu odečíst 1
  for i% = 0 to linky% - 1

    ' zjistíme pozici aktuální vodící linky 
    .GetGuidelineInformation i%, linkaX&, linkaY&,,,,,uhel&
    
    ' proměnná určující, zda přidat linku do výběru, nebo ne
    vybrat = false

    ' na základě volby v dialogovém okně nastaví proměnné
    ' vybrat a vybráno na true
    select case VybratJake%
      case 0      ' volba všchny
        vybrat = true
        vybrano = true
      case 1      ' volba vodorovné
        ' pokud je úhel linky 0°, je vodorovná
        if uhel& = 0 then
          vybrat = true
          vybrano = true
        endif
      case 2      ' volba svislé
        ' pokud je úhel linky 90°, je vodorovná
        ' úhel je udáván v milióntinách stupně
        if uhel& = 90000000 then
          vybrat = true
          vybrano = true
        endif
      case 3      ' volba šikmé
        ' pokud není úhel linky 90°, ani 0° je šikmá
        if uhel& <> 90000000 and uhel& <> 0 then
          vybrat = true
          vybrano = true
        endif
    end select
    ' pokud aktuální linka odpovídá volbě z dialogu,
    ' přidáme ji do výběru.
    if vybrat then .SelectObjectAtPoint linkaX&, linkaY&, FALSE
  next

  ' obnovíme vykreslování
  .ResumePainting 

  ' pokud nebyla vybrána žádná odpovídající linka
  if not vybrano then
    ' zvolíme správný text
    select case VybratJake%
      case 1
        ktere$ = "vodorovné"
      case 2
        ktere$ = "svislé"
      case 3
        ktere$ = "šikmé"
    end select

    ' a oznámíme tuto skutečnost uživateli
    messagebox "V dokumentu nejou žádné " + \\
        ktere$ + " vodící linky." + chr(13) + \\
        "Nic nebylo vybráno", AppTitle$, 48
  endif

END WITHOBJECT

Ukázka použití

Zde si můžete stáhnout všechny tři hotové skripty pro práci s vodícími linkami. Zabaleno v zip archivu, verze pro CorelDRAW8, CorelDRAW9, nebo CorelDRAW10.

To je pro dnešek vše. V příštím díle si ukážeme několik způsobů, kterými lze v CorelDRAW spouštět skripty.

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » Go verze  

 » Rubriky  » Vektory  

 

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: