我需要打开给定的路径图形文件,然后选择图形的所有线条,然后列出线条的编号。我不能做这些事情,因为我打开然后设置MdiActiveDocument方法返回。下面的行不会被执行。
private static int GetNumberofLines(string drawingName)
{
int lineCount = 0;
DocumentCollection docMgr = AutoCAD.ApplicationServices.Application.DocumentManager;
Document doc = docMgr.Open(drawingName, false);
docMgr.MdiActiveDocument = doc; // in this line method is skipped
TypedValue[] filterlist = new TypedValue[1]; //cursor didn't come this line..
filterlist[0] = new TypedValue((int)DxfCode.Start, "Line");
SelectionFilter filter = new SelectionFilter(filterlist);
PromptSelectionOptions opts = new PromptSelectionOptions();
opts.MessageForAdding = "Select entities to get line counts: ";
PromptSelectionResult prmptSelRslt = doc.Editor.SelectAll(filter);
if (prmptSelRslt.Status != PromptStatus.OK)
{
return 0;
}
else
{
lineCount = prmptSelRslt.Value.Count;
}
return lineCount;
}
请有人告诉我如何打开和列出行号计数。
提前致谢....
答案 0 :(得分:1)
有更简单的方法来获取所需的信息。我写了一篇关于这个主题的blog post。你应该看看。
[CommandMethod("getLines")]
public void OpenDrawing()
{
OpenDrawingGetLines(@"C:\saved\linetest.dwg");
}
public void OpenDrawingGetLines(string path)
{
var editor = Application.DocumentManager.MdiActiveDocument.Editor;
if (!File.Exists(path))
{
editor.WriteMessage(string.Format(@"{0} doesn't exist.", path));
return;
}
// wrap in using statement to open and close.
var doc = Application.DocumentManager.Open(path, false);
string docName = string.Empty;
IEnumerable<ObjectId> lineIds;
// lock the doc
using (doc.LockDocument())
// start transaction
using (var trans = doc.TransactionManager.StartOpenCloseTransaction())
{
// get the modelspace
var modelspace = (BlockTableRecord)
trans.GetObject(SymbolUtilityServices.GetBlockModelSpaceId(doc.Database), OpenMode.ForRead);
// get the lines ObjectIds
lineIds = from id in modelspace.Cast<ObjectId>()
where id.ObjectClass.IsDerivedFrom(RXObject.GetClass(typeof(Line)))
select id;
docName = doc.Name;
trans.Commit();
}
var message = string.Format("{0} Lines in {1}", lineIds.Count(), docName);
editor.WriteMessage(message);
Application.ShowAlertDialog(message);
}
答案 1 :(得分:0)
您应该使用DocumentCollectionExtension。 (在VB中)
Dim strFileName As String = "C:\campus.dwg"
Dim acDocMgr As DocumentCollection = Application.DocumentManager
If (File.Exists(strFileName)) Then
DocumentCollectionExtension.Open(acDocMgr, strFileName, False)
Else
acDocMgr.MdiActiveDocument.Editor.WriteMessage("File " & strFileName & _
" does not exist.")
End If