Jump to content

Recommended Posts

Posted

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

Posted

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

Posted

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

Posted

Also, *IF* you have multiple commands that require objects created to be on specific layers, then consider using a command reactor.

Posted

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)
 )

Posted

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.

Posted
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 .

Posted

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]

Posted
Thanks,

But it doesn't work .

....

:oops:

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

Posted
Hi Michaels,

 

Take a look at this perhaps - please read the comments :)

...

Lee

As usual

awesome

Posted
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

Posted
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. :)

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...