1
이 코드는 올바르게 작동하지 않습니다. 선과 폴리 라인을 그리지 않지만 레이어를 만듭니다. 문제는 거래와 관련이 있을지 모르지만 확신이 없으며 문제를 해결하는 방법을 알지 못합니다.코드로 레이어를 만들지 만 오토 캐드에서 선을 그리지 않습니다.
이 메서드는 생성 메서드에 매개 변수를 보내는 작업을 담당합니다.
public static void DrawingLines()
{
Document document = Application.DocumentManager.MdiActiveDocument;
Database database = document.Database;
// Verificando a existencia dos Layers, caso não existam, são criados
CreatingLayer("P04", 4);
CreatingLayer("TEXTO", 3);
CreatingLayer("P01", 1);
// Start a transaction
using (Transaction transactionManager =
database.TransactionManager.StartTransaction())
{
// Cria o triangulo da função
var acPoly = new Polyline();
acPoly.AddVertexAt(0, new Point2d(Variaveis.pt.X - 225,
Variaveis.pt.Y - 175), 0, 0, 0);
acPoly.AddVertexAt(1, new Point2d(Variaveis.pt.X + 225,
Variaveis.pt.Y - 175), 0, 0, 0);
acPoly.AddVertexAt(2, new Point2d(Variaveis.pt.X + 225,
Variaveis.pt.Y - 55), 0, 0, 0);
acPoly.AddVertexAt(3, new Point2d(Variaveis.pt.X - 225,
Variaveis.pt.Y - 175), 0, 0, 0);
acPoly.Layer = "P01";
// Desenha a linha central cyan
var acLine = new Line()
{
StartPoint = new Point3d(Variaveis.pt.X + 53, Variaveis.pt.Y -
270, 0),
EndPoint = new Point3d(Variaveis.pt.X + 53, Variaveis.pt.Y -
513, 0)
};
acLine.Layer = "P04";
// Add the new object to the block table record
AddToModelSpace(acPoly);
AddToModelSpace(acLine);
}
}
이 방법은 레이어가 존재하는지 확인하는 역할을합니다. 존재하지 않으면 생성됩니다.
public static void CreatingLayer(string layer, short color)
{
Document document = Application.DocumentManager.MdiActiveDocument;
Database database = document.Database;
using (Transaction tr = database.TransactionManager.StartTransaction())
{
// Get the layer table from the drawing
LayerTable lt = (LayerTable)tr.GetObject(database.LayerTableId,
OpenMode.ForRead);
// Create our new layer table record...
LayerTableRecord ltr = new LayerTableRecord();
// Checa a existencia de P01, caso não exista, é criada
if (lt.Has(layer) == true)
{
database.Clayer = lt[layer];
}
else
{
// ... and set its properties
ltr.Name = layer;
ltr.Color = Color.FromColorIndex(ColorMethod.ByAci, color);
// Add the new layer to the layer table
lt.UpgradeOpen();
ObjectId ltId = lt.Add(ltr);
tr.AddNewlyCreatedDBObject(ltr, true);
// Set the layer to be current for this drawing
database.Clayer = lt[layer];
}
// Se tudo ocorreu bem, grava a transação
tr.Commit();
}
}
이 방법은 모형 공간에서 개체를 삽입에만 책임이
public static void AddToModelSpace(Entity ent)
{
Document document = Application.DocumentManager.MdiActiveDocument;
Database database = document.Database;
using (Transaction tr = database.TransactionManager.StartTransaction())
{
var blTbl = tr.GetObject(database.BlockTableId, OpenMode.ForRead) as
BlockTable;
var blTblRec = tr.GetObject(blTbl[BlockTableRecord.ModelSpace],
OpenMode.ForWrite) as BlockTableRecord;
blTblRec.AppendEntity(ent);
tr.AddNewlyCreatedDBObject(ent, true);
tr.Commit();
}
}
@ erik-philips 이제 내 코드가 완벽하게 작동했습니다. 고마워요! –
@ erik-philips 프로그래밍을 처음 사용합니다. 다시 한 번 감사드립니다! –