Arbeiten mit Schraffurmustern in PostScript | C++

Schraffurmuster im PS-Dokument hinzufügen

Das Schraffurmuster ist ein Texturkachelmuster, das normalerweise durch ein kleines, zweifarbiges (normalerweise schwarz-weißes) einfaches Bild dargestellt wird. Der Hauptinhalt dieser kleinen Bilder sind verschiedene Schraffuren.

Für das Malen durch Schraffuren verfügt die C++-Plattform über eine separate Klasse, abgeleitet von System.Drawing.Brush, System.Drawing.HatchBrush. Der Unterschied zu System.Drawing.TextureBrush besteht darin, dass es vordefinierte Stile benannt hat, die definieren, welches Bild für die Kachelung verwendet werden soll. Die C++-Plattform bietet 53 Schraffurstile und alle 52 Stile können zum Füllen oder Strichen (Konturieren) in PsDocument verwendet werden.

Um Grafikobjekte mit einem Schraffurmuster in der Bibliothek Aspose.Page für C++ zu malen, reicht es aus, einfach System.Drawing.HatchBrush an SetPaint() oder einen der FillText( ) oder FillAndStrokeText()-Methoden, die System.Drawing.Brush als Parameter akzeptieren.

Um Grafikobjekte mit einem Schraffurmuster in der Aspose.Page für C++-Bibliothek zu umreißen, sollte jemand einen neuen System.Drawing.Pen mit System.Drawing.HacthBrush erstellen und ihn an SetStroke( ) oder eine der Methoden OutlineText() oder FillAndStrokeText(), die System.Drawing.Pen als Parameter akzeptieren.

Im folgenden Beispiel zeigen wir zunächst, wie Sie eine Form mit einem Schraffurmuster füllen, dann alle verschiedenen Schraffurstile in C++ und schließlich, wie Sie einen Text mit einem Schraffurmuster füllen und umreißen.

Ein Algorithmus zum Malen von Grafikobjekten mit einem Schraffurmuster in einem neuen PS-Dokument umfasst die folgenden Schritte:

  1. Erstellen Sie einen Ausgabestream für die resultierende PS-Datei.
  2. Erstellen Sie PsSaveOptions.
  3. Erstellen Sie PsDocument mit dem bereits erstellten Ausgabestream und den Speicheroptionen.
  4. Erstellen Sie den erforderlichen Grafikpfad oder die erforderliche Schriftart, abhängig davon, welches Objekt wir füllen oder umreißen möchten.
  5. Erstellen Sie ein Objekt von System.Drawing.HatchBrush mit Wunschstil.
  6. Legen Sie den Schraffurpinsel als aktuelle Farbe in PsDocument fest
  7. Füllen Sie den Grafikpfad mit der aktuellen Farbe oder füllen Sie einen Text. Wenn wir eine der Methoden zum Füllen eines Textes verwenden, die System.Drawing.Brush als Parameter akzeptiert, kann der vorherige Punkt ignoriert werden.
  8. Schließen Sie die Seite.
  9. Speichern Sie das Dokument.

Wenn wir Grafikobjekte mit einem Schraffurmuster anstelle der letzten 4 Punkte streichen (umreißen) benötigen, ist Folgendes: 6. Erstellen Sie das Objekt System.Drawing.Pen mit dem Schraffurpinsel.

  1. Legen Sie diesen Stift als aktuellen Strich in PsDocument fest.

  2. Umreißen Sie den Grafikpfad mit dem aktuellen Strich oder umreißen Sie den Text. Wenn wir eine der Methoden zum Umreißen des Textes verwenden, die System.Drawing.Pen als Parameter akzeptiert, kann der vorherige Punkt ignoriert werden.

  3. Schließen Sie die Seite.

  4. Speichern Sie das Dokument.

 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    }

Weitere Informationen finden Sie unter „Arbeiten mit einem Schraffurmuster im PS-Dokument“ in Java.


Das Ergebnis der Ausführung dieses Codes wird wie folgt angezeigt:

Schraffurmuster hinzufügen

Sie können Beispiele und Datendateien herunterladen von GitHub.

Have any questions about Aspose.Page?



Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.