Travailler avec des motifs de hachures dans PostScript | C++
Ajouter un motif de hachures dans un document PS
Le motif de hachures est un motif de carrelage texturé généralement représenté par une petite image simple en 2 couleurs (généralement en noir et blanc). Le contenu principal de ces petites images est constitué de diverses hachures.
Pour la peinture par hachures, la plate-forme C++ dispose d’une classe distincte, dérivée de System.Drawing.Brush, System.Drawing.HatchBrush. Sa différence avec System.Drawing.TextureBrush est qu’il a nommé des styles prédéfinis définissant quelle image utiliser pour le carrelage. La plate-forme C++ propose 53 styles de hachures et les 52 styles peuvent être utilisés pour le remplissage ou le contour (contour) dans PsDocument.
Afin de peindre des objets graphiques avec un motif de hachures dans la bibliothèque Aspose.Page pour C++, il suffit simplement de passer System.Drawing.HatchBrush à SetPaint() ou à l’un des FillText( ) ou FillAndStrokeText() qui acceptent System.Drawing.Brush comme paramètre.
Afin de décrire les objets graphiques avec un motif de hachures dans la bibliothèque Aspose.Page pour C++, quelqu’un doit créer un nouveau System.Drawing.Pen avec System.Drawing.HacthBrush et le transmettre à SetStroke( ) ou l’une des méthodes OutlineText() ou FillAndStrokeText() qui acceptent System.Drawing.Pen comme paramètre.
Dans l’exemple ci-dessous, nous montrons, tout d’abord, comment remplir une forme avec un motif de hachures, puis toutes les variétés de styles de hachures en C++ et, enfin, comment remplir et décrire un texte avec un motif de hachures.
Un algorithme pour peindre des objets graphiques avec un motif de hachures dans un nouveau document PS comprend les étapes suivantes :
- Créez un flux de sortie pour le fichier PS résultant.
- Créez PsSaveOptions.
- Créez PsDocument avec le flux de sortie déjà créé et enregistrez les options.
- Créez le chemin graphique ou la police nécessaire en fonction de l’objet que nous allons remplir ou décrire.
- Créez un objet de System.Drawing.HatchBrush avec un style pieux.
- Définissez le pinceau de hachures comme peinture actuelle dans PsDocument
- Remplissez le chemin graphique avec la peinture actuelle ou remplissez un texte. Si nous utilisons l’une des méthodes de remplissage d’un texte qui accepte System.Drawing.Brush comme paramètre, le point précédent peut être ignoré.
- Fermez la page.
- Enregistrez le document.
Si nous avons besoin de tracer (décrire) des objets graphiques avec un motif de hachures au lieu des 4 derniers points, ce qui suit sera :
Créez un objet System.Drawing.Pen avec le pinceau de hachures.
Définissez ce stylet comme trait actuel dans PsDocument.
Décrivez le chemin graphique avec le trait actuel ou décrivez le texte. Si nous utilisons l’une des méthodes pour décrire le texte qui accepte System.Drawing.Pen comme paramètre, le point précédent peut être ignoré.
Fermez la page.
Enregistrez le document.
1 // The path to the documents directory.
2 System::String dataDir = RunExamples::GetDataDir_WorkingWithHatches();
3
4 //Create output stream for PostScript document
5 {
6 System::SharedPtr<System::IO::Stream> outPsStream = System::MakeObject<System::IO::FileStream>(dataDir + u"AddHatchPattern_outPS.ps", System::IO::FileMode::Create);
7 // Clearing resources under 'using' statement
8 System::Details::DisposeGuard<1> __dispose_guard_0({ outPsStream});
9 // ------------------------------------------
10
11 try
12 {
13 //Create save options with A4 size
14 System::SharedPtr<PsSaveOptions> options = System::MakeObject<PsSaveOptions>();
15
16 // Create new 1-paged PS Document
17 System::SharedPtr<PsDocument> document = System::MakeObject<PsDocument>(outPsStream, options, false);
18
19 int32_t x0 = 20;
20 int32_t y0 = 100;
21 int32_t squareSide = 32;
22 int32_t width = 500;
23 int32_t sumX = 0;
24
25 //Restore graphics state
26 document->WriteGraphicsSave();
27
28 //Translate to initial point
29 document->Translate(static_cast<float>(x0), static_cast<float>(y0));
30
31 //Create rectngle path for every pattern square
32 System::SharedPtr<System::Drawing::Drawing2D::GraphicsPath> path = System::MakeObject<System::Drawing::Drawing2D::GraphicsPath>();
33 path->AddRectangle(System::Drawing::RectangleF(0.0f, 0.0f, static_cast<float>(squareSide), static_cast<float>(squareSide)));
34
35 //Create pen for outlining pattern square
36 System::SharedPtr<System::Drawing::Pen> pen = System::MakeObject<System::Drawing::Pen>(System::Drawing::Color::get_Black(), 2.0f);
37
38 //For every hatch pattern style
39 for (System::Drawing::Drawing2D::HatchStyle hatchStyle = static_cast<System::Drawing::Drawing2D::HatchStyle>(0); hatchStyle <= (System::Drawing::Drawing2D::HatchStyle)52; hatchStyle++)
40 {
41 //Set paint with current hatch brush style
42 document->SetPaint(System::MakeObject<System::Drawing::Drawing2D::HatchBrush>(hatchStyle, System::Drawing::Color::get_Black(), System::Drawing::Color::get_White()));
43
44 //Calculate displacement in order to don't go beyond the page bounds
45 int32_t x = squareSide;
46 int32_t y = 0;
47 if (sumX >= width)
48 {
49 x = -(sumX - squareSide);
50 y += squareSide;
51 }
52 //Translate current graphics state
53 document->Translate(static_cast<float>(x), static_cast<float>(y));
54 //Fill pattern square
55 document->Fill(path);
56 //Set stroke
57 document->SetStroke(pen);
58 //Draw square outline
59 document->Draw(path);
60
61 //Calculate distance from X0
62 if (sumX >= width)
63 {
64 sumX = squareSide;
65 }
66 else
67 {
68 sumX += x;
69 }
70 }
71
72 //Restore graphics state
73 document->WriteGraphicsRestore();
74
75 //Fill text with hatch pattern
76 System::SharedPtr<System::Drawing::Drawing2D::HatchBrush> brush = System::MakeObject<System::Drawing::Drawing2D::HatchBrush>(System::Drawing::Drawing2D::HatchStyle::DiagonalCross, System::Drawing::Color::get_Red(), System::Drawing::Color::get_Yellow());
77 System::SharedPtr<System::Drawing::Font> font = System::MakeObject<System::Drawing::Font>(u"Arial", 96.0f, System::Drawing::FontStyle::Bold);
78 document->FillAndStrokeText(u"ABC", font, 200.0f, 300.0f, brush, pen);
79
80 //Outline text with hatch pattern
81 brush = System::MakeObject<System::Drawing::Drawing2D::HatchBrush>(System::Drawing::Drawing2D::HatchStyle::Percent50, System::Drawing::Color::get_Blue(), System::Drawing::Color::get_White());
82 document->OutlineText(u"ABC", font, 200.0f, 400.0f, System::MakeObject<System::Drawing::Pen>(brush, 5.0f));
83
84
85 //Close current page
86 document->ClosePage();
87
88 //Save the document
89 document->Save();
90 }
91 catch(...)
92 {
93 __dispose_guard_0.SetCurrentException(std::current_exception());
94 }
95 }
Voir Travailler avec un motif de hachures dans un document PS dans Java.
Le résultat de l’exécution de ce code apparaît comme
Vous pouvez télécharger des exemples et des fichiers de données à partir de GitHub.