这是我的代码,它根据用户选择选择块并使用多行文字在该块中打印属性,但多行文字在此处不起作用。此外,我还需要具有相同编号的重复属性。提前致谢。不通过多行文字打印块的属性
[CommandMethod("NALATT")]
public void ListAttributes()
{
Document acDoc = Application.DocumentManager.MdiActiveDocument;
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
Database db =HostApplicationServices.WorkingDatabase;
Transaction tr = db.TransactionManager.StartTransaction();
// Start the transaction
try
{
// Build a filter list so that only
// block references are selected
TypedValue[] filList = new TypedValue[1] {new TypedValue((int)DxfCode.Start, "INSERT")};
SelectionFilter filter = new SelectionFilter(filList);
PromptSelectionOptions opts = new PromptSelectionOptions();
opts.MessageForAdding = "Select block references: ";
PromptSelectionResult res = ed.GetSelection(opts, filter);
// Do nothing if selection is unsuccessful
if (res.Status != PromptStatus.OK)
return;
SelectionSet selSet = res.Value;
ObjectId[] idArray = selSet.GetObjectIds();
PromptPointResult ppr;
PromptPointOptions ppo = new PromptPointOptions("");
//get the coordinates from user
ppo.Message = "\n Select the place for print output:";
ppr = acDoc.Editor.GetPoint(ppo);
Point3d ptstart = ppr.Value;
ppo.UseBasePoint = true;
ppo.BasePoint = ptstart;
if (ppr.Status == PromptStatus.Cancel) return;
double x = ptstart.X;
double y = ptstart.Y;
double z = 1;
foreach (ObjectId blkId in idArray)
{
BlockReference blkRef =(BlockReference)tr.GetObject(blkId, OpenMode.ForRead);
BlockTableRecord btr = (BlockTableRecord)tr.GetObject(blkRef.BlockTableRecord, OpenMode.ForWrite);
ed.WriteMessage("\nBlock: " + btr.Name);
btr.Dispose();
AttributeCollection attCol = blkRef.AttributeCollection;
foreach (ObjectId attId in attCol)
{
//这部分不能正常工作
MText mtext = new MText();
//mtext.SetDatabaseDefaults();
mtext.Width = 2;
mtext.Location = new Point3d(x, y = y - 1, z);
AttributeReference attRef =
(AttributeReference)tr.GetObject(attId,OpenMode.ForRead);
string str =("\n" + attRef.TextString);
mtext.Contents = "\n" + str;
ed.WriteMessage(str);
btr.AppendEntity(mtext);
tr.AddNewlyCreatedDBObject(mtext, true);
}
}
tr.Commit();
}
catch (Autodesk.AutoCAD.Runtime.Exception ex)
{
ed.WriteMessage(("Exception: " + ex.Message));
}
finally
{
tr.Dispose();
}
}
}
}
我想打印我的DWG文件 –
到底是什么文本的代号为“不正常”? “MText”是否会导致崩溃或在编辑器中未显示?为了得到你想要的帮助,你必须更加精确一点。 – 2016-08-04 12:53:25
多行文字不显示 –