Jump to content

Recommended Posts

Posted

so in a perfect world, when running this command i would select a line, select an angle and the block would insert with the line the i inserted it on broken around it, alas this is not a perfect world. I continue to get an error saying 1.00000 is not a command (that number changes sometimes) any ideas as to why? or a better way to write it?

(defun c:BDV ()
(setq scl (getvar "dimscale" ))
(setq dis (* scl 0.0703))
(setq player (getvar "clayer"))
(setq lne (entsel "n\Select line" ))(terpri)
(setq name (cdr (assoc 8 (entget (car lne)))))
(setvar "clayer" name)
(setq pnt (getpoint "\nPick insertion point:" ))(terpri)
(setq a (getangle "\nAngle?:" pnt ))(terpri) 
(setq ang ( * a 57.3))
(setq pt1 (polar pnt a dis))
(setq pt2 (polar pnt (- a pi) dis))
(command "insert" "BDV" pnt scl scl ang) 
(command "break" lne "f" pt1 pt2 )
(setvar "clayer" player)
) 

untitled.jpg

Posted

Chelsea, take note of the comments I have made. I haven't tested this code, so there is a good chance of typo's/mistakes.

 

If you have any questions on the code, let me know :)

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] c:BDV [b][color=RED]([/color][/b][b][color=BLUE]/[/color][/b] *error* scl dis ov vl
               lne pnt ang pt1 pt2[b][color=RED])[/color][/b]

 [i][color=#990099];; Always localise your variables![/color][/i]
 
 [b][color=RED]([/color][/b][b][color=BLUE]or[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]not[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]zerop[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] scl [b][color=RED]([/color][/b][b][color=BLUE]getvar[/color][/b] [b][color=#ff00ff]"DIMSCALE"[/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=BLUE]setq[/color][/b] scl [b][color=#009999]1.[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]

 [i][color=#990099];; Dimscale may be zero - need to check for this[/color][/i]
 
 [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] dis [b][color=RED]([/color][/b][b][color=BLUE]*[/color][/b] scl [b][color=#009999]0.0703[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]

 [i][color=#990099];; Use an Error Handler as we are tampering with Sys Vars[/color][/i]
 
 [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] *error* [b][color=RED]([/color][/b]msg[b][color=RED])[/color][/b]
   [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] ov [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]setvar[/color][/b] vl ov[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [i][color=#990099]; Reset Sys Vars    [/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]wcmatch[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]strcase[/color][/b] msg[b][color=RED])[/color][/b] [b][color=#ff00ff]"*BREAK,*CANCEL*,*EXIT*"[/color][/b][b][color=RED])[/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=#ff00ff]"\n<< Error: "[/color][/b] msg [b][color=#ff00ff]" >>"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/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]

 [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] vl [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b][b][color=#ff00ff]"CMDECHO"[/color][/b] [b][color=#ff00ff]"OSMODE"[/color][/b] [b][color=#ff00ff]"CLAYER"[/color][/b][b][color=RED])[/color][/b] [i][color=#990099]; Sys Var list[/color][/i]
       ov [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]getvar[/color][/b] vl[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [i][color=#990099]; Get Old Sys Var Values[/color][/i]
 
 [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]or[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]tblsearch[/color][/b] [b][color=#ff00ff]"BLOCK"[/color][/b] [b][color=#ff00ff]"BDV"[/color][/b][b][color=RED])[/color][/b] [i][color=#990099]; Check for Block in Dwg...[/color][/i]
         [b][color=RED]([/color][/b][b][color=BLUE]findfile[/color][/b] [b][color=#ff00ff]"BDV.dwg"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]   [i][color=#990099];... And in Search path[/color][/i]
   [b][color=RED]([/color][/b][b][color=BLUE]progn[/color][/b]
     
     [b][color=RED]([/color][/b][b][color=BLUE]while[/color][/b] [i][color=#990099]; While the following returns T[/color][/i]
       
       [b][color=RED]([/color][/b][b][color=BLUE]progn[/color][/b] [i][color=#990099]; Wrap the following expressions[/color][/i]
         
         [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] lne [b][color=RED]([/color][/b][b][color=BLUE]entsel[/color][/b] [b][color=#ff00ff]"\nSelect a Line: "[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [i][color=#990099]; Select a Line[/color][/i]
         
         [b][color=RED]([/color][/b][b][color=BLUE]cond[/color][/b] [b][color=RED]([/color][/b][b][color=RED]([/color][/b][b][color=BLUE]null[/color][/b] lne[b][color=RED])[/color][/b] [b][color=BLUE]t[/color][/b][b][color=RED])[/color][/b] [i][color=#990099]; Stay in Loop[/color][/i]
               [b][color=RED]([/color][/b][b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=#ff00ff]"LINE"[/color][/b]
                  [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]0[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] elst [b][color=RED]([/color][/b][b][color=BLUE]entget[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]car[/color][/b] lne[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=BLUE]nil[/color][/b][b][color=RED])[/color][/b] [i][color=#990099]; Exit Loop[/color][/i]
               [b][color=RED]([/color][/b][b][color=BLUE]t[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b] [b][color=#ff00ff]"\n** Incorrect Selection **"[/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]; Stay in Loop[/color][/i]
     
     [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] pt [b][color=RED]([/color][/b][b][color=BLUE]getpoint[/color][/b] [b][color=#ff00ff]"\nPick Insertion Point: "[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [i][color=#990099]; Prompt for Point[/color][/i]
       [b][color=RED]([/color][/b][b][color=BLUE]progn[/color][/b]
         [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] ang [b][color=RED]([/color][/b][b][color=BLUE]angle[/color][/b] [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]10[/color][/b] elst[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [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]11[/color][/b] elst[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [i][color=#990099]; Get Line Angle[/color][/i]
         
         [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]setvar[/color][/b] vl [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b] [b][color=#009900]0[/color][/b] [b][color=#009900]0[/color][/b] [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]8[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]entget[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]car[/color][/b] lne[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]; Set Sys Vars to how we want them - CMDECHO=0, OSMODE=0, CLAYER= <line layer>[/color][/i]
         
         [b][color=RED]([/color][/b][b][color=BLUE]command[/color][/b] [b][color=#ff00ff]"-insert"[/color][/b] [b][color=#ff00ff]"BDV"[/color][/b] pnt scl scl [b][color=RED]([/color][/b][b][color=BLUE]*[/color][/b] [b][color=#009999]180.[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]/[/color][/b] ang [b][color=BLUE]pi[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [i][color=#990099]; insert Block[/color][/i]

         [i][color=#990099];; Prefix commands with "_." to make them language compatible[/color][/i]
         
         [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] pt1 [b][color=RED]([/color][/b][b][color=BLUE]polar[/color][/b] pnt ang dis[b][color=RED])[/color][/b]
               pt2 [b][color=RED]([/color][/b][b][color=BLUE]polar[/color][/b] pnt [b][color=RED]([/color][/b][b][color=BLUE]-[/color][/b] ang [b][color=BLUE]pi[/color][/b][b][color=RED])[/color][/b] dis[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
         
         [b][color=RED]([/color][/b][b][color=BLUE]command[/color][/b] [b][color=#ff00ff]"_.break"[/color][/b] lne [b][color=#ff00ff]"_F"[/color][/b] pt1 pt2[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=BLUE]princ[/color][/b] [b][color=#ff00ff]"\n<< Block Not Found >>"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [i][color=#990099]; Else the Block was not found[/color][/i]
 
 [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]setvar[/color][/b] vl ov[b][color=RED])[/color][/b] [i][color=#990099]; Reset Sys Vars[/color][/i]
 
 [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [i][color=#990099]; Exit Cleanly[/color][/i]

Posted

this is what the command line shows, after the 48.00000 it exits out of the command but no block has been inserted. and bdv is in a folder in the search path

Command: bdv

Select a Line:

Pick Insertion Point:

>Enter block name or [?]: BDV

Units: Unitless Conversion: 0'-1"

Specify insertion point or [basepoint/Scale/X/Y/Z/Rotate]:

Command: 48.000000

Posted

I thought there may have been mistakes - I wrote it quick, and didn't test it at all :oops:

 

I have updated the above code, please try it again.

Posted

i get the below error when i load the lisp and it says bdv is not a command

Command: (LOAD "C:/GOOD LSP/CDVALVES.LSP") ; error: bad argument type: numberp:

#

 

edit: recopied the code from above and it now recognizes the command but stops as it did before

Posted

My apologies - I really shouldn't write this stuff so quick. Simple typo.

 

(defun c:BDV (/ *error* scl dis ov vl
               lne pnt ang pt1 pt2)

 ;; Always localise your variables!
 
 (or (not (zerop (setq scl (getvar "DIMSCALE"))))
     (setq scl 1.))

 ;; Dimscale may be zero - need to check for this
 
 (setq dis (* scl 0.0703))

 ;; Use an Error Handler as we are tampering with Sys Vars
 
 (defun *error* (msg)
   (if ov (mapcar 'setvar vl ov)) ; Reset Sys Vars    
   (if (not (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*"))
     (princ (strcat "\n<< Error: " msg " >>")))
   (princ))

 (setq vl '("CMDECHO" "OSMODE" "CLAYER") ; Sys Var list
       ov (mapcar 'getvar vl)) ; Get Old Sys Var Values
 
 (if (or (tblsearch "BLOCK" "BDV") ; Check for Block in Dwg...
         (findfile "BDV.dwg"))   ;... And in Search path
   (progn
     
     (while ; While the following returns T
       
       (progn ; Wrap the following expressions
         
         (setq lne (entsel "\nSelect a Line: ")) ; Select a Line
         
         (cond ((null lne) t) ; Stay in Loop
               ((eq "LINE"
                  (cdr (assoc 0 (setq elst (entget (car lne)))))) nil) ; Exit Loop
               (t (princ "\n** Incorrect Selection **"))))) ; Stay in Loop
     
     (if (setq pt (getpoint "\nPick Insertion Point: ")) ; Prompt for Point
       (progn
         (setq ang (angle (cdr (assoc 10 elst)) (cdr (assoc 11 elst)))) ; Get Line Angle
         
         (mapcar 'setvar vl (list 0 0 (cdr (assoc 8 (entget (car lne))))))

         ; Set Sys Vars to how we want them - CMDECHO=0, OSMODE=0, CLAYER= <line layer>
         
         (command "_.-insert" "BDV" pt scl scl (* 180. (/ ang pi))) ; insert Block

         ;; Prefix commands with "_." to make them language compatible
         
         (setq pt1 (polar pt ang dis)
               pt2 (polar pt (- ang pi) dis))
         
         (command "_.break" lne "_F" pt1 pt2))))
   
   (princ "\n<< Block Not Found >>")) ; Else the Block was not found
 
 (mapcar 'setvar vl ov) ; Reset Sys Vars
 
 (princ)) ; Exit Cleanly

Posted

works wonderful thanks lee

Posted
works wonderful thanks lee

 

No Probs, just ask if you don't understand some of the comments :)

Posted

I tried editing this so it wouldnt break for the block as its not needed. but its not working, i took out the line that said

(command "_.break" lne "_F" pt1 pt2))))

(defun c:pa (/ *error* scl dis ov vl
               lne pnt ang pt1 pt2)
 ;; Always localise your variables!
 
 (or (not (zerop (setq scl (getvar "DIMSCALE"))))
     (setq scl 1.))
 ;; Dimscale may be zero - need to check for this
 
 (setq dis (* scl 0.0703))
 ;; Use an Error Handler as we are tampering with Sys Vars
 
 (defun *error* (msg)
   (if ov (mapcar 'setvar vl ov)) ; Reset Sys Vars    
   (if (not (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*"))
     (princ (strcat "\n<< Error: " msg " >>")))
   (princ))
 (setq vl '("CMDECHO" "OSMODE" "CLAYER") ; Sys Var list
       ov (mapcar 'getvar vl)) ; Get Old Sys Var Values
 
 (if (or (tblsearch "BLOCK" "pa") ; Check for Block in Dwg...
         (findfile "pa.dwg"))   ;... And in Search path
   (progn
     
     (while ; While the following returns T
       
       (progn ; Wrap the following expressions
         
         (setq lne (entsel "\nSelect a Line: ")) ; Select a Line
         
         (cond ((null lne) t) ; Stay in Loop
               ((eq "LINE"
                  (cdr (assoc 0 (setq elst (entget (car lne)))))) nil) ; Exit Loop
               (t (princ "\n** Incorrect Selection **"))))) ; Stay in Loop
     
     (if (setq pt (getpoint "\nPick Insertion Point: ")) ; Prompt for Point
       (progn
         (setq ang (angle (cdr (assoc 10 elst)) (cdr (assoc 11 elst)))) ; Get Line Angle
         
         (mapcar 'setvar vl (list 0 0 (cdr (assoc 8 (entget (car lne))))))
         ; Set Sys Vars to how we want them - CMDECHO=0, OSMODE=0, CLAYER= <line layer>
         
         (command "-insert" "pa" pt scl scl (* 180. (/ ang pi))) ; insert Block
         ;; Prefix commands with "_." to make them language compatible
         
         (setq pt1 (polar pt ang dis)
               pt2 (polar pt (- ang pi) dis)    
   (princ "\n<< Block Not Found >>")) ; Else the Block was not found
 
 (mapcar 'setvar vl ov) ; Reset Sys Vars
 
 (princ)) ; Exit Cleanly

Posted

Check your brackets when you take out a line, the progn statement needs to wrap everything you want to be evaluated if the IF statement returns T.

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