Get and Set Hatch Pattern Data Example (C#)

This example shows how to get and set Hatch pattern data.

//--------------------------------------------------------------
// Preconditions:
// 1.  Create a C# Windows console project.
// 2.  Copy and paste this example into the C# IDE.
// 3.  Add a reference to:
//     install_dir\APISDK\tlb\DraftSight.Interop.dsAutomation.dll.
// 4.  Add references to System and System.Windows.Forms.
// 5.  Make sure that C:\ProgramData\Dassault Systemes\DraftSight\Examples
//     exists.
// 6.  Copy all .dxf and .dwg files in this folder to a backup folder.
// 7.  Set all .dxf and .dwg files in
//     C:\ProgramData\Dassault Systemes\DraftSight\Examples
//     to read/write.
// 8.  Start DraftSight.
// 9.  Open the Immediate window.
// 10. Start debugging the project.
//
// Postconditions:
// 1. Each .dxf or .dwg file in
//    C:\ProgramData\Dassault Systemes\DraftSight\Examples is
//    filtered for Hatch patterns.
// 2. Hatch patterns are changed in the .dxf and .dwg files
//    that have them. Examine the Immediate window.
// 3. Copy all .dxf and .dwg files from the backup folder to
//   
C:\ProgramData\Dassault Systemes\DraftSight\Examples.
//----------------------------------------------------------------

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.IO;
using DraftSight.Interop.dsAutomation;
using System.Diagnostics;

namespace ChangeHatchPattern
{
    
class Program
    {
        
static void Main(string[] args)
        {
            
//Connect to DraftSight application
            DraftSight.Interop.dsAutomation.Application dsApp = ConnectToDraftSight();
            
if (null == dsApp)
            {
                
return;
            }

            dsApp.AbortRunningCommand(); //
abort any command currently running in DraftSight to avoid nested commands

            
//Check if the specified folder exists
            string folderName = "C:\\ProgramData\\Dassault Systemes\\DraftSight\\Examples";

            
if (false == Directory.Exists(folderName))
            {
                
Console.WriteLine("\"" + folderName + "\" does not exist.");
                
return;
            }

            
//Get drawing files in the folder
            List<string> drawings = GetDrawings(folderName);
            
if (0 == drawings.Count)
            {
                
MessageBox.Show ("There are no DWG/DXF files in \"" + folderName + "\" directory.");
                
return;
            }

            
//Iterate through all drawings
            foreach (string docName in drawings)
            {
                
//Open document
                Document dsDoc = dsApp.OpenDocument2(docName, dsDocumentOpenOption_e.dsDocumentOpen_Default, dsEncoding_e.dsEncoding_Default);
                
if (null != dsDoc)
                {

                    
//Print name of document
                    Debug.Print ("Name of document: " + dsDoc.GetPathName());
                    
                    
//Change Hatch pattern for all Hatch entities in the drawing
                    ChangeHatchPattern(dsDoc);

                    
//Save document
                    dsDoc.Save();

                    
//Close document
                    dsApp.CloseDocument(docName, true);
                }
                
else
                {
                    
MessageBox.Show("\"" + docName + "\" document could not be opened.");
                    
return;
                }
            }
        }

        
private static void ChangeHatchPattern(Document dsDoc)
        {
            
//Get model space
            Model dsModel = dsDoc.GetModel();

            
//Get Sketch Manager
            SketchManager dsSketchMgr = dsModel.GetSketchManager();

            
//GetSselection Manager
            SelectionManager dsSelectionMgr = dsDoc.GetSelectionManager();

            
//Get selection filter
            SelectionFilter dsSelectionFilter = dsSelectionMgr.GetSelectionFilter();

            
//Clear selection filter
            dsSelectionFilter.Clear();

            
//Add Hatch entity to the selection filter
            dsSelectionFilter.AddEntityType(dsObjectType_e.dsHatchType);

            
//Activate selection filter
            dsSelectionFilter.Active = true;

            
//Get all Layer names
            string[] layerNames = GetLayers(dsDoc);

            
object entityTypes;
            
object entityObjects;

            
//Get Hatch entities
            dsSketchMgr.GetEntities(dsSelectionFilter, layerNames, out entityTypes, out entityObjects);

            
object[] dsEntities = (object[])entityObjects;
            
if (entityObjects == null)
            {
                
Debug.Print("   Document does not have Hatch patterns.");
                
Debug.Print(" ");
            }
            
else
            {
                
Debug.Print("   Document has Hatch patterns.");


                
//Iterate through Hatch entities
                foreach (object entityItem in dsEntities)
                {
                    
//Cast to Hatch entity
                    Hatch dsHatch = entityItem as Hatch;

                    
//Get Hatch pattern
                    string patternName = "";
                    
double angle = 0.0;
                    
double scale = 0.0;
                    
dsHatchPatternType_e patternType = dsHatchPatternType_e.dsHatchPatternType_Predefined;
                    
double spacing = 1.0;
                    
HatchPattern dsHatchPattern = dsHatch.GetHatchPattern();

                    dsHatchPattern.GetHatchOrSolidData(
out patternName, out angle, out scale, out patternType, out spacing);
                    
Debug.Print ("   Pattern name, angle, scale, pattern types, spacing: " + patternName + ", " + angle + ", " +  scale + ", " +  patternType + ", " + spacing);

                    
//Update Hatch pattern
                    patternName = "HOUND";
                    angle = 0.0;
                    scale = 1.0;
                    patternType =
dsHatchPatternType_e.dsHatchPatternType_Predefined;
                    spacing = 1.0;
                    dsHatchPattern.SetHatchOrSolidData(patternName, angle, scale, patternType, spacing);
                }
                
Debug.Print(" ");
            }
        }

        
private static string[] GetLayers(Document dsDoc)
        {
            
//Get Layer Manager and Layer names
            LayerManager dsLayerManager = dsDoc.GetLayerManager();

            
object[] dsLayers = (object[])dsLayerManager.GetLayers();

            
string[] layerNames = new string[dsLayers.Length];

            
for (int index = 0; index < dsLayers.Length; ++index)
            {
                
Layer dsLayer = dsLayers[index] as Layer;
                layerNames[index] = dsLayer.Name;
            }

            
return layerNames;
        }

        
private static DraftSight.Interop.dsAutomation.Application ConnectToDraftSight()
        {
            DraftSight.Interop.dsAutomation.
Application dsApp = null;

            
try
            {
                
//Connect to DraftSight
                dsApp = (DraftSight.Interop.dsAutomation.Application)Marshal.GetActiveObject("DraftSight.Application");
            }
            
catch (Exception ex)
            {
                
Console.WriteLine("Failed to connect to DraftSight. Cause: " + ex.Message);
                dsApp =
null;
            }

            
return dsApp;
        }

        
private static List<string> GetDrawings(string folderName)
        {
            
List<string> drawings = new List<string>();
            
//Get DWG files
            string[] files = Directory.GetFiles(folderName, "*.dwg");
            
if (null != files)
            {
                drawings.AddRange(files);
            }

            
//Get DXF files
            files = Directory.GetFiles(folderName, "*.dxf");
            
if (null != files)
            {
                drawings.AddRange(files);
            }

            
return drawings;
        }
    }
}