.NET

Reply
Valued Contributor
chockalingam
Posts: 82
Registered: ‎03-06-2012
Message 1 of 10 (1,178 Views)
Accepted Solution

Changing the Color, Line type and Line weight using .Net

1178 Views, 9 Replies
03-08-2012 04:37 AM

How to change the Color, line type and Line weight for the Line using .Net. 

 

One option:

 

Code solution is posted at  http://www.theswamp.org/index.php?topic=41172.msg463389#msg463389

 

// (C) CodeHimBelonga kdub
using System;
using System.Windows;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;
using StringToColorTest;
using AcadApp = Autodesk.AutoCAD.ApplicationServices.Application;
[assembly: CommandClass(typeof (StringToColor))]
namespace StringToColorTest
{
public class StringToColor
{
[CommandMethod("DoIt")]
public void StringToColorTest_01()
{
Editor ed = AcadApp.DocumentManager.MdiActiveDocument.Editor;
string colorString = AskUserForColorString(ed);
int colorIndex = ColorIndexFromString(colorString);
MessageBox.Show( "Color String : " +
colorString +
"\nTranslates to Integer : " +
colorIndex.ToString(),
"StringToColorTest_01");
}
//
//
public string AskUserForColorString(Editor ed)
{
PromptStringOptions strOpts = new PromptStringOptions("\nEnter Color: ");
strOpts.AllowSpaces = false;
PromptResult res = ed.GetString(strOpts);
if (res.Status != PromptStatus.OK)
{
return "ByLayer";
}
return res.StringResult;
}
//
//
public int ColorIndexFromString(string colorString)
{
int result = -1;
if (int.TryParse(colorString, out result))
{
result = ((result >= 0) && (result <= 256) ? result : 256);
}
else
{
try
{
MyColors colorIndex =
(MyColors) Enum.Parse(typeof (MyColors), colorString, true);
if (Enum.IsDefined(typeof(MyColors), colorIndex))
{
result = (int) colorIndex;
}
}
catch (ArgumentException)
{
AcadApp.DocumentManager.MdiActiveDocument.Editor.WriteMessage(
"Blooper !!");
return 256;
}
}
return result;
}
//
//
private enum MyColors
{
ByBlock = 0,
Red = 1,
Yellow = 2,
Green = 3,
Cyan = 4,
Blue = 5,
Magenta = 6,
White = 7,
Grey = 8,
ByLayer = 256
};
}
}

 

 

 

Valued Mentor
KerryBrown
Posts: 269
Registered: ‎11-29-2008
Message 2 of 10 (1,174 Views)

Re: Changing the Color, Line type and Line weight using .Net

03-08-2012 04:45 AM in reply to: chockalingam

 

What have you tried. ?

 

... and what documentation have you looked at ?

//-------------------------------------------------------

class keyThumper<T> : Lazy<T>;      another  Swamper

Valued Contributor
chockalingam
Posts: 82
Registered: ‎03-06-2012
Message 3 of 10 (1,169 Views)

Re: Changing the Color, Line type and Line weight using .Net

03-08-2012 04:50 AM in reply to: KerryBrown

I tried the following

newentLine.Color = Autodesk.AutoCAD.Colors.Color.FromColorIndex(Autodesk.AutoCAD.Colors.ColorMethod.ByLayer, 190)

 

where, newentLine is a entity

This works,  but the issue is i want to change the color with a string input. I don't know how to do it

 

 

Valued Mentor
KerryBrown
Posts: 269
Registered: ‎11-29-2008
Message 4 of 10 (1,158 Views)

Re: Changing the Color, Line type and Line weight using .Net

03-08-2012 04:56 AM in reply to: chockalingam

 

What strings do you want to use ?

 

 

//-------------------------------------------------------

class keyThumper<T> : Lazy<T>;      another  Swamper

Valued Contributor
chockalingam
Posts: 82
Registered: ‎03-06-2012
Message 5 of 10 (1,156 Views)

Re: Changing the Color, Line type and Line weight using .Net

03-08-2012 04:57 AM in reply to: chockalingam

I want to send the color as string

 

ex: red, white, ByLayer........

Valued Mentor
KerryBrown
Posts: 269
Registered: ‎11-29-2008
Message 6 of 10 (1,142 Views)

Re: Changing the Color, Line type and Line weight using .Net

03-08-2012 05:18 AM in reply to: chockalingam

 

Sounds like a simple

if (..)

//--

else if ( .. )

//--

else if ( .. )

//--

else if ( .. )

//--

else ( .. )

 

construct would work for you.

 

... or you could use a dictionary if you're comfortable with that.

 

Depending on the source of the string you may be advised to change the case to a consistant format ....

 

Regards

 

 

 

 

//-------------------------------------------------------

class keyThumper<T> : Lazy<T>;      another  Swamper

*Expert Elite*
dgorsman
Posts: 5,367
Registered: ‎10-12-2006
Message 7 of 10 (1,121 Views)

Re: Changing the Color, Line type and Line weight using .Net

03-08-2012 10:33 AM in reply to: KerryBrown

Or a (switch...), since color values are mutually exclusive.  The various case statements would associate the strings with the enumerated values, or ACI values.

----------------------------------
If you are going to fly by the seat of your pants, expect friction burns.
Adopt. Adapt. Overcome. Or be overcome.
A good question will be halfway to a good answer.


Valued Mentor
KerryBrown
Posts: 269
Registered: ‎11-29-2008
Message 8 of 10 (1,109 Views)

Re: Changing the Color, Line type and Line weight using .Net

03-08-2012 04:26 PM in reply to: chockalingam

 

One option:

 

Code solution is posted at  http://www.theswamp.org/index.php?topic=41172.msg463389#msg463389

 

// (C) CodeHimBelonga kdub

using System;
using System.Windows;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;
using StringToColorTest;
using AcadApp = Autodesk.AutoCAD.ApplicationServices.Application;

[assembly: CommandClass(typeof (StringToColor))]

namespace StringToColorTest
{
    public class StringToColor
    {
        [CommandMethod("DoIt")]
        public void StringToColorTest_01()
        {
            Editor ed           = AcadApp.DocumentManager.MdiActiveDocument.Editor;
            string colorString  = AskUserForColorString(ed);
            int colorIndex      = ColorIndexFromString(colorString);

            MessageBox.Show( "Color String : " + 
                                        colorString + 
                                        "\nTranslates to Integer : " + 
                                        colorIndex.ToString(), 
                              "StringToColorTest_01");
        }

        //
        //
        public string AskUserForColorString(Editor ed)
        {
            PromptStringOptions strOpts = new PromptStringOptions("\nEnter Color: ");
            strOpts.AllowSpaces         = false;
            PromptResult res            = ed.GetString(strOpts);

            if (res.Status != PromptStatus.OK)
            {
                return "ByLayer";
            }
            return res.StringResult;
        }

        //
        //
        public int ColorIndexFromString(string colorString)
        {
            int result = -1;
            if (int.TryParse(colorString, out result))
            {
                result = ((result >= 0) && (result <= 256) ? result : 256);
            }
            else
            {
                try
                {
                    MyColors colorIndex =
                        (MyColors) Enum.Parse(typeof (MyColors), colorString, true);
                    if (Enum.IsDefined(typeof(MyColors), colorIndex))
                    {
                        result = (int) colorIndex;
                    }
                }
                catch (ArgumentException)
                {
                    AcadApp.DocumentManager.MdiActiveDocument.Editor.WriteMessage(
                                                                        "Blooper !!");
                    return 256;
                }
            }
            return result;
        }

        //
        //
        private enum MyColors
        {
            ByBlock = 0,
            Red     = 1,
            Yellow  = 2,
            Green   = 3,
            Cyan    = 4,
            Blue    = 5,
            Magenta = 6,
            White   = 7,
            Grey    = 8,
            ByLayer = 256
        };
    }
}

 

 

 

//-------------------------------------------------------

class keyThumper<T> : Lazy<T>;      another  Swamper

Valued Contributor
chockalingam
Posts: 82
Registered: ‎03-06-2012
Message 9 of 10 (1,094 Views)

Re: Changing the Color, Line type and Line weight using .Net

03-08-2012 08:03 PM in reply to: chockalingam

Thanks for solution, this code helps me................

Valued Mentor
KerryBrown
Posts: 269
Registered: ‎11-29-2008
Message 10 of 10 (1,066 Views)

Re: Changing the Color, Line type and Line weight using .Net

03-09-2012 05:49 PM in reply to: chockalingam

 

You're welcome.

It was an interesting technical problem.

 

Regards

 

//-------------------------------------------------------

class keyThumper<T> : Lazy<T>;      another  Swamper

Announcements
Are you familiar with the Autodesk Expert Elites? The Expert Elite program is made up of customers that help other customers by sharing knowledge and exemplifying an engaging style of collaboration. To learn more, please visit our Expert Elite website.
Need installation help?

Start with some of our most frequented solutions or visit the Installation and Licensing Forum to get help installing your software.