Welcome to the Southern African Autolisp Website.
You are Visitor Number
|
| Page I. | Page II. | Home. |
There are nine (9) Tables that you can access :
Layer Table "LAYER" Linetype Table "LTYPE" Named View Table "VIEW" Text Style Table "STYLE" Block Table "BLOCK" Named UCS Table "UCS" Named Application ID Table "APPID" Named Dimension Style Table "DIMSTYLE" Vport Configuration Table "VPORT"
A Table is split into 2 parts: The 'names' of the entries in the Table and the
'details' of each entry. For example, in the Layers Table, the name of the entries
would be the names of the layers that exist. The details of an individual layer
would be colour, linetype, on, off, frozen, thawed, locked, unlocked or current.
To access a Table we would use the (tblsearch) function. Let's have a look at
an example :
Assume that you want to know whether a layer called STEEL exists in your drawing.
First create the layer STEEL then type the following :
(setq t (tblsearch "LAYER" "STEEL"))
The entity list of the layer STEEL should be returned :
((0 . "LAYER") (2 . "STEEL") (70 . 64) (62 . 7) (6 . "CONTINOUS"))
The first part of the entity list is '0', indicating Associative 0.
In this case it's an entry in the "LAYER" Table.
Associative 2 indicates the name of the layer. STEEL in our case.
Associative 70 is the state of the entity. 1 is Frozen, 2 is Frozen
on new paper space view ports and 4 is locked. These numbers are added
to 64. In this case the layer is neither frozen nor locked.
Associative 62 is the colour of the layer. Ours is white which is colour
number 7. If the colour number is a negative number then the layer is off.
Associative 6 is the linetype of the layer, in this case, "CONTINUOUS".
If the (tblsearch) had not found the layer then it would have returned 'nil'
and you would know that the layer did not exist.
Let's assume that 4 layers exist in your drawing. The layer names are
MECH, STEEL, PIPE and TXT. Enter the following :
(tblnext "Layer")
AutoLISP should return something like this :
((0 . "LAYER") (2 . "PIPE") (70 . 0) (62 . 7) (6 . "CONTINUOUS"))
Repeat the same command four additional times. You will get a new entity
list for each of the layers.
The last time you type the command AutoLISP will return 'nil' because there
are no more additional layers.
Let's have a look at this in action. We are going to design a dialogue box
that displays a drop down list of all the available layers in a specific
drawing. The user can then choose any layer which can then be used within
his routine.
The Dialogue Coding looks like this :
getlay : dialog { //dialog name
label = "Get Layer" ; //give it a label
: popup_list { //define list box
key = "sel1"; //give it a name
value = "0"; //initial value
} //end list
ok_cancel ; //predifined OK/Cancel
} //end dialog
(defun c:getlay ( / NAMES SIZ1)
;define funcion
(setvar "cmdecho" 0)
;switch off command echo
(setq siz1 "0")
;initiliase variable
(setq userclick T)
;set flag
(setq f 1)
;rewind pointer
(while
;start while loop
(setq t1 (tblnext "Layer" f))
;get the next layer
(setq f nil)
;reset pointer
(setq b (cdr (assoc 2 t1)))
;get the layer name
(if (/= b "DEFPOINTS")
;if name is not equal to DEFPOINTS
(setq NAMES (append NAMES (list b)))
;Add the layer name to the list
);if
);while
(setq dcl_id (load_dialog "getlay.dcl"))
;load dialogue
(if (not (new_dialog "getlay" dcl_id)
;check for errors
);not
(exit)
;if problem exit
);if
(set_tile "sel1" "0")
;initilise list box
(start_list "sel1")
;start the list
(mapcar 'add_list NAMES)
;add the layer names
(end_list)
;end the list
(action_tile
"cancel"
"(done_dialog) (setq userclick nil)"
);action_tile
;if cancel set flag to nil
(action_tile
"accept"
(strcat
"(progn
(setq SIZ1 (get_tile \"sel1\"))"
" (done_dialog)(setq userclick T))"
);strcat
);action tile
;if OK get the layer selected
(start_dialog)
(unload_dialog dcl_id)
(if userclick
;if flag true
(progn
(setq SIZ1 (nth (atoi SIZ1) NAMES))
;get the name of the layer from the list
(alert (strcat "\nYou Selected Layer " SIZ1))
;display the name
);end progn
);end if
(princ)
);defun C:getlay
(princ)
| Page I. | Page II. | Home. |