.NET
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Creating a block

2 REPLIES 2
SOLVED
Reply
Message 1 of 3
marcwalen
794 Views, 2 Replies

Creating a block

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.

2 REPLIES 2
Message 2 of 3

Only skimming your code, I see nothing suspicious.

 

If there are other transactions being started that you don't show in your code, make sure all of them are comitted.

 

If your code is being called in one or more try{} blocks, make sure the catch{} blocks are not hiding an error that might also cause a transaction to abort.

 

Message 3 of 3

I went trough my code again, indeed found a transaction which I didn't dispose. Now it works just perfect. Thanks for the tip!

Can't find what you're looking for? Ask the community or share your knowledge.

Post to forums  

Autodesk DevCon in Munich May 28-29th


Autodesk Design & Make Report

”Boost