.NET

Reply
Contributor
bryan.thomasy
Posts: 16
Registered: ‎07-09-2008
Message 1 of 13 (275 Views)

Layer Convertion Project for .NET

275 Views, 12 Replies
02-21-2012 07:36 AM

Greetings all. 

First of all, I will appologize if this is in the incorrect forum.

I am from the lisp days, and just got into VBA when I found out they were pulling the plug.  While I am trying to learn .NET I have an issue. 

 

Our company is STB based, but we have years of CTB files.  In VBA I wrote a convertion where it looked at the colors and based on what I defined for the colors, it assigened the correct line weight and plot style.  I wrote this in VBA for AutoCAD 2009, but now in 2011 it tells me "Can't find project or library".  I was looking for the solution, and then realized, why solve it in VBA if VBA is going away??

 

So I am asking to see if anyone would be willing to set me on the correct path, or if anyone has something rsembling this in .NET.

 

Thanks for any help you can give me.

 

Bryan Thomasy

Mentor
SENL1362
Posts: 231
Registered: ‎07-20-2011
Message 2 of 13 (274 Views)

Re: Layer Convertion Project for .NET

02-21-2012 07:41 AM in reply to: bryan.thomasy

Up to AutoCAD 2012 you can enable VBA using AutoCAD_2012_VBAEnabler_Win_32bit.exe

 

Contributor
bryan.thomasy
Posts: 16
Registered: ‎07-09-2008
Message 3 of 13 (272 Views)

Re: Layer Convertion Project for .NET

02-21-2012 07:44 AM in reply to: SENL1362

I am sorry, I did not mention that I have the VBA enabler already installed and get that error.  Thanks though..

Mentor
SENL1362
Posts: 231
Registered: ‎07-20-2011
Message 4 of 13 (268 Views)

Re: Layer Convertion Project for .NET

02-21-2012 08:02 AM in reply to: bryan.thomasy

Simple List Layers and PlotStyle sample might help you get started

 

        [CommandMethod("LLPT")]
        public void ListLayerPlotTable() // This method can have any name
        {
            Document dwg = Application.DocumentManager.MdiActiveDocument;
            Database db = dwg.Database;
            Editor ed = dwg.Editor;

            using (Transaction tr = db.TransactionManager.StartTransaction())
            {
                LayerTable layers = (LayerTable)db.LayerTableId.GetObject(OpenMode.ForWrite);

                foreach (ObjectId lyID in layers)
                {
                    LayerTableRecord ly = (LayerTableRecord)tr.GetObject(lyID, OpenMode.ForRead);
                    ed.WriteMessage("\n layer: {0}, PlotStyle: {1}", ly.Name, ly.PlotStyleName);
                }
                tr.Commit();
            }
        }

 




Contributor
bryan.thomasy
Posts: 16
Registered: ‎07-09-2008
Message 5 of 13 (261 Views)

Re: Layer Convertion Project for .NET

02-21-2012 08:26 AM in reply to: bryan.thomasy

That is a great start, thanks.  It is painfully obvious I have a lot to learn

*Expert Elite*
Hallex
Posts: 1,569
Registered: ‎10-08-2008
Message 6 of 13 (253 Views)

Re: Layer Convertion Project for .NET

02-21-2012 08:57 AM in reply to: bryan.thomasy

Can you show me VBA code?

Maybe I could be able to convert it on VB.NET

 

~'J'~

_____________________________________
C6309D9E0751D165D0934D0621DFF27919
Contributor
bryan.thomasy
Posts: 16
Registered: ‎07-09-2008
Message 7 of 13 (246 Views)

Re: Layer Convertion Project for .NET

02-21-2012 10:16 AM in reply to: bryan.thomasy

I have attached it in a zip format, along with the lisp that calls to it.

Contributor
bryan.thomasy
Posts: 16
Registered: ‎07-09-2008
Message 8 of 13 (229 Views)

Re: Layer Convertion Project for .NET

02-21-2012 02:16 PM in reply to: bryan.thomasy

Was able to find the short term solution.  I still will be trying to convert this to .NET...

*Expert Elite*
Hallex
Posts: 1,569
Registered: ‎10-08-2008
Message 9 of 13 (209 Views)

Re: Layer Convertion Project for .NET

02-22-2012 09:51 PM in reply to: bryan.thomasy

OK I will try to do it

...w8

 

~'J'~

_____________________________________
C6309D9E0751D165D0934D0621DFF27919
*Expert Elite*
Hallex
Posts: 1,569
Registered: ‎10-08-2008
Message 10 of 13 (207 Views)

Re: Layer Convertion Project for .NET

02-22-2012 11:20 PM in reply to: bryan.thomasy

Here is just quickly translated sample

Not sure about if this work good enough

but it will be get you started

and also I can't test this cone on me end because

I'm not using STB and haven't have one on my

home machine

________________________________________________

{code}

        <CommandMethod("IMRColors", CommandFlags.Modal + CommandFlags.Session)> _
        Public Sub STBTest()
            If Autodesk.AutoCAD.ApplicationServices.Application.GetSystemVariable("PSTYLEMODE") = 1 Then
                MsgBox("Drawing is not STB")
                Exit Sub
            End If
            Dim doc As Document = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument
            Dim db As Database = doc.Database
            Dim ed As Editor = doc.Editor
            Dim how As Boolean = False
            Using doclock As DocumentLock = doc.LockDocument
                Using tr As Transaction = db.TransactionManager.StartTransaction()
                    Dim ltTable As LayerTable = tr.GetObject(db.LayerTableId, OpenMode.ForRead)
                    Try

                        For Each ltID As ObjectId In ltTable

                            Dim ltRec As LayerTableRecord = tr.GetObject(ltID, OpenMode.ForWrite)

                            Dim i As Double
                            i = 0
                            Dim y As Integer
                            y = 0


                            Dim sPlotStyleName As String
                            sPlotStyleName = ltRec.PlotStyleName

                            Dim cLayerColor As Color
                            cLayerColor = ltRec.Color

                            Dim sLayerColor As Short
                            sLayerColor = cLayerColor.ColorIndex

                            Dim cLineweight As LineWeight
                            cLineweight = ltRec.LineWeight

                            Select Case sLayerColor
                                Case 1, 15 To 30, 230 To 239
                                    ltRec.PlotStyleName = "Black"
                                    ltRec.LineWeight = LineWeight.LineWeight009
                                Case 2, 31 To 59
                                    ltRec.PlotStyleName = "Black"
                                    ltRec.LineWeight = LineWeight.LineWeight050
                                Case 3, 60 To 129
                                    ltRec.PlotStyleName = "Black"
                                    ltRec.LineWeight = LineWeight.LineWeight018
                                Case 7, 240 To 249
                                    ltRec.PlotStyleName = "Black"
                                    ltRec.LineWeight = LineWeight.LineWeight025
                                Case 6, 180 To 229
                                    ltRec.PlotStyleName = "Black"
                                    ltRec.LineWeight = LineWeight.LineWeight030
                                Case 4, 5, 130 To 179
                                    ltRec.PlotStyleName = "Black"
                                    ltRec.LineWeight = LineWeight.LineWeight040
                                Case 10
                                    ltRec.PlotStyleName = "Black"
                                    ltRec.LineWeight = LineWeight.LineWeight050
                                Case 11
                                    ltRec.PlotStyleName = "Black"
                                    ltRec.LineWeight = LineWeight.LineWeight070
                                Case 12
                                    ltRec.PlotStyleName = "Black"
                                    ltRec.LineWeight = LineWeight.LineWeight080
                                Case 13
                                    ltRec.PlotStyleName = "Black"
                                    ltRec.LineWeight = LineWeight.LineWeight090
                                Case 14
                                    ltRec.PlotStyleName = "Black"
                                    ltRec.LineWeight = LineWeight.LineWeight120
                                Case 8
                                    ltRec.PlotStyleName = "LGray"
                                    ltRec.LineWeight = LineWeight.LineWeight009
                                Case 9
                                    ltRec.PlotStyleName = "LGray"
                                    ltRec.LineWeight = LineWeight.LineWeight015
                                Case 251
                                    ltRec.PlotStyleName = "LGray"
                                    ltRec.LineWeight = LineWeight.LineWeight020
                                Case 252
                                    ltRec.PlotStyleName = "MGray"
                                    ltRec.LineWeight = LineWeight.LineWeight030
                                Case 253
                                    ltRec.PlotStyleName = "MGray"
                                    ltRec.LineWeight = LineWeight.LineWeight050
                                Case 255
                                    ltRec.PlotStyleName = "MGray"
                                    ltRec.LineWeight = LineWeight.LineWeight140
                                Case 254, 250
                                    ltRec.PlotStyleName = "White"
                                    ltRec.LineWeight = LineWeight.LineWeight009

                                Case Else
                                    ed.WriteMessage(ltRec.Name & " was not altered" & vbCrLf)
                                    i = i + 1
                            End Select

                        Next
                        tr.Commit()

                        how = True
                    Catch ex As Autodesk.AutoCAD.Runtime.Exception
                        Dim y As Integer = 0
                        If ex.Message Like "Key Not Found*" And y < 30000 Then
                            Dim oPoint As DBPoint = Nothing
                            Dim dLoc As Double() = New Double(2) {}
                            dLoc(0) = 5.0
                            dLoc(1) = 5.0
                            dLoc(2) = 0.0
                            Dim crnSP As BlockTableRecord = tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite)
                            crnSP.AppendEntity(oPoint)
                            tr.AddNewlyCreatedDBObject(oPoint, True)
                            oPoint.PlotStyleName = "Black"
                            oPoint.PlotStyleName = "DGray"
                            oPoint.PlotStyleName = "MGray"
                            oPoint.PlotStyleName = "LGray"
                            oPoint.PlotStyleName = "White"
                            oPoint.PlotStyleName = "Normal"
                            oPoint.Erase()

                            y = y + 1
                        Else
                            MsgBox("Something went wrong " + Err.Description & ", that sounds awful")
                            Return
                        End If
                        ed.WriteMessage(ex.Message)
                        how = False
                    Finally
                        Dim result As String = "   ---   The IMRColors program has ended up with " + IIf(how, "success", "bugs").ToString
                        ed.WriteMessage(vbLf + result)
                    End Try
                End Using
            End Using
        End Sub

{code}

_____________________________________
C6309D9E0751D165D0934D0621DFF27919
Post to the Community

Have questions about Autodesk products? Ask the community.

New Post
Announcements
Do you have 60 seconds to spare? The Autodesk Community Team is revamping our site ranking system and we want your feedback! Please click here to launch the 5 question survey. As always your input is greatly appreciated.