Michaels Posted November 12, 2010 Posted November 12, 2010 hello . I made this lisp but the offset object is not laying under the current Layer Name !!!! ! ! Could anyone help me with it please ? (defun c:InsOff (/ OldLay n) (setq OldLay (getvar 'clayer)) (if (not (tblsearch "LAYER" "Insulation")) (command "._-layer" "_make" "Insulation" "_ltype" "HIDDEN" "" "_color" "2" "" "") (command "_.-layer" "set" "Insulation" "" "")) (if (setq n (getdist "Offset Distance :")) (command "_.offset" n pause) (princ) ) (setvar 'clayer OldLay) (princ) ) Thanks in advance Quote
JohnM Posted November 12, 2010 Posted November 12, 2010 when you offset it keeps the layer of the original object. change the layer after offset code changes: get rid of layer set line you dont need it before the offset get the last entity made so you can compair it to the new entity after the offset to make sure the offset was complete use ent last to get new ent change its layer Quote
jammie Posted November 12, 2010 Posted November 12, 2010 Hi, one of the settings for offset is the ability to offset through layer. See the command prompts for details Or ideally if you store the last entity (entlast) pre function and post function modify each objects layer to the required (entmod) Jammie Quote
BlackBox Posted November 12, 2010 Posted November 12, 2010 Also, *IF* you have multiple commands that require objects created to be on specific layers, then consider using a command reactor. Quote
pBe Posted November 13, 2010 Posted November 13, 2010 Also, *IF* you have multiple commands that require objects created to be on specific layers, then consider using a command reactor. I agree.. Follow this link http://www.afralisp.net/visual-lisp/tutorials/reactors-part-2.php Quote
asos2000 Posted November 13, 2010 Posted November 13, 2010 If Should be like this (if ( ) (progn (command "XXX") (command "XXX") ) ;end progn if yes (progn (command "XXX") (command "XXX") ) ;end progn if no ) ; end if Give this a try (defun c:InsOff (/ OldLay n) (setq OldLay (getvar 'clayer)) (if (not (tblsearch "LAYER" "Insulation")) (progn (command "._-layer" "_make" "Insulation" "_ltype" "HIDDEN" "" "_color" "2" "" "") )) (setvar 'clayer "Insulation") (if (setq n (getdist "Offset Distance :")) (command "_.offset" n pause)) (setvar 'clayer OldLay) (princ) ) Quote
Michaels Posted November 13, 2010 Author Posted November 13, 2010 Thank you all . But I have no idea about Command Reactor , So could you please show me an example of that reactor ? Still things not settled . Appreciated. Quote
Michaels Posted November 13, 2010 Author Posted November 13, 2010 If Should be like this (if ( ) (progn (command "XXX") (command "XXX") ) ;end progn if yes (progn (command "XXX") (command "XXX") ) ;end progn if no ) ; end if Give this a try (defun c:InsOff (/ OldLay n) (setq OldLay (getvar 'clayer)) (if (not (tblsearch "LAYER" "Insulation")) (progn (command "._-layer" "_make" "Insulation" "_ltype" "HIDDEN" "" "_color" "2" "" "") )) (setvar 'clayer "Insulation") (if (setq n (getdist "Offset Distance :")) (command "_.offset" n pause)) (setvar 'clayer OldLay) (princ) ) Thanks, But it doesn't work . By the way , what are the changes that you made to the routine ? Your way of using the functon *if* is wrong , because there is no need for *progn* function if you do not have more than one action . am I right ? Check that out once again . Quote
Lee Mac Posted November 13, 2010 Posted November 13, 2010 Hi Michaels, Take a look at this perhaps - please read the comments [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] [color=black]c:InsOff[/color] [b][color=RED]([/color][/b] [b][color=BLUE]/[/color][/b] [color=black]*error*[/color] Layer oldlay dx70 def d [b][color=RED])[/color][/b] [i][color=#990099];; Define function and localise variables, for more info[/color][/i] [i][color=#990099];; on localising variables see [url="www.lee-mac.com/localising.html"]www.lee-mac.com/localising.html[/url][/color][/i] [i][color=#990099];; Notice that the Error Handler has been localised so that[/color][/i] [i][color=#990099];; it will revert to the default AutoCAD Error Handler after[/color][/i] [i][color=#990099];; the function has completed.[/color][/i] [i][color=#990099];; Yeah, its a simple bit of code, but oh well:[/color][/i] [i][color=#990099];; © Lee Mac 2010[/color][/i] [i][color=#990099];; Error Handler[/color][/i] [i][color=#990099];; Will reset Current Layer if user hits Esc[/color][/i] [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] [color=black]*error*[/color] [b][color=RED]([/color][/b] msg [b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] oldlay [b][color=RED]([/color][/b][b][color=BLUE]setvar[/color][/b] [b][color=DARKRED]'[/color][/b]CLAYER oldlay[b][color=RED]))[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]or[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]wcmatch[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]strcase[/color][/b] msg[b][color=RED])[/color][/b] [b][color=#a52a2a]"*BREAK,*CANCEL*,*EXIT*"[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]strcat[/color][/b] [b][color=#a52a2a]"\n** Error: "[/color][/b] msg [b][color=#a52a2a]" **"[/color][/b][b][color=RED])))[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b][b][color=RED])[/color][/b] [b][color=RED])[/color][/b] [i][color=#990099];; Layer Subfunction[/color][/i] [i][color=#990099];; Supply with Layer name, colour and Linetype[/color][/i] [i][color=#990099];; If linetype is not loaded, continuous will be used.[/color][/i] [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] Layer [b][color=RED]([/color][/b] Nme Col Ltyp [b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]entmake[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=#009900]0[/color][/b] [b][color=#a52a2a]"LAYER"[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=#009900]100[/color][/b] [b][color=#a52a2a]"AcDbSymbolTableRecord"[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=#009900]100[/color][/b] [b][color=#a52a2a]"AcDbLayerTableRecord"[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=#009900]2[/color][/b] Nme[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=#009900]70[/color][/b] [b][color=#009900]0[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=#009900]62[/color][/b] Col[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=#009900]6[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]tblsearch[/color][/b] [b][color=#a52a2a]"LTYPE"[/color][/b] Ltyp[b][color=RED])[/color][/b] Ltyp [b][color=#a52a2a]"CONTINUOUS"[/color][/b] [b][color=RED])[/color][/b] [b][color=RED])[/color][/b] [b][color=RED])[/color][/b] [b][color=RED])[/color][/b] [b][color=RED])[/color][/b] [i][color=#990099];; Store Current Layer so that it may be reset[/color][/i] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] oldlay [b][color=RED]([/color][/b][b][color=BLUE]getvar[/color][/b] [b][color=DARKRED]'[/color][/b]CLAYER[b][color=RED]))[/color][/b] [i][color=#990099];; Create 'Insulation' Layer if not present in drawing[/color][/i] [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]not[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]tblsearch[/color][/b] [b][color=#a52a2a]"LAYER"[/color][/b] [b][color=#a52a2a]"Insulation"[/color][/b][b][color=RED]))[/color][/b] [b][color=RED]([/color][/b]Layer [b][color=#a52a2a]"Insulation"[/color][/b] [b][color=#009900]2[/color][/b] [b][color=#a52a2a]"HIDDEN"[/color][/b][b][color=RED])[/color][/b] [b][color=RED])[/color][/b] [i][color=#990099];; Check to see whether 'Insulation' Layer is frozen,[/color][/i] [i][color=#990099];; if frozen, CLAYER value will be rejected.[/color][/i] [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]=[/color][/b] [b][color=#009900]1[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]logand[/color][/b] [b][color=#009900]1[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] dx70 [b][color=RED]([/color][/b][b][color=BLUE]cdr[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]assoc[/color][/b] [b][color=#009900]70[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] def [b][color=RED]([/color][/b][b][color=BLUE]entget[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]tblobjname[/color][/b] [b][color=#a52a2a]"LAYER"[/color][/b] [b][color=#a52a2a]"Insulation"[/color][/b][b][color=RED])[/color][/b] [b][color=RED])[/color][/b] [b][color=RED])[/color][/b] [b][color=RED])[/color][/b] [b][color=RED])[/color][/b] [b][color=RED])[/color][/b] [b][color=RED])[/color][/b] [b][color=RED])[/color][/b] [i][color=#990099];; Thaw 'Insulation' layer, whilst keeping other states unaffected.[/color][/i] [i][color=#990099];; Here we are effectively flipping bit 1.[/color][/i] [b][color=RED]([/color][/b][b][color=BLUE]entmod[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]subst[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=#009900]70[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]boole[/color][/b] [b][color=#009900]4[/color][/b] [b][color=#009900]1[/color][/b] dx70[b][color=RED]))[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]assoc[/color][/b] [b][color=#009900]70[/color][/b] def[b][color=RED])[/color][/b] def[b][color=RED]))[/color][/b] [b][color=RED])[/color][/b] [i][color=#990099];; Set CLAYER to 'Insulation'[/color][/i] [b][color=RED]([/color][/b][b][color=BLUE]setvar[/color][/b] [b][color=DARKRED]'[/color][/b]CLAYER [b][color=#a52a2a]"Insulation"[/color][/b][b][color=RED])[/color][/b] [i][color=#990099];; Prompt for Offset Distance, no error checking needed here as[/color][/i] [i][color=#990099];; we have allowed the user to hit enter for a default, so the only[/color][/i] [i][color=#990099];; way the routine can fail is if the user hits Esc - at which point our[/color][/i] [i][color=#990099];; Error Handler will kick in.[/color][/i] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] d [b][color=RED]([/color][/b][b][color=BLUE]getdist[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]strcat[/color][/b] [b][color=#a52a2a]"\nSpecify Offset Distance <"[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]minusp[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]getvar[/color][/b] [b][color=DARKRED]'[/color][/b]OFFSETDIST[b][color=RED]))[/color][/b] [b][color=#a52a2a]"Through"[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]rtos[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]getvar[/color][/b] [b][color=DARKRED]'[/color][/b]OFFSETDIST[b][color=RED])))[/color][/b] [b][color=#a52a2a]"> : "[/color][/b] [b][color=RED])[/color][/b] [b][color=RED])[/color][/b] [b][color=RED])[/color][/b] [i][color=#990099];; Start Offset command, change 'Layer' Option to 'Current'[/color][/i] [b][color=RED]([/color][/b][b][color=BLUE]command[/color][/b] [b][color=#a52a2a]"_.offset"[/color][/b] [b][color=#a52a2a]"_L"[/color][/b] [b][color=#a52a2a]"_C"[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cond[/color][/b] [b][color=RED]([/color][/b] d [b][color=RED])[/color][/b] [b][color=RED]([/color][/b] [b][color=#a52a2a]""[/color][/b] [b][color=RED])))[/color][/b] [i][color=#990099];; While the Command is active, pause for user input[/color][/i] [i][color=#990099];; We use the 'logand' command as CMDACTIVE is a bit-coded value.[/color][/i] [b][color=RED]([/color][/b][b][color=BLUE]while[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]=[/color][/b] [b][color=#009900]1[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]logand[/color][/b] [b][color=#009900]1[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]getvar[/color][/b] [b][color=DARKRED]'[/color][/b]CMDACTIVE[b][color=RED])))[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]command[/color][/b] [b][color=BLUE]pause[/color][/b][b][color=RED])[/color][/b] [b][color=RED])[/color][/b] [i][color=#990099];; Reset value of 'CLAYER[/color][/i] [b][color=RED]([/color][/b][b][color=BLUE]setvar[/color][/b] [b][color=DARKRED]'[/color][/b]CLAYER oldlay[b][color=RED])[/color][/b] [i][color=#990099];; Exit Cleanly[/color][/i] [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b][b][color=RED])[/color][/b] [b][color=RED])[/color][/b] Quote
asos2000 Posted November 13, 2010 Posted November 13, 2010 Thanks,But it doesn't work . .... Replace (command "_.offset" n pause) With (command "_.offset" "L" "C" n pause) Thanks,... because there is no need for *progn* ... . - I used to use PROGN - To show how to use PROGN Thanks Quote
asos2000 Posted November 13, 2010 Posted November 13, 2010 Hi Michaels, Take a look at this perhaps - please read the comments ... Lee As usual awesome Quote
Michaels Posted November 13, 2010 Author Posted November 13, 2010 Hi Michaels, Take a look at this perhaps - please read the comments You are more than great Lee. I can't find the right word to thank you man. Amazing and wonderful. Appreciated a lot. Michaels Quote
Lee Mac Posted November 13, 2010 Posted November 13, 2010 You are more than great Lee. I can't find the right word to thank you man. Amazing and wonderful. Appreciated a lot. Thanks for your kind words Michaels, I'm glad I could help - if you have any questions about the methods I have used, just ask. Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.