using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
using System;
namespace Estudos {
public class Class1 : IExtensionApplication {
[CommandMethod("Tabela")]
public void Tabela() {
// vamos acessar o documento atual do AutoCAD
Document doc = Application.DocumentManager.MdiActiveDocument;
// e agora vamos obter a base de dados deste documento
Database db = doc.Database;
// criamos uma nova transação
Transaction tr = doc.TransactionManager.StartTransaction();
// e usamos a transação
using (tr) {
// abrimos o registro de blocos de tabelas para escrita
BlockTableRecord btr = (BlockTableRecord)tr.GetObject(
db.CurrentSpaceId, OpenMode.ForWrite);
// vamos criar a nova tabela
Table tabela = new Table();
// vamos definir o estilo padrão para a tabela
tabela.TableStyle = db.Tablestyle;
// vamos definir algumas constantes
const int quant_linhas = 92;
const int quant_colunas = 5;
const double altura_linha = 3;
const double largura_coluna = 10;
const double margem_horizontal = 0.5;
const double margem_vertical = 0.5;
const double altura_texto = 1;
// vamos definir a altura da linha e a largura da coluna
// que já vem por padrão na tabela em branco
tabela.Rows[0].Height = altura_linha;
tabela.Columns[0].Width = largura_coluna;
// vamos adicionar as demais linhas e colunas
tabela.InsertRows(1, altura_linha, quant_linhas - 1);
tabela.InsertColumns(1, largura_coluna, quant_colunas - 1);
// para ocultar o título e subtítulos, basta definir o
// valor "" para as linhas abaixo
tabela.Cells[0, -1].Style = "Title";
tabela.Cells[1, -1].Style = "Header";
// vamos definir o título da tabela
Cell tc = tabela.Cells[0, 0];
tc.Contents.Add();
tc.Contents[0].TextHeight = altura_texto;
tc.Contents[0].TextString = "Tabela de Seno, Cosseno e Tangente";
// e agora definimos os sub-títulos
string[] subtitulos = {"Graus", "Radianos", "Seno", "Cosseno", "Tangente"};
for (int i = 0; i < quant_colunas; i++) {
Cell c = tabela.Cells[1, i];
c.Contents.Add();
c.Contents[0].TextHeight = altura_texto;
c.Contents[0].TextString = subtitulos[i];
c.Borders.Left.Margin = margem_horizontal;
c.Borders.Right.Margin = margem_horizontal;
c.Borders.Top.Margin = margem_vertical;
c.Borders.Bottom.Margin = margem_vertical;
}
// e passamos às demais células da tabela
int graus = 1;
for (int i = 2; i < quant_linhas; i++) {
for (int j = 0; j < quant_colunas; j++) {
// calcula os radianos
double radianos = (Math.PI / 180) * graus;
Cell c = tabela.Cells[i, j];
c.Contents.Add();
c.Contents[0].TextHeight = altura_texto;
// devemos mostrar os graus
if (j == 0) {
c.Contents[0].TextString = graus.ToString() + "º";
}
// devemos mostrar os radianos
else if (j == 1) {
c.Contents[0].TextString = radianos.ToString("0.0000");
}
// devemos mostrar o seno
else if (j == 2) {
c.Contents[0].TextString = Math.Sin(radianos).ToString("0.0000");
}
// devemos mostrar o cosseno
else if (j == 3) {
c.Contents[0].TextString = Math.Cos(radianos).ToString("0.0000");
}
// devemos mostrar a tangente
else if (j == 4) {
// a tangente de 90 graus não existe
if (graus == 90) {
c.Contents[0].TextString = "-";
}
else {
c.Contents[0].TextString = Math.Tan(radianos).ToString("0.0000");
}
}
// aplicamos as margens horizontais e verticais
c.Borders.Left.Margin = margem_horizontal;
c.Borders.Right.Margin = margem_horizontal;
c.Borders.Top.Margin = margem_vertical;
c.Borders.Bottom.Margin = margem_vertical;
}
// incrementa os graus
graus++;
}
// define a posição da tabela na área de desenho do AutoCAD
tabela.Position = new Point3d(30, 60, 0);
// regenera o layout
tabela.GenerateLayout();
// adiciona a tabela no registro de blocos de tabelas
btr.AppendEntity(tabela);
// adiciona a tabela no base de dados do documento
tr.AddNewlyCreatedDBObject(tabela, true);
// fazemos o commit da transação
tr.Commit();
}
}
public void Initialize() {
// pode deixar em branco
}
public void Terminate() {
// pode deixar em branco
}
}
}