eInvalidInput при создании штриховки с пользовательским шаблоном
Если метод SetHatchPattern возбуждает исключение eInvalidInput при создании пользовательского шаблона штриховки, есть несколько моментов, которые стоит проверить:
1) Имеет ли правильное имя файл штриховки, который определяет пользовательский образец штриховки? Имя пользовательского образца и имя файла должны совпадать.
2) Добавлен ли каталог, в котором содержится файл штриховки в пути поддержки AutoCAD?
3) Всё ли хорошо с разрывами строк в файле штриховки? Самый простой способ убедиться, что всё нормально, это взять существующий файл пользовательского шаблона штриховки и изменить определения в соответствии с вашими требованиями. AutoCAD чувствителен к разрывам строк в файле штриховки и исключение eInvalidInput может быть сложно обнаружить. Вы можете найти несколько интернет-ресурсов, таких как этот, чтобы загрузить готовые файлы пользовательских шаблонов штриховок.
Это пример кода, который проверяет пользовательский шаблон штриховки:
- Document doc = Application.DocumentManager.MdiActiveDocument;
- Database db = doc.Database;
- Editor ed = doc.Editor;
- PromptResult prHatchPatternName
- = ed.GetString("\nВведите имя пользовательского шаблона штриховки: ");
- if (prHatchPatternName.Status != PromptStatus.OK)
- return;
- string patName = prHatchPatternName.StringResult;
- PromptPointResult ppr = ed.GetPoint("Укажите точку вставки: ");
- if (ppr.Status != PromptStatus.OK)
- return;
- Point3d insertionPt = ppr.Value;
- try
- {
- using (Transaction tr = db.TransactionManager.StartTransaction())
- {
- BlockTable bt
- = tr.GetObject(db.BlockTableId, OpenMode.ForWrite) as BlockTable;
- BlockTableRecord btr
- = tr.GetObject( bt[BlockTableRecord.ModelSpace],
- OpenMode.ForWrite
- ) as BlockTableRecord;
- Point2d pt = new Point2d(insertionPt.X, insertionPt.Y);
- Polyline plBox;
- plBox = new Polyline(4);
- plBox.Normal = Vector3d.ZAxis;
- plBox.AddVertexAt(0, pt, 0.0, -1.0, -1.0);
- plBox.AddVertexAt(1,
- new Point2d(pt.X + 10, pt.Y), 0.0, -1.0, -1.0);
- plBox.AddVertexAt(2,
- new Point2d(pt.X + 10, pt.Y + 5), 0.0, -1.0, -1.0);
- plBox.AddVertexAt(3,
- new Point2d(pt.X, pt.Y + 5), 0.0, -1.0, -1.0);
- plBox.Closed = true;
- ObjectId pLineId;
- pLineId = btr.AppendEntity(plBox);
- tr.AddNewlyCreatedDBObject(plBox, true);
- ObjectIdCollection ObjIds = new ObjectIdCollection();
- ObjIds.Add(pLineId);
- Hatch hatchObj = new Hatch();
- hatchObj.SetDatabaseDefaults();
- Vector3d normal = new Vector3d(0.0, 0.0, 1.0);
- hatchObj.HatchObjectType = HatchObjectType.HatchObject;
- hatchObj.Color =
- Autodesk.AutoCAD.Colors.Color.FromColor(
- System.Drawing.Color.Blue
- );
- hatchObj.Normal = normal;
- hatchObj.Elevation = 0.0;
- hatchObj.SetHatchPattern(
- HatchPatternType.CustomDefined, patName);
- btr.AppendEntity(hatchObj);
- tr.AddNewlyCreatedDBObject(hatchObj, true);
- hatchObj.Associative = true;
- hatchObj.AppendLoop((int)HatchLoopTypes.Default, ObjIds);
- hatchObj.EvaluateHatch(true);
- tr.Commit();
- }
- }
- catch (System.Exception ex)
- {
- ed.WriteMessage(ex.ToString() + Environment.NewLine);
- }
Обсуждение: http://adn-cis.org/forum/index.php?topic=103.0
Отредактировано 20.06.2013 в 22:33:02