Редактирование определения штриховки

Возможно отредактировать шаблон в определении штриховки: изменить угол или интервал заполнения, задать иное имя шаблона (например, сплошную заливку SOLID) или сменить заливку на градиентное заполнение. Вы можете использовать некоторые из перечисленных ниже методов и свойств:

  • GradientAngle : возвращает или задает угол градиента;
  • GradientName : возвращает наименование градиентной заливки (если использовался преднастроенный стиль из поставки);
  • GradientShift : возвращает или задает сдвиг градиента (определяет позицию, где будет центр смены цветов);
  • GradientType : возвращает тип градиентной заливки;
  • PatternAngle : возвращает или задает угол штриховки;
  • PatternDouble : возвращает признак, является ли штриховка наложенной;
  • PatternType : возвращает тип образца штриховки;
  • SetHatchPattern : задает тип образца штриховки;
  • PatternName : возвращает имя образца штриховки;
  • SetHatchPattern : задает имя образца штриховки;
  • PatternScale : возвращает или задает масштаб штриховки;
  • PatternSpace : возвращает или задает интервал штриховки;
  • SetGradient : задает тип и имя образца градиента;

Изменение имени образца штриховки

В примере ниже создается определение штриховки, контуром которого выступает окружность. После добавления контура редактируются значения PatternScale и HatchPattern.

using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
 
[CommandMethod("EditHatchPatternScale")]
public static void EditHatchPatternScale()
{
    // Get the current document and database
    Document acDoc = Application.DocumentManager.MdiActiveDocument;
    Database acCurDb = acDoc.Database;

    // Start a transaction
    using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
    {
        // Open the Block table for read
        BlockTable acBlkTbl;
        acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,
                                        OpenMode.ForRead) as BlockTable;

        // Open the Block table record Model space for write
        BlockTableRecord acBlkTblRec;
        acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
                                        OpenMode.ForWrite) as BlockTableRecord;

        // Create a circle object for the boundary of the hatch
        using (Circle acCirc = new Circle())
        {
            acCirc.Center = new Point3d(5, 3, 0);
            acCirc.Radius = 3;

            acBlkTblRec.AppendEntity(acCirc);
            acTrans.AddNewlyCreatedDBObject(acCirc, true);

            // Adds the arc and line to an object id collection
            ObjectIdCollection acObjIdColl = new ObjectIdCollection();
            acObjIdColl.Add(acCirc.ObjectId);

            // Create the hatch object and append it to the block table record
            using (Hatch acHatch = new Hatch())
            {
                acBlkTblRec.AppendEntity(acHatch);
                acTrans.AddNewlyCreatedDBObject(acHatch, true);

                // Set the properties of the hatch object
                // Associative must be set after the hatch object is appended to the 
                // block table record and before AppendLoop
                acHatch.SetHatchPattern(HatchPatternType.PreDefined, "ANSI31");
                acHatch.Associative = true;
                acHatch.AppendLoop(HatchLoopTypes.Outermost, acObjIdColl);

                // Evaluate the hatch
                acHatch.EvaluateHatch(true);

                // Increase the pattern scale by 2 and re-evaluate the hatch
                acHatch.PatternScale = acHatch.PatternScale + 2;
                acHatch.SetHatchPattern(acHatch.PatternType, acHatch.PatternName);
                acHatch.EvaluateHatch(true);
            }
        }

        // Save the new object to the database
        acTrans.Commit();
    }
}