.NET

Reply
Contributor
14 Posts
0 Kudos
Registered: ‎03-29-2011
Post 1 of 6
Accepted Solution

JLS2012-1

556 Views, 5 Replies
05-08-2012 02:28 AM

(visual studio 2010 c# and AutoCAD 2010 )

I`m trying to create a new layer with ARGB color but SetRGB doesn`t work this way.

Any idea. thank you.

// Color is a System.Drawing.Color

private static void NewLayer(string layerName, Color layerColor)
        {
            LY_Rutas = gbl_doc.Layers.Add(layerName);
            LY_Rutas.TrueColor.SetRGB(layerColor.R, layerColor.G, layerColor.B);
        }

Here is what I would to create new layer

 [CommandMethod("myLay", CommandFlags.Modal | CommandFlags.Redraw)]
public void CreateLayer()
{
string layerName = "LY_Rutas";
ObjectId layerId = ObjectId.Null;
byte r = 176;
byte g = 37;
byte b = 28;
Document doc = Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
Editor ed = doc.Editor;
Transaction tr = db.TransactionManager.StartTransaction();
using (tr)
{
// Get the layer table from the drawing and open for write
LayerTable lt = (LayerTable)tr.GetObject(db.LayerTableId, OpenMode.ForWrite);
if (lt.Has(layerName))
{
layerId = lt[layerName];
if (layerId.IsErased)
{
LayerTableRecord ltr = (LayerTableRecord)tr.GetObject(layerId, OpenMode.ForWrite, true);
ltr.Erase(false);
}
}
else
{
// Create new layer table record
LayerTableRecord ltr = new LayerTableRecord();
// Add some properties
ltr.Name = layerName;
ltr.LinetypeObjectId = db.ContinuousLinetype;
ltr.LineWeight = LineWeight.LineWeight030;
ltr.Color = Color.FromRgb(r, g, b);
layerId = lt.Add(ltr);
// Append layer to database
tr.AddNewlyCreatedDBObject(ltr, true);
tr.Commit();
}
}
}

 Using your function try this way, not tested

 AcadLayer LY_Rutas = gbl_doc.Layers.Add("PruebaCAD");
//change linetype
LY_Rutas.Linetype = strLtype;
//change entity color
AcadAcCmColor acCol = LY_Rutas.TrueColor;
//1. change color RGB
acCol.ColorMethod = AcColorMethod.acColorMethodByRGB;
acCol.SetRGB(255,255,0);
//2. change color index etc...
//acCol.ColorMethod = AcColorMethod.acColorMethodByACI;
//acCol.ColorIndex = (AcColor)140;
LY_Rutas.TrueColor = acCol;
//release AcadAcCmColor object
acCol = null;

 

~'J'~

*Expert Elite*
1,569 Posts
171 Kudos
Registered: ‎10-08-2008
Post 2 of 6

Re: JLS2012-1

05-08-2012 05:38 AM in reply to: jlsantiago

Color in AutoCAD is not a Drawing.Color

Add to your using region:

 

using.AutoCAD.Colors;

 

~'J'~

_____________________________________
C6309D9E0751D165D0934D0621DFF27919
Contributor
14 Posts
0 Kudos
Registered: ‎03-29-2011
Post 3 of 6

Re: JLS2012-1

05-10-2012 12:28 AM in reply to: jlsantiago

Thanx for the reply.

Now, when i add this line 

 

using.AutoCAD.Colors;

 

i got the next error.

 

***************************************************************************************************************************************

System.BadImageFormatException was unhandled
  Message=No se puede cargar el archivo o ensamblado 'acdbmgd, Version=18.1.0.0, Culture=neutral, PublicKeyToken=null' ni una de sus dependencias. Se ha intentado cargar un programa con un formato incorrecto.
  Source=DrivingAutoCAD
  FileName=acdbmgd, Version=18.1.0.0, Culture=neutral, PublicKeyToken=null
  FusionLog==== Información de estado anterior al enlace ===
LOG: Usuario = Juan-VAIO\Juan
LOG: DisplayName = acdbmgd, Version=18.1.0.0, Culture=neutral, PublicKeyToken=null
 (Fully-specified)
LOG: Appbase = file:///C:/Trabajo/Palmatools/INECO/PEIF/Pruebas_VC2010/Prueba_AutoCAD/DrivingCAD/bin/Debug/
LOG: PrivatePath inicial = NULL
Ensamblado de llamada : DrivingAutoCAD, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: Este enlace empieza en el contexto de carga default.
LOG: Utilización del archivo de configuración de la aplicación: C:\Trabajo\Palmatools\INECO\PEIF\Pruebas_VC2010\Prueba_AutoCAD\DrivingCAD\bin\Debug\DrivingAutoCAD.vshost.exe.Config
LOG: Utilizando el archivo de configuración de host:
LOG: Utilizando el archivo de configuración del equipo en C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: La directiva no se está aplicando a la referencia en este momento (enlace de ensamblado privado, personalizado, parcial o basado en la ubicación).
LOG: Intento de descarga de la nueva dirección URL file:///C:/Trabajo/Palmatools/INECO/PEIF/Pruebas_VC2010/Prueba_AutoCAD/DrivingCAD/bin/Debug/acdbmgd.DLL.
ERR: Error al completar la instalación del ensamblado (hr = 0x8007000b). Finalizó la búsqueda.

  StackTrace:
       en DrivingAutoCAD.Form1.button1_Click(Object sender, EventArgs e)
       en System.Windows.Forms.Control.OnClick(EventArgs e)
       en System.Windows.Forms.Button.OnClick(EventArgs e)
       en System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
       en System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       en System.Windows.Forms.Control.WndProc(Message& m)
       en System.Windows.Forms.ButtonBase.WndProc(Message& m)
       en System.Windows.Forms.Button.WndProc(Message& m)
       en System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       en System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       en System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
       en System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       en System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
       en System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       en System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       en System.Windows.Forms.Application.Run(Form mainForm)
       en DrivingAutoCAD.Program.Main() en C:\Trabajo\Palmatools\INECO\PEIF\Pruebas_VC2010\Prueba_AutoCAD\DrivingCAD\Program.cs:línea 19
       en System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       en System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       en Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       en System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       en System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
       en System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       en System.Threading.ThreadHelper.ThreadStart()
  InnerException:

*************************************************************************************************************************************************

 

Are there another way to do something like this, and that works?

 

int r = 255;
int g = 0;
int b = 0;
AcadLayer LY_Rutas = gbl_doc.Layers.Add("PruebaCAD");
LY_Rutas.TrueColor.SetRGB(r,g,b);

 

 

thanx again

*Expert Elite*
1,569 Posts
171 Kudos
Registered: ‎10-08-2008
Post 4 of 6

Re: JLS2012-1

05-10-2012 04:03 AM in reply to: jlsantiago

Here is what I would to create new layer

        [CommandMethod("myLay", CommandFlags.Modal | CommandFlags.Redraw)]

        public void CreateLayer()
        {
            string layerName = "LY_Rutas";
            ObjectId layerId = ObjectId.Null;
            byte r = 176;
            byte g = 37;
            byte b = 28;
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            Editor ed = doc.Editor;
            Transaction tr = db.TransactionManager.StartTransaction();
            using (tr)
            {
                // Get the layer table from the drawing and open for write
                LayerTable lt = (LayerTable)tr.GetObject(db.LayerTableId, OpenMode.ForWrite);
                if (lt.Has(layerName))
                {
                    layerId = lt[layerName];
                    if (layerId.IsErased)
                    {
                        LayerTableRecord ltr = (LayerTableRecord)tr.GetObject(layerId, OpenMode.ForWrite, true);
                        ltr.Erase(false);
                    }
                }
                else
                {
                    // Create new layer table record 
                    LayerTableRecord ltr = new LayerTableRecord();
                    // Add some properties
                    ltr.Name = layerName;
                    ltr.LinetypeObjectId = db.ContinuousLinetype;
                    ltr.LineWeight = LineWeight.LineWeight030;
                    ltr.Color = Color.FromRgb(r, g, b);
                    layerId = lt.Add(ltr);
                    // Append layer to database
                    tr.AddNewlyCreatedDBObject(ltr, true);
                    tr.Commit();
                }
            }
        }

 Using your function try this way, not tested

              AcadLayer LY_Rutas = gbl_doc.Layers.Add("PruebaCAD");
               //change linetype
                LY_Rutas.Linetype = strLtype;
                //change entity color
                AcadAcCmColor acCol = LY_Rutas.TrueColor;
                //1. change color RGB
                acCol.ColorMethod = AcColorMethod.acColorMethodByRGB;
                acCol.SetRGB(255,255,0);
                //2. change color index etc...
                //acCol.ColorMethod = AcColorMethod.acColorMethodByACI;
                //acCol.ColorIndex = (AcColor)140;
                LY_Rutas.TrueColor = acCol;
                //release AcadAcCmColor object
                acCol = null;

 

~'J'~

_____________________________________
C6309D9E0751D165D0934D0621DFF27919
Contributor
14 Posts
0 Kudos
Registered: ‎03-29-2011
Post 5 of 6

Re: JLS2012-1

05-16-2012 02:09 AM in reply to: Hallex

Thanx very much.

it works perfectly.

 

:smileyhappy:

*Expert Elite*
1,569 Posts
171 Kudos
Registered: ‎10-08-2008
Post 6 of 6

Re: JLS2012-1

05-18-2012 08:05 AM in reply to: jlsantiago

Glad to help

Cheers :smileyhappy:

 

~'J'~

_____________________________________
C6309D9E0751D165D0934D0621DFF27919
Post to the Community

Have questions about Autodesk products? Ask the community.

New Post