Message 1 of 3
Not applicable
04-26-2013
03:58 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
Hi all,
I'm new to .net for autocad, but very familiar with c#. I studied some samples about creating a block from c#, but need some help figuring it out.
Waht I'm trying to do:
I have a form for some basic input. When the user presses OK the code checks if the blockname is aleady in use. When no it creates the block using following code:
private void make_block()
{
double nextpoint = 0.0;
double linedis = 7.3634;
Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
Editor ed = doc.Editor;
using (Transaction tr = db.TransactionManager.StartTransaction())
{
BlockTableRecord btr = new BlockTableRecord();
btr.Name = "hoeveelheden";
BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForWrite);
btr.Origin = Point3d.Origin;
btr.Units = UnitsValue.Meters;
ObjectId btrId = bt.Add(btr);
bt.DowngradeOpen();
DBObjectCollection ents = new DBObjectCollection();
//controleren op (de)markeren
double tmp = conlengte + lengte0505 + lengte11 + lengte13 + lengte31 + lengte39 + lengte30270 + lengte93 + haailengte5050 + haailengte5070 + demconlengte +
demlengte0505 + demlengte11 + demlengte13 + demlengte31 + demlengte39 + demlengte30270 + demlengte93;
if (tmp != 0.0 || pijlen != 0)
{
//(de)markeren toevoegen aan block
Point3d p1 = new Point3d(0.0, nextpoint, 0.0);
Point3d p2 = new Point3d(0.0, nextpoint + 100.0, 0.0);
Line ln = new Line(p1, p2);
ln.Layer = "wx-zwart-004";
ents.Add(ln);
p1 = new Point3d(0.0, nextpoint + 100.0, 0.0);
p2 = new Point3d(150.0, nextpoint + 100.0, 0.0);
ln = new Line(p1, p2);
ents.Add(ln);
p1 = new Point3d(0.0, nextpoint + 90.0, 0.0);
p2 = new Point3d(150.0, nextpoint + 90.0, 0.0);
ln = new Line(p1, p2);
ents.Add(ln);
p1 = new Point3d(7.0, nextpoint + 92.5, 0.0);
DBText acText = new DBText();
acText.SetDatabaseDefaults();
acText.Position = p1;
acText.Height = 5.0;
acText.TextString = "markering";
acText.Layer = "wx-zwart-004";
ents.Add(acText);
//some more text entities are created
nextpoint = nextpoint + 100.0;
}
//controleren op barrier
tmp = barrier + barrier_beton + barrier_Bever + barrier_HaiSafe + barrier_Haitsma_Step + barrier_kunststof +
barrier_Miniguard + barrier_Romein + barrier_RWS + barrier_Safe_guard + barrier_staal + barrier_Vario_guard;
if (tmp != 0.0 || pstuk != 0 || rimobP110s != 0 || rimobV270 != 0 || antizichtscherm != 0.0)
{
//(de)markeren toevoegen aan block
Point3d p1 = new Point3d(0.0, nextpoint, 0.0);
Point3d p2 = new Point3d(0.0, nextpoint + 115.0, 0.0);
Line ln = new Line(p1, p2);
ln.Layer = "wx-zwart-004";
ents.Add(ln);
p1 = new Point3d(0.0, nextpoint + 115.0, 0.0);
p2 = new Point3d(150.0, nextpoint + 115.0, 0.0);
ln = new Line(p1, p2);
ents.Add(ln);
p1 = new Point3d(0.0, nextpoint + 105.0, 0.0);
p2 = new Point3d(150.0, nextpoint + 105.0, 0.0);
ln = new Line(p1, p2);
ents.Add(ln);
p1 = new Point3d(7.0, nextpoint + 107.5, 0.0);
DBText acText = new DBText();
acText.SetDatabaseDefaults();
acText.Position = p1;
acText.Height = 5.0;
acText.TextString = "geleidebarrier";
acText.Layer = "wx-zwart-004";
ents.Add(acText);
if (barrier_staal != 0.0)
{
p1 = new Point3d(52.0, nextpoint + (93.5 - 1 * linedis), 0.0);
acText = new DBText();
acText.SetDatabaseDefaults();
acText.Position = p1;
acText.Height = 3.5;
acText.TextString = Math.Round(barrier_staal, 0).ToString() + " m";
acText.Layer = "wx-zwart-002";
ents.Add(acText);
}
//some more text entities are created
nextpoint = nextpoint + 115.0;
}
//controleren op geleidebakens / kegels
if (baken != 0 || kegel != 0)
{
//(geleidebakens/kegels toevoegen aan block
Point3d p1 = new Point3d(0.0, nextpoint, 0.0);
Point3d p2 = new Point3d(0.0, nextpoint + 100.0, 0.0);
Line ln = new Line(p1, p2);
ln.Layer = "wx-zwart-004";
ents.Add(ln);
p1 = new Point3d(0.0, nextpoint + 40.0, 0.0);
p2 = new Point3d(150.0, nextpoint + 40.0, 0.0);
ln = new Line(p1, p2);
ents.Add(ln);
p1 = new Point3d(0.0, nextpoint + 30.0, 0.0);
p2 = new Point3d(150.0, nextpoint + 30.0, 0.0);
ln = new Line(p1, p2);
ents.Add(ln);
p1 = new Point3d(7.0, nextpoint + 32.5, 0.0);
DBText acText = new DBText();
acText.SetDatabaseDefaults();
acText.Position = p1;
acText.Height = 5.0;
acText.TextString = "geleidebakens / kegels";
acText.Layer = "wx-zwart-004";
ents.Add(acText);
//some more text entities are created
nextpoint = nextpoint + 40.0;
}
//controleren op verlichting
if (lichtmast != 0 || mobilight != 0)
{
//(verlichting toevoegen aan block
Point3d p1 = new Point3d(0.0, nextpoint, 0.0);
Point3d p2 = new Point3d(0.0, nextpoint + 100.0, 0.0);
Line ln = new Line(p1, p2);
ln.Layer = "wx-zwart-004";
ents.Add(ln);
p1 = new Point3d(0.0, nextpoint + 40.0, 0.0);
p2 = new Point3d(150.0, nextpoint + 40.0, 0.0);
ln = new Line(p1, p2);
ents.Add(ln);
p1 = new Point3d(0.0, nextpoint + 30.0, 0.0);
p2 = new Point3d(150.0, nextpoint + 30.0, 0.0);
ln = new Line(p1, p2);
ents.Add(ln);
p1 = new Point3d(7.0, nextpoint + 32.5, 0.0);
DBText acText = new DBText();
acText.SetDatabaseDefaults();
acText.Position = p1;
acText.Height = 5.0;
acText.TextString = "tijdelijke verlichting";
acText.Layer = "wx-zwart-004";
ents.Add(acText);
//some more text entities are created
}
foreach (Entity ent in ents)
{
btr.AppendEntity(ent);
tr.AddNewlyCreatedDBObject(ent, true);
}
tr.AddNewlyCreatedDBObject(btr, true);
tr.Commit();
}
}
The code runs succesfully (meaning i don't get any errors), but when I want to insert the block it isn't in the list of blocks. I must be forgetting something, but am unable to figure out what.
Solved! Go to Solution.