.NET

Reply
Valued Mentor
fieldguy
Posts: 366
Registered: ‎03-31-2005
Message 1 of 3 (219 Views)

Layerstates, Layerstatemasks in vb

219 Views, 2 Replies
06-10-2011 09:01 AM

My goal is to batch plots using VB in Visual Studio 2008, Autocad Map 3D 2010, Win 7 Pro 64.  It all works but now I want to apply layerstates.

 

I am using the example in the dev. guide here: http://docs.autodesk.com/ACD/2010/ENU/AutoCAD%20.NET%20Developer's%20Guide/index.html

 

My questions: (any answers or advice is appreciated)

1. If you use Option Strict, how do you convert from integer to "layerstatesmasks.color"?  VS shows the error "Option Strict On disallows implicit conversions from 'Integer' to 'Autodesk.AutoCAD.DatabaseServices.LayerStateMasks'."  I can't figure out the conversion.  Are the values documented somewhere?  "clientmask" is not in the object browser or the dev. guide.

2. If you aren't sure what is masked, do you turn on all of the options on (on, color, linetype, lineweight, etc.)?  Is there a sum of values that means "layerstatemasks.all"?

3. LAS files are DXF format.  Do I have to read the LAS to detemine what the user wants?

4. The second argument to .restorelayerstate is the viewport id.  The examples use objectid.null.  I could have several layouts to plot, and maybe several viewports.  Is the process a) Make the layout current, b) activate each viewport, c) set model space current, and d) restore the layerstate?   

 

ADN Support Specialist
gopinath.taget
Posts: 123
Registered: ‎08-15-2007
Message 2 of 3 (208 Views)

Re: Layerstates, Layerstatemasks in vb

06-10-2011 12:57 PM in reply to: fieldguy

1. If you use Option Strict, how do you convert from integer to "layerstatesmasks.color"? VS shows the error "Option Strict On disallows implicit conversions from 'Integer' to 'Autodesk.AutoCAD.DatabaseServices.LayerStateMasks'." I can't figure out the conversion. Are the values documented somewhere? "clientmask" is not in the object browser or the dev. guide.

 

The LayerStateMask is an enum and is defined like this:

 

[Wrapper("AcDbLayerStateManager::LayerStateMask"), Flags]
public enum LayerStateMasks
{
    Color = 0x20,
    CurrentViewport = 0x200,
    Frozen = 2,
    LastRestored = 0x10000,
    LineType = 0x40,
    LineWeight = 0x80,
    Locked = 4,
    NewViewport = 0x10,
    None = 0,
    On = 1,
    Plot = 8,
    PlotStyle = 0x100
}

 

Its a wrapper for the C++ based enum. Having said that, I do see some differences between the C++ and .NET enum though. The C++ enum has the following additional enums defined:

 

kAll = kOn|kFrozen|kLocked|kPlot|kNewViewport|kColor|kLineType|kLineWeight|kPlotStyle|kCurrentViewport,
kStateIsHidden = 0x8000,
kDecomposition = kAll|0x20000

 

They are all integers so you could just use a standard explicit cast in your VB .NET code:

 

CType(LayerStateMasks.Color, Integer)

 

2. If you aren't sure what is masked, do you turn on all of the options on (on, color, linetype, lineweight, etc.)? Is there a sum of values that means "layerstatemasks.all"?

 

Since the .NET enum does not have an equavalent of kAll, you could do it yourself as shown above in kAll.

 

3. LAS files are DXF format. Do I have to read the LAS to detemine what the user wants?

 

I am assuming here your talking about Layer State Files and not LIDAR point cloud files that are also supported by Map 3D. If so, you could just import the LAS files: http://docs.autodesk.com/ACD/2011/ENU/filesAUG/WS1a9193826455f5ffb9242e10d8082106b-7fe4.htm

 

Or use the LayerStateManager.ImportLayerState method.

 

4. The second argument to .restorelayerstate is the viewport id. The examples use objectid.null. I could have several layouts to plot, and maybe several viewports. Is the process a) Make the layout current, b) activate each viewport, c) set model space current, and d) restore the layerstate?

 

You dont really have to switch between model/paper spaces. As long as you have the ObjectID of the viewport, you can just call the RestoreLayerState method with that objectID.

 

Hope this helps.

 

Gopinath Taget

Autodesk Developer Network

Valued Mentor
fieldguy
Posts: 366
Registered: ‎03-31-2005
Message 3 of 3 (198 Views)

Re: Layerstates, Layerstatemasks in vb

06-10-2011 03:31 PM in reply to: gopinath.taget

Thanks for the reply.  When you say the .NET enum I assume you are looking at the latest API?  I am asking because I have access to acad map 2012 but have not used those references yet.

 

The explicit cast ctype(layerstatemasks.color, integer) generates the "option strict on disallows implicit conversions" error.  That's confusing.  It seems as if the cast needs to go the other way - as in ctype(myinteger, layerstatesmasks.color), or ctype(myinteger, layerstatemasks).  But, those generate a "type not defined" error.

 

I think I need an integer equivalent for kAll.  Is there a way to reference or include the C++ wrapper?

Spoiler
 

 

You are not logged in.

Log into access your profile, ask and answer questions, share ideas and more. Haven't signed up yet? Register

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 to get help installing your software.

Ask the Community