Corel Draw用のアドオン(Docker)の作成

Corel Drawでは、バージョン17以降、VBAだけでなくC#VSTAでもアドオンを作成できる便利な機会があります。それでは、これを利用して、MakeNiceボタンの夢を近づけましょう





免責事項

プログラマー向け-2002年以来、私は印刷所でプリプレスエンジニアとして働いています。私にとって、プログラミングは趣味です。コードと説明の両方が完璧ではありません。したがって、私は校正と批判を喜んでします。





印刷業者の場合-傾斜は特殊なプログラムで収集されることを理解していますが、私の都市の現実では、これはお勧めできません。流通量は少ないですが、逆にレイアウト数が多く、95%がCorelDrawで作られています。





魔法を機能させるために必要なもの:

コーレルドロー





Visual Studio





アプリケーション用のVisualStudioツール(単純なマクロを作成する場合はオプション)





Cの基礎知識#





WPFの基礎知識









記述の便宜のために、「bonus360からVisualStudioのアドオンを使用します





CorelDrawアドオンテンプレート





CorelDrawアドオンパッカー






スタジオを管理者として実行して、コンパイル時にファイルをシステムフォルダーにコピーしてみましょう。テンプレートとして「CorelDRAWDockerAddon」を選択して、新しいプロジェクトを作成します。「MagicUtilites」などの名前を割り当てます。





,   “MagicUtilites”, CorelDraw, . “Done” .





. , Extensions.cs, .





F5 CorelDraw - Window - Dockers . , .






DockerUI.xaml



XAML .





<Grid Margin="0,0,0,0">
	<StackPanel>
		<Button Content="Text Convert to Curves" Height="25" Margin="4" Click="Button_Click"/>
	</StackPanel>
</Grid>
      
      



MVVM ( WPF), . , .






DockerUI.xaml.cs







private corel.Application corelApp;
      
      



corel.Application



, . .





Button_Click



.





, CorelDraw . , .





private void Button_Click(object sender, RoutedEventArgs e)
{
  if (corelApp.ActiveDocument == null)
		return;
}
      
      



ActiveDocument



corel.Application



.





.





private void Button_Click(object sender, RoutedEventArgs e)
{
	if (corelApp.ActiveDocument == null)
		return;

	corelApp.BeginDraw();

	corelApp.EndDraw();
}
      
      



. BeginDraw()



, corel . EndDraw()







. corel .





private void Button_Click(object sender, RoutedEventArgs e)
{
  if (corelApp.ActiveDocument == null)
    return;

  corelApp.BeginDraw();

  foreach (corel.Page page in corelApp.ActiveDocument.Pages)
  {
    foreach (corel.Shape shape in page.Shapes.All())
    {
      if (shape.Type == corel.cdrShapeType.cdrTextShape)
        shape.ConvertToCurves();
    }
  }

  corelApp.EndDraw();
}
      
      







, ConvertToCurves()



, corel .





. “Text Convert to Curves” . corel , PowerClip . 





, Corel Draw .





corel.Shape



corel . Type



corel . corel.Shape



corel , Type



cdrGroupShape



. Shapes



, corel .





corel . Type



cdrBitmapShape



, Bitmap



. Type



cdrGuidelineShape



, Guide







corel – PowerClip . corel PowerClip-, PowerClip



null.





.





corel . 





private void MakeToAllPages()
{
  if (corelApp.ActiveDocument == null)
    return;
  corelApp.BeginDraw();
  foreach (corel.Page page in corelApp.ActiveDocument.Pages)
  {
    MakeToShapeRange(page.Shapes.All());
  }
  corelApp.EndDraw();
}
      
      



MakeToAllPages



.





private void MakeToShapeRange(corel.ShapeRange sr)
{
  foreach (corel.Shape shape in sr)
  {
    if (shape.Type == corel.cdrShapeType.cdrGroupShape)
      MakeToShapeRange(shape.Shapes.All());

    if (shape.PowerClip != null)
      MakeToShapeRange(shape.PowerClip.Shapes.All());

    if (shape.Type == corel.cdrShapeType.cdrTextShape)
      shape.ConvertToCurves();
  }
}
      
      



MakeToShapeRange



corel .





corel , corel . corel PowerClip- , corel . corel , .





private void Button_Click(object sender, RoutedEventArgs e)
{
  MakeToAllPages();
}
      
      



Button_Click



MakeToAllPages



.





. PowerClip.






, , .

<StackPanel>
  <Button Content="Text convert to curves" Height="25" Margin="4" Click="ConvertToCurves"/>
  <Separator Margin="4"/>
  <Button Content="Uniform fill to CMYK" Height="25" Margin="4" Click="UniformFillToCMYK"/>
  <Button Content="Outline fill to CMYK" Height="25" Margin="4" Click="OutlineFillToCMYK"/>
  <Button Content="Fountain fill to CMYK" Height="25" Margin="4" Click="FountainFillToCMYK"/>
  <Separator Margin="4"/>
  <Button Content="Bitmap to CMYK" Height="25" Margin="4" Click="BitmapToCMYK"/>
  <Button Content="Resample Bitmap to 300 dpi" Height="25" Margin="4" Click="ResampleBitmap"/>
</StackPanel>
      
      



.





private void ConvertToCurves(object sender, RoutedEventArgs e){}

private void BitmapToCMYK(object sender, RoutedEventArgs e){}

private void UniformFillToCMYK(object sender, RoutedEventArgs e){}

private void OutlineFillToCMYK(object sender, RoutedEventArgs e){}

private void FountainFillToCMYK(object sender, RoutedEventArgs e){}

private void ResampleBitmap(object sender, RoutedEventArgs e){}
      
      



corel MakeToShapeRange



. , corel . MakeToShapeRange



, .





MakeToAllPages()



MakeToAllPages(Action<corel.Shape> action)



. MakeToShapeRange



. MakeToAllPages



.





private void MakeToAllPages(Action<corel.Shape> action)
{
  if (corelApp.ActiveDocument == null)
    return;
  corelApp.BeginDraw();
  foreach (corel.Page page in corelApp.ActiveDocument.Pages)
  {
    MakeToShapeRange(page.Shapes.All(), action);
  }
  corelApp.EndDraw();
}

private void MakeToShapeRange(corel.ShapeRange sr, Action<corel.Shape> action)
{
  foreach (corel.Shape shape in sr)
  {
    if (shape.Type == corel.cdrShapeType.cdrGroupShape)
      MakeToShapeRange(shape.Shapes.All(), action);

    if (shape.PowerClip != null)
      MakeToShapeRange(shape.PowerClip.Shapes.All(), action);

    action(shape);
  }
}
      
      



.





MakeToAllPages



  .





.





private void ConvertToCurves(object sender, RoutedEventArgs e)
{
  MakeToAllPages((s) =>
  {
    if (s.Type == corel.cdrShapeType.cdrTextShape) //  
      s.ConvertToCurves(); //   
  });
}

private void BitmapToCMYK(object sender, RoutedEventArgs e)
{
  MakeToAllPages((s) =>
  {
    if (s.Type == corel.cdrShapeType.cdrBitmapShape) //  
      if (s.Bitmap.Mode != corel.cdrImageType.cdrCMYKColorImage) //    CMYK
        s.Bitmap.ConvertTo(corel.cdrImageType.cdrCMYKColorImage); //   CMYK
  });
}

private void UniformFillToCMYK(object sender, RoutedEventArgs e)
{
  MakeToAllPages((s) =>
  {
    if (s.CanHaveFill) //     
      if (s.Fill.Type == corel.cdrFillType.cdrUniformFill) //  
        if (s.Fill.UniformColor.Type != corel.cdrColorType.cdrColorCMYK) //    CMYK
          s.Fill.UniformColor.ConvertToCMYK(); //   CMYK
  });
}

private void OutlineFillToCMYK(object sender, RoutedEventArgs e)
{
  MakeToAllPages((s) =>
  {
    if (s.CanHaveOutline) //     
      if (s.Outline.Type == corel.cdrOutlineType.cdrOutline) //  
        if (s.Outline.Color.Type != corel.cdrColorType.cdrColorCMYK) //    CMYK
          s.Outline.Color.ConvertToCMYK(); //   CMYK
  });
}

private void FountainFillToCMYK(object sender, RoutedEventArgs e)
{
  MakeToAllPages((s) =>
  {
    if (s.CanHaveFill) //     
      if (s.Fill.Type == corel.cdrFillType.cdrFountainFill) //  
      {
        foreach (corel.FountainColor c in s.Fill.Fountain.Colors) //     
        {
          if (c.Color.Type != corel.cdrColorType.cdrColorCMYK) //    CMYK
            c.Color.ConvertToCMYK(); //   CMYK
        }
      }
  });
}

private void ResampleBitmap(object sender, RoutedEventArgs e)
{
  MakeToAllPages((s) =>
  {
    int resolution = 300;
    if (s.Type == corel.cdrShapeType.cdrBitmapShape) //  
      if (s.Bitmap.ResolutionX != resolution || s.Bitmap.ResolutionY != resolution) //     
        s.Bitmap.Resample(0, 0, true, resolution, resolution); //    
  });
}
      
      



.






.





次の記事では、降下にカットマークを自動的に描画するドッカーを作成する方法について説明します。






この機会を利用して、Konturの非常にクールで無料のインタラクティブなオンラインプログラミングコースをお勧めします。Pavel ShmachilinのWPFチャンネルもお勧めします。これは、このトピックに関してYouTubeで見た中で最高のものです。








All Articles