TheSwamp

Code Red => AutoLISP (Vanilla / Visual) => Topic started by: CAB on July 02, 2008, 12:24:16 PM

Title: Layer Creator Project
Post by: CAB on July 02, 2008, 12:24:16 PM
This is an idea I was pondering and thought I would write it down.
There are many Layer Creators out there but I thought this may be more versatile and
give some a chance to do some programing. I think Kerry's layer creator (http://www.theswamp.org/index.php?topic=8763.0) could be use as
part of the routine. It would be a great engine for the create part.
My idea is to have the end user create a Layer Data File, nothing new here. But to allow
the user to set the format of the data with a KEY record that the routine would use to
read the data. Also a default KEY that would be used when there was no data included
for that propriety. This would allow blank fields within each record.

I suppose you could consider this a CHALLENGE or a collaborative effort project.

Just rehashing and old idea.
Comments & suggestions welcome.

============================================================================

This is my pseudo code for the new routine.

Code: [Select]
Get a file pick from user (assume extension .lay)
Alternatly the file could be a CSV or XLS file
Read the file into a list
Find first line starting with */  and assume it is the format key data
Find the *+ Default Data record if included
Find any *- lines for LineType File Names
Assume lines starting with * or / or ; to be comment lines
Strip out any blank or * lines
Separate remaining lines into list of data using the separator character
Proceed to create the layers, maybe report on progress
Report completion of the routine

Each line could be a subroutine thus dividing up the project.

============================================================================

Format key is a method to allow the user to create a layer data file relevant to there needs
Only the layer Name is required & the order of data is left up to the user
Format key data starts with */
  Data separated with <space> characters
  Next character is the data separator, this applies to the layer data only
  Followed by the key for each column of data, this could be in any order but the layer data must follow this order
Format key Example:
*/ ; name color LineType LtFile PlotStyleName Discription

-< Properties available >-
name         
color       
Freeze       
LayerOn     
Lock         
Linetype     
lineweight   
description 
plottable   
PlotStyleName

LtFile is not a property of the Layer Object but a way to locate the Line Type file
If LtFile is included it will be the first file searched for the line type
else acad.lin or acadiso.lin will be searched next then the supplied LineType files will be searched in the order supplied.

Line Type file names line start with *-
Example:
*- MyLtFile.lin
*- CABltfile.lin

Include path if not in the ACAD search path.

Default Data is a way to set the data when none is included in the layer record
This data must be in the same order as the Format Key Data
Example:
Code: [Select]
*/ ; name      PlotStyleName color   LineType   Freeze   Lock    LayerOn
*+ Default Data    ;  Light   ;7  ; Continuous; thawed; Unlocked; on
FJ1_A-DIMS         ;  ; ; ; ; ;

Perhaps there should be a flag to update or skip existing layers of the same name.
This would likely be a global flag that applied to all layers in the data file.

Layer Data File Example:
Note that leading & trailing space characters in each field will be deleted
Blank lines will be ignored

Code: [Select]
*=====================
*  Framing Layer Data File
*=====================
* Used for residential framing plans with two stories

*- CABltfile.lin

*/ ; name      PlotStyleName color   LineType   Freeze   Lock    LayerOn
*+ Default Data    ;  Light   ;7  ; Continuous; thawed; Unlocked; on

FJ1_A-DIMS         ;  xLight  ;1  ; Continuous; thawed; Unlocked; on
FJ1_BREAKLINE      ;  Light   ;7  ; Continuous; thawed; Unlocked; on
FJ1_Beam           ;  Heavy   ;1  ; Short Dash; thawed; Unlocked; on
FJ1_Bearing Wall   ;  Medium  ;7  ; Continuous; thawed; Unlocked; on
FJ1_FINISH_TAGS    ;  xLight  ;7  ; Continuous; thawed; Unlocked; on
FJ1_Floor Joist    ;  Medium  ;3  ; CENTER2   ; thawed; Unlocked; on
FJ1_Hatch Lite     ;  xL_Scrn ;26 ; Continuous; thawed; Unlocked; on
FJ1_LEADERS        ;  xLight  ;7  ; Continuous; thawed; Unlocked; on
FJ1_LINE           ;  Medium  ;7  ; Continuous; thawed; Unlocked; on
FJ1_POLYLINE       ;  Medium  ;7  ; Continuous; thawed; Unlocked; on
FJ1_RECTANG        ;  Medium  ;7  ; Continuous; thawed; Unlocked; on
FJ1_Roof           ;  Medium  ;40 ; HDR       ; thawed; Unlocked; on
FJ1_SECTION_TAGS   ;  xLight  ;7  ; Continuous; thawed; Unlocked; on
FJ1_StrongBack     ;  Heavy   ;1  ; CENTER2   ; thawed; Unlocked; on
FJ1_TEXT           ;  Light   ;92 ; Continuous; thawed; Unlocked; on
FJ2_A-DIMS         ;  Light   ;1  ; Continuous; thawed; Unlocked; on
FJ2_BREAKLINE      ;  Light   ;7  ; Continuous; thawed; Unlocked; on
FJ2_Beam           ;  Heavy   ;12 ; Short Dash; thawed; Unlocked; on
FJ2_CIRCLE         ;  Medium  ;7  ; Continuous; thawed; Unlocked; on
FJ2_Ceiling Detail ;  Medium  ;13 ; Short Dash; thawed; Unlocked; on
FJ2_DIM            ;  xLight  ;1  ; Continuous; thawed; Unlocked; on
FJ2_ELLIPSE        ;  Light   ;7  ; Continuous; thawed; Unlocked; on
FJ2_Engineering    ;  Light   ;54 ; Continuous; thawed; Unlocked; on
FJ2_FINISH_TAGS    ;  xLight  ;7  ; Continuous; thawed; Unlocked; on
FJ2_FIRE_PROTECTION;  Light   ;7  ; Continuous; thawed; Unlocked; on
FJ2_Floor Joist    ;  Medium  ;82 ; CENTER2   ; thawed; Unlocked; on
FJ2_GOBOLT         ;  Medium  ;220; Continuous; thawed; Unlocked; on
FJ2_LEADERS        ;  xLight  ;7  ; Continuous; thawed; Unlocked; on
FJ2_LINE           ;  Medium  ;22 ; Continuous; thawed; Unlocked; on
FJ2_POLYLINE       ;  Medium  ;7  ; Continuous; thawed; Unlocked; on
FJ2_REBAR          ;  Heavy   ;7  ; Continuous; thawed; Unlocked; on
FJ2_RECTANG        ;  Medium  ;7  ; Continuous; thawed; Unlocked; on
FJ2_Roof           ;  Medium  ;13 ; HDR       ; thawed; Unlocked; on
FJ2_RoofOver       ;  Light   ;1  ; HDR       ; thawed; Unlocked; on
FJ2_SECTION_TAGS   ;  xLight  ;7  ; Continuous; thawed; Unlocked; on
FJ2_ShearWall      ;  xL_Scrn ;52 ; Continuous; thawed; Unlocked; on
FJ2_TEXT           ;  Light   ;2  ; Continuous; thawed; Unlocked; on
**  E N D   O F   F I L E
Title: Re: Layer Creator Project
Post by: TimSpangler on July 02, 2008, 12:37:18 PM
Well as you know, I have a LayerCreation program.  I have struggled with this exact thing.  I use external files to determine the layers, etc... however if one edited the files and missed a delimeter it would screw up the works and crash autocad. (mainly because I do not check the validity of the data be fore using it :roll: Well the same can be said for the example you posted. ( the same can be said for any program which used an external file that can be edited by the user. (even XML which I thought about going that route).

My point is how do you control the info?  It would have to be checked before use, which in turns slows down the program.?

I am open for suggestions and I am willing to help in any way.

*All spelling error are free of charge*
Title: Re: Layer Creator Project
Post by: JohnK on July 02, 2008, 12:48:15 PM
IMO a propitiatory format can lead to mistakes from the maintainer. I believe its best to keep it as simple as possible. AutoCAD already has a standard for layer data --and everything else for that matter-- DXF codes. If you look at my own layer creator program you will notice that I keep the layer data in the native DXF format.

For example:
Code: [Select]
((0 . "LAYER") (2 . "0") (70 . 0) (62 . 7) (6 . "Continuous"))
This lends itself to smaller, cleaner, more efficient data -i.e. the use of bit codes for assoc code 62 for example.

I would also look into the speed of VL vs AL in this situation. In my procedure I went with AL because I coulnt match the speed of an AutoLisp version.
Title: Re: Layer Creator Project
Post by: CAB on July 02, 2008, 01:01:18 PM
I see you point John but if you use an editor with fixed character widths or an Xl file you eliminate the missplaced errors.
Title: Re: Layer Creator Project
Post by: CAB on July 02, 2008, 01:06:06 PM
Tim,
See the revised routine here. http://www.theswamp.org/index.php?topic=8763.msg287942#msg287942
It traps the errors when creating the layers & modifying the properties.

Additional error checks must be made in collection of the data from the file.
When an error is detected a message should be displayed as to the error & then the default  data used in place of the bad data.
If the Default data is bad then the ACAD default data would be automatically used.
Title: Re: Layer Creator Project
Post by: FengK on July 02, 2008, 01:17:43 PM
Alan,

IMO, using a tab-delimited format would be good because it allows user to have "," or ";" in the layer data. For example, I've written a similar tool and for each layer, there is a column for description of the layer, which may have "," or ";". The data file can be edited in Excel. Reading data from .xls file would not be hard either.
Title: Re: Layer Creator Project
Post by: jbuzbee on July 02, 2008, 01:44:07 PM
Wow there are a lot of these Layer Creator routines running around lately :-o

Quote
Layer Data File

What's better than a drawing file (DWG)?  Very, very easy to manage layers in the host environment (a dwg IS a database). Besides, you can use said file with AutoCAD's built in 'Standards' software. Use ObjectDBX to import layers from the Layer Data File - lots of very simple streamlined examples floating around.  Use ObjectDBX to compare and fix Layer States between the activedocument and the Layer Data File - that would be a nightmare in a non-native file formate.  If a program needed to track layer interaction you have the ability to attach xdata to layers.  I think editing is better in AutoCAD; instead of a static notepad file full of cryptic text you get graphics, colors, linetypes, etc. in AutoCAD (well, I'm a designer so I guess I'm biased to graphics :wink:).

Before you go down this arduous road I just wanted to bring up a counter point - don't hate me!
Title: Re: Layer Creator Project
Post by: VovKa on July 02, 2008, 01:52:05 PM
i store all predefined layers in a dwg template, and just use dbx to import.
good thing is that layers' linetypes are imported automaticaly.
Code: [Select]
(defun ImportAllSmth

       (Smth DwgName / dbxDocObj dbxSmthObj AcadObj AcDocObj SmthCollectObj)
  (and (setq DwgName (findfile DwgName))
       (setq AcadObj (vlax-get-acad-object))
       (setq AcDocObj (vla-get-ActiveDocument AcadObj))
       (not (vl-catch-all-error-p
      (setq SmthCollectObj (vl-catch-all-apply 'vlax-get-property (list AcDocObj Smth)))
    )
       )
       (not (vl-catch-all-error-p
      (setq dbxDocObj
     (vl-catch-all-apply
       'vla-GetInterfaceObject
       (list
AcadObj
(strcat "ObjectDBX.AxDbDocument." (substr (getvar "ACADVER") 1 2))
       )
     )
      )
    )
       )
       (not (vl-catch-all-error-p
      (vl-catch-all-apply 'vla-open (list dbxDocObj DwgName))
    )
       )
       (not (vl-catch-all-error-p
      (setq dbxSmthObj (vl-catch-all-apply 'vlax-get-property (list dbxDocObj Smth)))
    )
       )
       (vlax-for LayerObj dbxSmthObj
(vl-catch-all-apply
   'vla-CopyObjects
   (list dbxDocObj
(vlax-safearray-fill
   (vlax-make-safearray vlax-vbObject (cons 0 0))
   (list LayerObj)
)
SmthCollectObj
   )
)
       )
       (not (vla-Regen AcDocObj acActiveViewport))
  )
  (mapcar (function
    (lambda (Obj)
      (and Obj (not (vl-catch-all-error-p Obj)) (vlax-release-object Obj))
    )
  )
  (list dbxSmthObj dbxDocObj SmthCollectObj AcDocObj AcadObj)
  )
)
;;;(ImportAllSmth "Layers" "vk_Standard.dwg")
Title: Re: Layer Creator Project
Post by: CAB on July 02, 2008, 02:28:48 PM
Alan,

IMO, using a tab-delimited format would be good because it allows user to have "," or ";" in the layer data. For example, I've written a similar tool and for each layer, there is a column for description of the layer, which may have "," or ";". The data file can be edited in Excel. Reading data from .xls file would not be hard either.
Kelie,
You the user chooses the delimiter.
Title: Re: Layer Creator Project
Post by: CAB on July 02, 2008, 02:31:42 PM
Wow there are a lot of these Layer Creator routines running around lately :-o

Quote
Layer Data File

What's better than a drawing file (DWG)?  Very, very easy to manage layers in the host environment (a dwg IS a database). Besides, you can use said file with AutoCAD's built in 'Standards' software. Use ObjectDBX to import layers from the Layer Data File - lots of very simple streamlined examples floating around.  Use ObjectDBX to compare and fix Layer States between the activedocument and the Layer Data File - that would be a nightmare in a non-native file formate.  If a program needed to track layer interaction you have the ability to attach xdata to layers.  I think editing is better in AutoCAD; instead of a static notepad file full of cryptic text you get graphics, colors, linetypes, etc. in AutoCAD (well, I'm a designer so I guess I'm biased to graphics :wink:).

Before you go down this arduous road I just wanted to bring up a counter point - don't hate me!

Yes, but some people still prefer a text file list of layers.
This is an exercize and exchange of ideas and your is welcome too. 8-)
Title: Re: Layer Creator Project
Post by: JohnK on July 02, 2008, 02:33:36 PM
Tim,
See the revised routine here. http://www.theswamp.org/index.php?topic=8763.msg287942#msg287942
It traps the errors when creating the layers & modifying the properties.

Additional error checks must be made in collection of the data from the file.
When an error is detected a message should be displayed as to the error & then the default  data used in place of the bad data.
If the Default data is bad then the ACAD default data would be automatically used.


entmake will not remake a layer if already exists, therefore less error trap required.
Title: Re: Layer Creator Project
Post by: GDF on July 02, 2008, 02:33:59 PM
Alan

*/ ; name      PlotStyleName color   LineType   Freeze   Lock    LayerOn
*+ Default Data    ;  Light   ;7  ; Continuous; thawed; Unlocked; on
FJ1_A-DIMS         ;  ; ; ; ; ;


I would add plot and noplot to the data. This data is stored in an ini file similar to your routine.


Gary
Title: Re: Layer Creator Project
Post by: JohnK on July 02, 2008, 02:35:12 PM
I see you point John but if you use an editor with fixed character widths or an Xl file you eliminate the missplaced errors.
*I* and *you* may use an editor but...
Title: Re: Layer Creator Project
Post by: JohnK on July 02, 2008, 02:38:45 PM
Alan

*/ ; name      PlotStyleName color   LineType   Freeze   Lock    LayerOn
*+ Default Data    ;  Light   ;7  ; Continuous; thawed; Unlocked; on
FJ1_A-DIMS         ;  ; ; ; ; ;


I would add plot and noplot to the data. This data is stored in an ini file similar to your routine.


Gary

...if your going to use a propitiatory format why not just use XML and allow for many possibilities?
Title: Re: Layer Creator Project
Post by: CAB on July 02, 2008, 02:42:27 PM
Alan

*/ ; name      PlotStyleName color   LineType   Freeze   Lock    LayerOn
*+ Default Data    ;  Light   ;7  ; Continuous; thawed; Unlocked; on
FJ1_A-DIMS         ;  ; ; ; ; ;


I would add plot and noplot to the data. This data is stored in an ini file similar to your routine.


Gary
You missed one of the concepts of the routine.

YOU the creator of the Data File determine the data.
You start with the layer name & then add the properties you want in the data file.
You also determine the order of the data, although logic would say put the name as the
first column and then it's up to you what comes next & what you want to include or exclude
from the data file.
Title: Re: Layer Creator Project
Post by: GDF on July 02, 2008, 02:51:18 PM
i store all predefined layers in a dwg template, and just use dbx to import.
good thing is that layers' linetypes are imported automaticaly.
Code: [Select]
(defun ImportAllSmth

       (Smth DwgName / dbxDocObj dbxSmthObj AcadObj AcDocObj SmthCollectObj)
  (and (setq DwgName (findfile DwgName))
       (setq AcadObj (vlax-get-acad-object))
       (setq AcDocObj (vla-get-ActiveDocument AcadObj))
       (not (vl-catch-all-error-p
      (setq SmthCollectObj (vl-catch-all-apply 'vlax-get-property (list AcDocObj Smth)))
    )
       )
       (not (vl-catch-all-error-p
      (setq dbxDocObj
     (vl-catch-all-apply
       'vla-GetInterfaceObject
       (list
AcadObj
(strcat "ObjectDBX.AxDbDocument." (substr (getvar "ACADVER") 1 2))
       )
     )
      )
    )
       )
       (not (vl-catch-all-error-p
      (vl-catch-all-apply 'vla-open (list dbxDocObj DwgName))
    )
       )
       (not (vl-catch-all-error-p
      (setq dbxSmthObj (vl-catch-all-apply 'vlax-get-property (list dbxDocObj Smth)))
    )
       )
       (vlax-for LayerObj dbxSmthObj
(vl-catch-all-apply
   'vla-CopyObjects
   (list dbxDocObj
(vlax-safearray-fill
   (vlax-make-safearray vlax-vbObject (cons 0 0))
   (list LayerObj)
)
SmthCollectObj
   )
)
       )
       (not (vla-Regen AcDocObj acActiveViewport))
  )
  (mapcar (function
    (lambda (Obj)
      (and Obj (not (vl-catch-all-error-p Obj)) (vlax-release-object Obj))
    )
  )
  (list dbxSmthObj dbxDocObj SmthCollectObj AcDocObj AcadObj)
  )
)
;;;(ImportAllSmth "Layers" "vk_Standard.dwg")

This is pretty slick, me likes. You could use this as a good starting point (like a template file) or to import into an existing drawing.

Gary
Title: Re: Layer Creator Project
Post by: CAB on July 02, 2008, 02:52:23 PM
Yes, good work VovKa.
Title: Re: Layer Creator Project
Post by: GDF on July 02, 2008, 02:57:37 PM
Alan

*/ ; name      PlotStyleName color   LineType   Freeze   Lock    LayerOn
*+ Default Data    ;  Light   ;7  ; Continuous; thawed; Unlocked; on
FJ1_A-DIMS         ;  ; ; ; ; ;


I would add plot and noplot to the data. This data is stored in an ini file similar to your routine.


Gary
You missed one of the concepts of the routine.

YOU the creator of the Data File determine the data.
You start with the layer name & then add the properties you want in the data file.
You also determine the order of the data, although logic would say put the name as the
first column and then it's up to you what comes next & what you want to include or exclude
from the data file.


Alan

I think we are on the same page. Here is how I placed it within a dialog box. The first column is for plot noplot the "x". The list within the dailpg box is created by reading an ini file.

Gary
Title: Re: Layer Creator Project
Post by: JohnK on July 02, 2008, 03:02:46 PM
Holly complicated batman!
Title: Re: Layer Creator Project
Post by: TimSpangler on July 02, 2008, 03:36:17 PM
James touches on a great point about ObjectDBX but the thing about it I didn't like was separation of layers into differant disciplines or differant contractors layers, etc..  That is the reason that I went with the external file(s).  And I tried to keep things simple, however the more people use it the more emails I get about wanting new features.  :ugly:

Title: Re: Layer Creator Project
Post by: VovKa on July 02, 2008, 03:41:02 PM
Yes, good work VovKa.
thanx Alan.
as to your project, i think the easiest way to read your data file is to make it compatible with read function
something like
Code: [Select]
(setq LayData (read (strcat "(" (read-line DataFile) ")")))
and remember, one day people will demand support for RGB layer colors :)
Title: Re: Layer Creator Project
Post by: JohnK on July 02, 2008, 03:50:42 PM
DBX? If your going to store your layers in a dwg then why not just insert the dwg as a block?
Title: Re: Layer Creator Project
Post by: T.Willey on July 02, 2008, 03:56:59 PM
DBX? If your going to store your layers in a dwg then why not just insert the dwg as a block?
Won't correct layers.  I have a routine that will correct the layers to meet company standards if the don't.  You have to use code to do it, and I use ODBX.
Title: Re: Layer Creator Project
Post by: TimSpangler on July 02, 2008, 03:57:21 PM
That's what we do here (were I work) when we clean a dwg (purge, audit, insert the std dwg, save, close)
Title: Re: Layer Creator Project
Post by: CAB on July 02, 2008, 04:11:59 PM
Won't correct layers.  I have a routine that will correct the layers to meet company standards if the don't.  You have to use code to do it, and I use ODBX.

Tim do you have a link to your latest routine?
Title: Re: Layer Creator Project
Post by: JohnK on July 02, 2008, 04:17:54 PM
Yes, good work VovKa.
thanx Alan.
as to your project, i think the easiest way to read your data file is to make it compatible with read function
something like
Code: [Select]
(setq LayData (read (strcat "(" (read-line DataFile) ")")))
and remember, one day people will demand support for RGB layer colors :)
tabs could be a problem then.
Title: Re: Layer Creator Project
Post by: VovKa on July 02, 2008, 04:21:47 PM
tabs could be a problem then.
i think not:
(read "(\"1\"\t\"2\")") -> ("1" "2")
Title: Re: Layer Creator Project
Post by: JohnK on July 02, 2008, 04:23:19 PM
DBX? If your going to store your layers in a dwg then why not just insert the dwg as a block?
Won't correct layers.  I have a routine that will correct the layers to meet company standards if the don't.  You have to use code to do it, and I use ODBX.

If thats all thats required...I dont know. Im on the fence. ODBX is cool but text files are fast and easy and i dont really like keeping everything in DWGs if i dont have to (I have a hard enough time maintaining the ones i have).
What about XML?
Title: Re: Layer Creator Project
Post by: CAB on July 02, 2008, 04:24:03 PM
James touches on a great point about ObjectDBX but the thing about it I didn't like was separation of layers into differant disciplines or differant contractors layers, etc..  That is the reason that I went with the external file(s).  And I tried to keep things simple, however the more people use it the more emails I get about wanting new features.  :ugly:

Tim, you routine is very robust.
The one thing with separate categories of layer data is that shared layers must be maintained in all files
or groups.

I suppose that using ObjectDBX or Data files there could be a common Group of Layers that always needs
to be loaded.  Also regarding groups of layers, not sure if a WCMATCH would work if you wanted to keep
all the layers in one DWG or data file.
So to separate the groups you would likely need separate files. That seems like the simplest way.
You would still need a "Common Layers" file else you must maintain all data file with common layers.
Title: Re: Layer Creator Project
Post by: JohnK on July 02, 2008, 04:25:21 PM
tabs could be a problem then.
i think not:
(read "(\"1\"\t\"2\")") -> ("1" "2")

no i get that part, I was just thinking that we are right back to my original statement about chances for mistakes from the end user.
Title: Re: Layer Creator Project
Post by: VovKa on July 02, 2008, 04:34:49 PM
chances for mistakes from the end user.
that's for sure, and that's why i use dbx
Title: Re: Layer Creator Project
Post by: CAB on July 02, 2008, 04:36:07 PM
My wish was to keep the data file as easy to maintain as possible.
Using the example file "Framing Layer Data File" I posted, you can still use tab
as the separator.
Where do you see the errors creeping in with that format?
Title: Re: Layer Creator Project
Post by: jbuzbee on July 02, 2008, 04:37:12 PM
Tim,

I don't have an image of the form, but I use Layer Filters defined in the Layer Data File to "sort" Layers in the Import Layer form.  And yes, ObjectDBX is very powerful: I have Forms to import Views and Blocks, I have a form that pulls all our ADT stuff, styles etc, from a main ADT Data Drawing where all our styles are defined. That drawing is the defined ADT Standards drawing - so as I update / edit styles I use this tool to update a Project - and of course the next time a user starts drawing a wall (even if it's note already defined in the active drawing)they have the latest style definition instantly via ObjectDBX.

The nice thing about this type of program - management theory is A: the template drawing doesn't necessarily have to contain all Layers (Blocks, Views, ADT Styles, etc.) B: When used with AutoCAD's Standards tool it makes managing Office Standards a breeze, and C: the user decides what layers (s)he needs at any point in time - instead of inserting an entire drawing (one place I worked had over 700 standard layers!)
Title: Re: Layer Creator Project
Post by: JohnK on July 02, 2008, 04:41:08 PM
VovKa,

My thought when i was creating my layer creator was that a delimited file for my layers was a pain to maintain. So i made mine use the AutoCAD method (list of lists). ...Give this one a try:
http://www.theswamp.org/index.php?topic=23173.msg280776#msg280776

Load it up and just cancel the dialog box that will pop up.
Use the (save-layer-list-to-file) function to save a layer file you can look at. Then you can see what im talking about. The whole process fast and fairly clean.
Title: Re: Layer Creator Project
Post by: JohnK on July 02, 2008, 04:42:50 PM
My wish was to keep the data file as easy to maintain as possible.
Using the example file "Framing Layer Data File" I posted, you can still use tab
as the separator.
Where do you see the errors creeping in with that format?

1.) I dislike tabs in general so i disable them in my editor; i use spaces instead.
2.) A user in Notepad just hits the space bar instead of tab.
3.) A user uses two tabs instead of one.
...
Title: Re: Layer Creator Project
Post by: JohnK on July 02, 2008, 04:43:42 PM
chances for mistakes from the end user.
that's for sure, and that's why i use dbx
now that is a good point!
Title: Re: Layer Creator Project
Post by: VovKa on July 02, 2008, 04:44:07 PM
Where do you see the errors creeping in with that format?
an old lady drafting all day long and expecting computer to be smart enough to read her thougts, will surely find a way to crash any application :)
maybe misspelling, maybe typing ":" instead of ";" somewhere in data file, end users are rather ingenious...
Title: Re: Layer Creator Project
Post by: JohnK on July 02, 2008, 04:45:48 PM
Tim,

I don't have an image of the form, but I use Layer Filters defined in the Layer Data File to "sort" Layers in the Import Layer form.  And yes, ObjectDBX is very powerful: I have Forms to import Views and Blocks, I have a form that pulls all our ADT stuff, styles etc, from a main ADT Data Drawing where all our styles are defined. That drawing is the defined ADT Standards drawing - so as I update / edit styles I use this tool to update a Project - and of course the next time a user starts drawing a wall (even if it's note already defined in the active drawing)they have the latest style definition instantly via ObjectDBX.

The nice thing about this type of program - management theory is A: the template drawing doesn't necessarily have to contain all Layers (Blocks, Views, ADT Styles, etc.) B: When used with AutoCAD's Standards tool it makes managing Office Standards a breeze, and C: the user decides what layers (s)he needs at any point in time - instead of inserting an entire drawing (one place I worked had over 700 standard layers!)

My AutoLisp version was tested on 10,000 layers and took about 1 second. How long would it take for ODBX?
Title: Re: Layer Creator Project
Post by: T.Willey on July 02, 2008, 04:57:05 PM
Won't correct layers.  I have a routine that will correct the layers to meet company standards if the don't.  You have to use code to do it, and I use ODBX.

Tim do you have a link to your latest routine?
Here you go Alan.

[ http://www.theswamp.org/index.php?topic=12845.msg156899#msg156899 ]
Title: Re: Layer Creator Project
Post by: VovKa on July 02, 2008, 04:57:31 PM
45 seconds
Title: Re: Layer Creator Project
Post by: T.Willey on July 02, 2008, 04:58:27 PM
ODBX or read from a text file to me is the same, just that a drawing you know has to have layers laid out correctly.  I don't use text files I only use drawings, and I have the drawings separated out to disciplines.
Title: Re: Layer Creator Project
Post by: JohnK on July 02, 2008, 05:08:34 PM
45 seconds?!?!  ...No way. I wrote that one because the previous one here (i didnt write it, it was before my time) took 3 seconds for 100 layers!?! *lol*
Title: Re: Layer Creator Project
Post by: T.Willey on July 02, 2008, 05:10:05 PM
Will not overwrite, but will create if not there.  Worked on the test list except for some linetypes that I don't have, and that didn't stop the command from running.

Had to use one ActiveX call, as I don't know how else to get a linetype into the table without it or a 'command' call.

Code: [Select]
(defun c:Test (/ LtCol LtFileList File Opened Str tempStr LayPat tempList Dflt LayList PltStyList tempData tempName
    tempLt LtList Found tempPs)
   
    (defun GetPlotStyleList (/ tempName tempList)
       
        (foreach i (dictsearch (namedobjdict) "ACAD_PLOTSTYLENAME")
            (cond
                ((equal (car i) 3)
                    (setq tempName (cdr i))
                )
                ((equal (car i) 350)
                    (setq tempList (cons (cons tempName (cdr i)) tempList))
                )
            )
        )
        tempList
    )
    ;------------------------------------------------------
    (defun ReadLinetypeFile (Path / Opened tempStr tempList)
       
        (setq Opened (open Path "r"))
        (while (setq tempStr (read-line Opened))
            (if (= (substr tempStr 1 1) "*")
                (setq tempList
                    (cons
                        (strcase (car (StrParse (substr tempStr 2) ",")))
                        tempList
                    )
                )
            )
        )
        (close Opened)
        tempList
    )
    ;-----------------------------------------------------------------
    (setq LtCol (vla-get-Linetypes (vla-get-ActiveDocument (vlax-get-Acad-Object))))
    (setq LtFileList
        (list
            (if (equal (getvar 'Measurement) 0)
                "acad.lin"
                "acadiso.lin"
            )
        )
    )
    (if
        (and
            (setq File (getfiled "Select layer definition file." "" "lay" 4))
            (setq Opened (open File "r"))
            (progn
                (while (setq Str (read-line Opened))
                    (setq tempStr (substr Str 1 2))
                    (cond
                        ((= tempStr "*-")
                            (setq LtFileList (cons (substr Str 4) LtFileList))
                        )
                        ((= tempStr "*/")
                            (setq LayPat (StrParse (substr Str 4) " "))
                            (foreach i LayPat
                                (if (> (strlen i) 0)
                                    (setq tempList (cons i tempList))
                                )
                            )
                            (setq LayPat (mapcar 'strcase (reverse tempList)))
                        )
                        ((= tempStr "*+")
                            (setq Dflt (mapcar 'RemoveSpace (StrParse (substr Str 4) (car LayPat))))
                        )
                        (
                            (and
                                (/= (substr tempStr 1 1) "*")
                                (/= tempStr "")
                                (/= (substr tempStr 1 1) " ")
                            )
                            (setq LayList
                                (cons
                                    (mapcar 'RemoveSpace (StrParse Str (car LayPat)))
                                    LayList
                                )
                            )
                        )
                    )
                )
                (close Opened)
                LayList
            )
            Dflt
            (setq LayPat (cdr LayPat))
            (setq ListLen (length LayPat))
            (setq PltStyList (GetPlotStyleList))
        )
        (foreach i LayList
            (setq cnt 0)
            (setq tempData '((70 . 0)))
            (repeat ListLen
                (setq tempProp (nth cnt LayPat))
                (setq tempValue (nth cnt i))
                (cond
                    ((= tempProp "NAME")
                        (setq tempData
                            (cons
                                (cons 2 (setq tempName tempValue))
                                tempData
                            )
                        )
                    )
                    ((= tempProp "PLOTSTYLENAME")
                        (setq tempData
                            (cons
                                (if (setq tempPs (assoc tempValue PltStyList))
                                    (cons 390 (cdr (assoc tempValue PltStyList)))
                                    (cons 390 (cdr (assoc "Normal" PltStyList)))
                                )
                                tempData
                            )
                        )
                    )
                    ((= tempProp "COLOR")
                        (setq tempData
                            (if (setq tempList (assoc 62 tempData))
                                (subst
                                    (cons
                                        62
                                        (if (< (cdr tempList) 0)
                                            (* -1 tempValue)
                                            tempValue
                                        )
                                    )
                                    tempList
                                    tempData
                                )
                                (cons
                                    (cons 62 (atoi tempValue))
                                    tempData
                                )
                            )
                        )
                    )
                    ((= tempProp "LINETYPE")
                        (setq tempData
                            (cons
                                (cons 6 (setq tempLt (strcase tempValue)))
                                tempData
                            )
                        )
                    )
                    ((= tempProp "FREEZE")
                        (if (= tempValue "FREEZE")
                            (setq tempData
                                (if (setq tempList (assoc 70 tempData))
                                    (subst
                                        (cons
                                            70
                                            (1+ (cdr tempList))
                                        )
                                        tempList
                                        tempData
                                    )
                                    (cons
                                        (cons 70 1)
                                        tempData
                                    )
                                )
                            )
                        )
                    )
                    ((= tempProp "LOCK")
                        (if (= tempValue "LOCK")
                            (setq tempData
                                (if (setq tempList (assoc 70 tempData))
                                    (subst
                                        (cons
                                            70
                                            (+ (cdr tempList) 4)
                                        )
                                        tempList
                                        tempData
                                    )
                                    (cons
                                        (cons 70 4)
                                        tempData
                                    )
                                )
                            )
                        )
                    )
                    ((= tempProp "LAYERON")
                        (if (= tempValue "OFF")
                            (setq tempData
                                (if (setq tempList (assoc 62 tempData))
                                    (subst
                                        (cons
                                            62
                                            (* -1 (cdr tempList))
                                        )
                                        tempList
                                        tempData
                                    )
                                    (cons
                                        (cons 62 -7)
                                        tempData
                                    )
                                )
                            )
                        )
                    )
                )
                (setq cnt (1+ cnt))
            )
            (if (not (tblsearch "LType" tempLt))
                (foreach i LtFileList
                    (setq Found nil)
                    (if (not Found)
                        (progn
                            (if (not (assoc i LtList))
                                (setq LtList
                                    (cons
                                        (cons i (ReadLinetypeFile (findfile i)))
                                        LtList
                                    )
                                )
                            )
                            (setq tempList (assoc i LtList))
                            (if (member tempLt tempList)
                                (progn
                                    (vlax-invoke LtCol 'Load tempLt i)
                                    (setq Found T)
                                )
                            )
                        )
                    )
                )
            )
            (if
                (not
                    (entmake
                        (append
                            '(
                                (0 . "LAYER")
                                (100 . "AcDbSymbolTableRecord")
                                (100 . "AcDbLayerTableRecord")
                            )
                            (reverse tempData)
                        )
                    )
                )
                (prompt (strcat "\n Could not make layer: " tempName))
            )
        )
    )
    (princ)
)

Edit:
Forgot to post the subs.

Code: [Select]
(defun RemoveSpace (String / cnt)
; Remove spaces from begining and end of string

(while (= (substr String 1 1) " ")
(setq String (substr String 2 (strlen String)))
)
(setq cnt (strlen String))
(while
(and
(> cnt 0)
(= (substr String cnt 1) " ")
)
(setq cnt (1- cnt))
)
(substr String 1 cnt)
)
;----------------------------------------------
(defun StrParse (String Seperator / Pos1 Pos2 NewStrList)
;|
  Seperator a string (making a list of stings) at a given
  string value
  ie: (StrParse "1,1,0" ",")
  returns: ("1" "1" "0")
  Written when I couldn't find it on the web
  By: Tim Willey 11/15/2004
|;

(setq Pos2 1)
(while (setq Pos1 (vl-string-search Seperator String Pos1))
(if (= Pos2 1)
(setq NewStrList (cons (substr String Pos2 Pos1) NewStrList))
(setq NewStrList (cons (substr String Pos2 (- (1+ Pos1) Pos2)) NewStrList))
)
(setq Pos2 (1+ (+ (strlen Seperator) Pos1)))
(setq Pos1 (+ Pos1 (strlen Seperator)))
)
(reverse (setq NewStrList (cons (substr String Pos2) NewStrList)))
)
Title: Re: Layer Creator Project
Post by: JohnK on July 02, 2008, 05:15:59 PM
T.Willey,
How do you code up some of these larger lisps in so little time...You must type 1000 words per min!?
Title: Re: Layer Creator Project
Post by: VovKa on July 02, 2008, 05:19:19 PM
took 3 seconds for 100 layers!?! *lol*
my dbx loads 100 layers in tenths of a second, so not a problem for me :)
Title: Re: Layer Creator Project
Post by: T.Willey on July 02, 2008, 05:21:03 PM
T.Willey,
How do you code up some of these larger lisps in so little time...You must type 1000 words per min!?
Slowness at work, and lisp logic seems easier to me, as long as I'm not nesting lists three or four deep.  Then I have to think a little longer.

I will take this as a compliment.  Thanks John.   :-)
Title: Re: Layer Creator Project
Post by: JohnK on July 02, 2008, 06:01:38 PM
took 3 seconds for 100 layers!?! *lol*
my dbx loads 100 layers in tenths of a second, so not a problem for me :)
*lol*
Title: Re: Layer Creator Project
Post by: JohnK on July 02, 2008, 06:03:58 PM
T.Willey,
How do you code up some of these larger lisps in so little time...You must type 1000 words per min!?
Slowness at work, and lisp logic seems easier to me, as long as I'm not nesting lists three or four deep.  Then I have to think a little longer.

I will take this as a compliment.  Thanks John.   :-)

And you should (not that you would be correct. *lmao* j/k; it is/was).
Title: Re: Layer Creator Project
Post by: CAB on July 02, 2008, 07:41:52 PM
My wish was to keep the data file as easy to maintain as possible.
Using the example file "Framing Layer Data File" I posted, you can still use tab
as the separator.
Where do you see the errors creeping in with that format?

1.) I dislike tabs in general so i disable them in my editor; i use spaces instead.
2.) A user in Notepad just hits the space bar instead of tab.
3.) A user uses two tabs instead of one.
...

But that uses ; as the seperator, not the TAB.
Where do you see the errors creeping in with that format?
Title: Re: Layer Creator Project
Post by: Kerry on July 02, 2008, 07:48:45 PM

The resolution is easy ..
use XML instead

:lol:

Title: Re: Layer Creator Project
Post by: CAB on July 02, 2008, 08:02:45 PM
How does John Doe edit the XML data file? <I'm XML ignorant> :?
Title: Re: Layer Creator Project
Post by: Kerry on July 02, 2008, 10:11:39 PM
How does John Doe edit the XML data file? <I'm XML ignorant> :?

I was 'sort-of' trying to indicate that XML does not have delineator issues .. the field value is directly accessable


This is one editor .. the one I use .. but you can use any text editor
Design Notes
http://msdn.microsoft.com/en-us/library/aa905339.aspx

Download from the link on this page
http://www.codeplex.com/xmlnotepad

or from here
http://www.microsoft.com/downloads/details.aspx?familyid=72d6aa49-787d-4118-ba5f-4f30fe913628&displaylang=en
Title: Re: Layer Creator Project
Post by: CAB on July 02, 2008, 11:59:36 PM
Sorry Kerry, I was playing the devil's advocate. I don't think they are that user friendly.

I think the text file with a USER selected delineator character would work fine.
Obviously some characters would not be acceptable but the usual ; or , would work fine.

Seems there is a split for those who like the text file & those who prefer a DWG file.
Perhaps a pole would be in order.
Title: Re: Layer Creator Project
Post by: TimSpangler on July 03, 2008, 07:39:07 AM
OK. So the concensus is that there are those who use DWG's to store info and those who prefer to use text files to store info. So with that is there a way to design a layer creator that can take advantage of either condition?  Maybe a setting/ options section of the code.  having this would also allow a more flexible set up / organization.  The user could set his files were ever he wanted and the program would know were to go and get them.  They could also have more than one location for files.  Here you could also set default info in case the file is corrupt.

Maybe we can start a wish list of features and go from there.?

-FEATURES

-Text and/or ODBX capable
-Ability to overwrite existing layers in the dwg (for standardization)
-Support for Layer Groups


-WHISH LIST

-Fast
-User friendly
-Dialog and/ or cmd driven (so it can be used in scripts / batch programs - for standardization)


Go from here...
Title: Re: Layer Creator Project
Post by: JohnK on July 03, 2008, 08:44:17 AM
In my experience delimited formats are better for the masses then my chosen format but this will be used mainly by your CAD mgr in buttons and scripts for his/her end users so whatever delimiter you choose should be fine. Create and use an RC file which can set any feature you wish. Or Choose a comma and call the file *.csv...

I will help write anything you want but after everything is done and said for, im going to use what I already have. I am going to use mine for several reasons: I choose the native layer dictionary format because I need/retrieve it in that format already so ultimately I can modify, sort, group, create, etc faster, easier and with less code then you can with a delimited format. Just because of that format, In a race, I would win; before we even left the starting gate `Orders of growth' state that I will be faster then anything you could write. I take pride in the fact that it takes me longer to move my cursor up and hit the button then my code takes to create 10,000 layers and all their properties. ...Speed was my main goal; i wrote mine because the company's previous app took 3-5 seconds for 100 layers.

DBX is good, but `text' files are better.
Title: Re: Layer Creator Project
Post by: hendie on July 03, 2008, 08:48:18 AM
forgive me if this has already been mentioned (I had a quick read through of the thread but didn't see it mentioned)

The ONLY way to prevent users making mistakes in text/data files is to prevent users from writing/editing text/data files.
Why not write a plug-in/add-on/utility, call it whatever you will - that creates those data files for the user ? That way you can check and control each entry in the file.
All you need is a dialog with all the parameters you will be looking for to create each data line. Use drop downs, check boxes and as many tools as possible to prevent the user from typing anything other than the layer name. When they're done they hit "Add" and the new data line is checked and added, or a warning given to the user


we've had experience of users creating their own files, and where possible I try to take it out of their hands, or give them a simple click to add type of thing - much less headache that way.
Title: Re: Layer Creator Project
Post by: jbuzbee on July 03, 2008, 09:05:53 AM
Hendie - now THAT's a good idea . . .
Title: Re: Layer Creator Project
Post by: CAB on July 03, 2008, 09:07:55 AM
I agree Hendie that a user interface for data management is preferable. My only gripe is that the
interface routine is often more coding that the main application.

Quick look at the features needed in the interface.
Add a record
Del a record
Save to File
Add property to data list
Remove property from data list
Edit Default properties
Move Up/Down the Active Properties (rearrange the order)


If the user interface is used then the programmer chooses the format.
Comma delimited with ALL propertied having a field.
Part of the data file would be a header telling the routine which fields to load as active and which
would be inactive. The Order would be fixed by the programmer.

Out of time, I'll be back later. 8-)
Title: Re: Layer Creator Project
Post by: hendie on July 03, 2008, 09:36:11 AM
I realise that it is a lot of work. I found that to my cost when I wrote the AutoCAD Menu Generator a few years ago (and then they changed to CUI  :pissed: :pissed: :pissed:)

However, the up side is that it eliminates most problems and all user generated errors in one fell swoop.
The key is to make it easier for the user to use the GUI to create the files than it is for them to write the files by themselves.
Another benefit is that you can set default values on new records so that if the user ignores/forgets a field then it won't throw an error. You have complete control.

Once you look closer at it, the coding isn't that difficult.
For example, a record could only be added when all the fields are completed, then it's just a simple case of strcat..... and save to a list.
Save the file... write the list to a file
Delete a record... replace string with "DELETEME" and ignore that line when writing the file
Not sure exactly what you mean by add/remove property to data list
If you list all the properties, then the only thing the user will have to manually write is the layer name

Title: Re: Layer Creator Project
Post by: JohnK on July 03, 2008, 09:50:39 AM
Is this a contest to see how complicated we can make this application or something? I think a separate UI is unnecessary. I have a "save-layer-list-to-file" function built into my layer creator proced -i.e. my UI for making layers is AutoCAD!
Title: Re: Layer Creator Project
Post by: hendie on July 03, 2008, 10:23:05 AM
t'was but a suggestion, not a command
Title: Re: Layer Creator Project
Post by: JohnK on July 03, 2008, 10:30:02 AM
t'was but a suggestion, not a command
No, i know, i know and im sorry for being gruff. But i just seems like this project is getting way more complicated then it needs to be. A suggestion is made and people jump all over the shiny object like raccoons.
Title: Re: Layer Creator Project
Post by: Keith™ on July 03, 2008, 10:31:17 AM
t'was but a suggestion, not a command
No, i know, i know and im sorry for being gruff. But i just seems like this project is getting way more complicated then it needs to be. A suggestion is made and people jump all over the shiny object like raccoons.
Kinda like ODCL?
Title: Re: Layer Creator Project
Post by: jbuzbee on July 03, 2008, 12:05:35 PM
What's that supposed to mean??
Title: Re: Layer Creator Project
Post by: TimSpangler on July 03, 2008, 12:22:23 PM

The ONLY way to prevent users making mistakes in text/data files is to prevent users from writing/editing text/data files.
Why not write a plug-in/add-on/utility, call it whatever you will - that creates those data files for the user ? That way you can check and control each entry in the file.


I do this in my own LayerCreator.  I let the user create the layers as they normaly would (in autocad, a familiar environment) Then run the program export the layers, and bang. the text file is created based on the layers in the dwg.  No user hase to create the file manually so hopefully no err.

I certianly hope this thread doesn't go south (as it seems to be based on the last thread)  I would certianly like to gain something from this.  :-)
Title: Re: Layer Creator Project
Post by: CAB on July 03, 2008, 01:39:29 PM
Using ACAD to maintain the layers seems like a good idea.
That would mean you need routines to:
Import the layers from the data file
Export the layers to the data file
Clean file of layers (maybe or maybe not needed) It would just be easier to start with
an empty file or use an existing file. But this method is getting closer to the idea of using
a DWG file as the data storage & not having the text file at all.

I suppose it would be up to the end user as to how the data file is used & maintained.
Title: Re: Layer Creator Project
Post by: Krushert on July 03, 2008, 01:46:24 PM
A suggestion is made and people jump all over the shiny object like raccoons.
:-D :-D
I am no sitting here doing raccoon impersonations and sounds.  The new book keeper girl doesn't know what to make of it.
 ;-)
Title: Re: Layer Creator Project
Post by: Keith™ on July 03, 2008, 01:47:44 PM
I personally like the idea of having a GUI interface to build the list, and having said list stored in a text file. It is both smaller and easy to manipulate without having to load AutoCAD.

However, on the other side of the coin is that users who are not smart enough to manage to write their layer data out manually and effectively, have no business manipulating layer standards anyway. IMMHO ... so if you are smart enough to devise a layer standards protocol, you should be smart enough to write out a simple text file following a predefined format.
Title: Re: Layer Creator Project
Post by: GDF on July 03, 2008, 02:42:55 PM
I personally like the idea of having a GUI interface to build the list, and having said list stored in a text file. It is both smaller and easy to manipulate without having to load AutoCAD.

However, on the other side of the coin is that users who are not smart enough to manage to write their layer data out manually and effectively, have no business manipulating layer standards anyway. IMMHO ... so if you are smart enough to devise a layer standards protocol, you should be smart enough to write out a simple text file following a predefined format.

I totally agee...

Gary
Title: Re: Layer Creator Project
Post by: KewlToyZ on July 08, 2008, 04:50:49 PM
I just prefer to automate as much as possible.
People are creative and in some cases that is a great thing, but everyone is different.
Remove the decision so they are concentrating on the work instead of standards is the best approach IMHO.
Title: Re: Layer Creator Project
Post by: jbuzbee on July 09, 2008, 10:12:49 AM
Keith, an answer please - what the **** do you mean?

There are a lot of people who've worked very hard on probably the most important advancement to AutoLISP since Vlisp.  If you're ignorant of the program why not explore the possibilities first instead of slamming it.  If your just too afraid to learn, well please keep it to yourself.

check it out:
http://opendcl.com/wordpress/ (http://opendcl.com/wordpress/)
http://sourceforge.net/projects/opendcl/ (http://sourceforge.net/projects/opendcl/)
Title: Re: Layer Creator Project
Post by: GDF on July 09, 2008, 10:20:11 AM
James

I for one would love to learn opendcl. I have used dcl for years now. I'm just an old dog that finds it harder and harder to learn new tricks.

Gary
Title: Re: Layer Creator Project
Post by: CAB on July 09, 2008, 10:38:49 AM
Everyone should do there best to keep this discussion on a professional level.
It's a free country so it's OK to disagree but do so respectfully.
Title: Re: Layer Creator Project
Post by: jbuzbee on July 09, 2008, 01:05:55 PM
Sorry CAB - my bad.

It's just that a lot of people have been working VERY hard on this TOTALLY free open source program.  The hardest worker of all: Owen Wengerd.  He's completely re-written Chad's code over to UNICODE.  Added feature requests and produced a very stable release: 4.1.2.2.  Check out what he does for a living over at http://www.manusoft.com/Index.stm (http://www.manusoft.com/Index.stm)

If people really understood the possibilities of OpenDCL they would'nt be too quick to judge it.  That's why negative, off the cuff remarks really get to me.

This is a very simple example of the power of OpenDCL: It's a completely new Form based on a modeless form.  This is my template container anyone can download, use and ask me questions:

http://www.opendcl.com/forum/index.php?topic=357.0 (http://www.opendcl.com/forum/index.php?topic=357.0)

Some pics:

Rolled up:
(http://i283.photobucket.com/albums/kk302/bothetraveler/RolledUp.jpg?t=1208199789)

Rolled Down:
(http://i283.photobucket.com/albums/kk302/bothetraveler/RolledDown.jpg?t=1208199341)

Here's the blank container, fill it with whatever controls you need.

http://www.opendcl.com/forum/index.php?topic=357.0 (http://www.opendcl.com/forum/index.php?topic=357.0)

Sorry, didn't mean to make a major hijacking . . . please carry on.  :oops:
Title: Re: Layer Creator Project
Post by: CAB on July 09, 2008, 01:18:08 PM
Thanks James.

I opened this thread primarily for the purpose of discussion and I'm happy with the results so far.
The OpenDCL seem to be a very powerful tool & if I wasn't so entrenched in A2K i would be using it too.

Like all powerful tools you must invest some time in learning how to use them. If you & Gary decide to
do a thread let me know & I'll follow along.
Title: Re: Layer Creator Project
Post by: JohnK on July 09, 2008, 04:13:18 PM
Most people need to learn the Auto/VisualLisp language.
Title: Re: Layer Creator Project
Post by: ShaunFarrell on September 08, 2009, 06:45:53 AM
Looking at Tim's Layer Creator Project I am having real issues trying to get it to run from a network location.

On a separate note the store in Drawing VS Store in database have strengths and weaknesses, being able to a global search and replace in a database wins hands down but the ease of use for a user to create layers with all the right settings in AutoCAD along with descriptions is easier than potentially getting a syntax wrong.
Title: Re: Layer Creator Project
Post by: CAB on September 08, 2009, 09:21:09 AM
Welcome to the Swamp. 8-)

Tim may be a few days before he replies so be patient.
Title: Re: Layer Creator Project
Post by: TimSpangler on September 08, 2009, 11:37:41 AM
Hey Shaun,

Sent you a reply to your email that you sent me.