이것은 사용자 선택에 따라 블록을 선택하고 mtext를 사용하여 해당 블록에서 인쇄하는 코드입니다. mtext는 여기서 작동하지 않습니다. 또한 동일한 번호의 반복 된 속성을 원합니다. 미리 감사드립니다.블록의 속성이 mtext를 통해 인쇄되지 않음
[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'가 충돌을 일으키거나 편집기에 표시되지 않습니까? 당신이 원하는 도움을 얻으려면 좀 더 정확하게해야합니다. –
Mtext가 표시되지 않습니다 –