Как проверить средствами .NET имеется ли в типе линии текст или нет
Недавно партнер ADN поинтересовался методом, который позволил бы определить содержится ли текст в типе линии или нет перед тем, как получить этот текст.
Чтобы получить текст из типа линии можно воспользоваться методом LinetypeTableRecord.TextAt, но он генерирует исключение eNotApplicable если текста нет в переданном индексе типа линии. Чтобы исключить генерацию исключения можно проверить на ObjectId.Null значение, которое возвращает LinetypeTableRecord.ShapeStyleAt. Этот метод возвращает ObjectId.Null если нет текста в указанном индексе в LinetypeTableRecord.
Вот короткий пример проверки наличия текста перед извлечением текста из типа линии :
- [CommandMethod("LineTypeText")]
- public void LineTypeText()
- {
- Document doc = Application.DocumentManager.MdiActiveDocument;
- Database db = doc.Database;
- Transaction tr = db.TransactionManager.StartTransaction();
- Editor ed = doc.Editor;
- using (tr)
- {
- DBObject tmpObj = tr.GetObject(db.LinetypeTableId, OpenMode.ForRead);
- LinetypeTable pLineTable = (LinetypeTable)tmpObj;
- if ((pLineTable != null))
- {
- foreach (ObjectId tblRecId in pLineTable)
- {
- LinetypeTableRecord pLineType = (LinetypeTableRecord)tr.GetObject(tblRecId, OpenMode.ForRead);
- if ((pLineType != null))
- {
- for (int dash = 0; dash < pLineType.NumDashes; dash++)
- {
- /* LinetypeTableRecord.ShapeStyleAt возвращает ObjectId TextStyleTableRecord для формы
- (или текстового стиля для текста если это текст вместо формы) по указанному индексу в LinetypeTableRecord.
- Если нет ни текста, ни формы в этом индексе то возвращается ObjectId.Null.*/
- ObjectId objIdShape = pLineType.ShapeStyleAt(dash);
- if (objIdShape != ObjectId.Null)
- {
- string pText = "";
- pText = pLineType.TextAt(dash);
- if (pText == "")
- {
- ed.WriteMessage("Нет текста в тире");
- }
- else
- {
- ed.WriteMessage("Тире: " + dash.ToString());
- ed.WriteMessage("\nТире текст: " + pText);
- }
- }
- }
- }
- }
- }
- }
- }
Вот так выглядят результаты работы этого кода:
Обсуждение: http://adn-cis.org/forum/index.php?topic=7911
Опубликовано 10.07.2017