Lisp doesn't work.

Lisp doesn't work.

manasi4532
Enthusiast Enthusiast
551 Views
8 Replies
Message 1 of 9

Lisp doesn't work.

manasi4532
Enthusiast
Enthusiast

I found a lisp that meets my needs. But when I run it Nothing happened I don't know what happened.

 

 

[font=Courier New](defun c:cl(/ eLine ll ur pl pr pt pb ex ss)
(defun eLine(p1 p2)(entmakex (list (cons 0 "LINE")(cons 62 3)(cons 10 p1)(cons 11 p2)(cons 6 "CENTER"))))
(while (setq ss (ssget))
(vlax-for e (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object)))
(vla-getboundingbox e 'll 'ur)
(setq ll (vlax-safearray->list ll)
ur (vlax-safearray->list ur)
ex (/ (abs (-(car ll)(car ur))) 6) ;Extend outside Rectangle
pl (list (- (car ll) ex) (/ (+ (cadr ll)(cadr ur)) 2))
pr (list (+ (car ur) ex) (cadr pl))
pt (list (/ (+ (car ll)(car ur)) 2) (+ (cadr ur) ex))
pb (list (car pt) (- (cadr ll) ex))
)
(eLine pl pr)
(eLine pt pb)
)
)
)[/font]

 

 

Thank you for credit from  [Lisp]Vẽ Center Line

0 Likes
Accepted solutions (1)
552 Views
8 Replies
Replies (8)
Message 2 of 9

ВeekeeCZ
Consultant
Consultant

Try like this?

 

(vl-load-com)

(defun c:cl (/ eLine ll ur pl pr pt pb ex ss)
  (defun eLine(p1 p2)(entmakex (list (cons 0 "LINE")(cons 62 3)(cons 10 p1)(cons 11 p2)(cons 6 "CENTER"))))
  (while (setq ss (ssget))
    (vlax-for e (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object)))
      (vla-getboundingbox e 'll 'ur)
      (setq ll (vlax-safearray->list ll)
	    ur (vlax-safearray->list ur)
	    ex (/ (abs (-(car ll)(car ur))) 6) ;Extend outside Rectangle
	    pl (list (- (car ll) ex) (/ (+ (cadr ll)(cadr ur)) 2))
	    pr (list (+ (car ur) ex) (cadr pl))
	    pt (list (/ (+ (car ll)(car ur)) 2) (+ (cadr ur) ex))
	    pb (list (car pt) (- (cadr ll) ex))
	    )
      (eLine pl pr)
      (eLine pt pb)
      )
    )
  (princ)
  )

 

0 Likes
Message 3 of 9

Moshe-A
Mentor
Mentor
Accepted solution

@manasi4532  hi,

 

fixed 😀

 

Moshe

 

 

(defun c:cl (/ eLine ll ur pl pr pt pb ex ss)
 (defun eLine (p1 p2)
  (entmake (list '(0 . "LINE") '(100 . "AcDbLine") (cons '10 p1) (cons '11 p2) '(62 . 3) '(6 . "CENTER")))
 )


 ; make sure linetype "center" is loaded
 (if (null (tblsearch "ltype" "center"))
   (command ".linetype" "_Load" "center" "" "")
 )
  
 (while (setq ss (ssget))
  (vlax-for e (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object)))
   (vla-getboundingbox e 'll 'ur)
   (setq ll (vlax-safearray->list ll)
        ur (vlax-safearray->list ur)
        ex (/ (abs (- (car ll) (car ur))) 6) ;Extend outside Rectangle
        pl (list (- (car ll) ex) (/ (+ (cadr ll) (cadr ur)) 2))
        pr (list (+ (car ur) ex) (cadr pl))
        pt (list (/ (+ (car ll) (car ur)) 2) (+ (cadr ur) ex))
        pb (list (car pt) (- (cadr ll) ex))
   )
   (eLine pl pr)
   (eLine pt pb)
  )
 ); while

 (princ)
); c:cl

 

 

Message 4 of 9

Kent1Cooper
Consultant
Consultant

If the [parts in square brackets] at the beginning and end are in your .lsp file, remove them.

Kent Cooper, AIA
Message 5 of 9

ec-cad
Collaborator
Collaborator

Don't know what you mean by 'run' it, but if you just Loaded it, it will not run by itself.

The Lisp has a Function "C:CL" that makes it a Command Function.

Do an Appload or just drag and drop it into ACAD - then at Command Prompt line

just type in  CL<enter>

That should 'run' the Lisp program.

 

ECCAD

Message 6 of 9

manasi4532
Enthusiast
Enthusiast

It works wonderfully.
0 Likes
Message 7 of 9

manasi4532
Enthusiast
Enthusiast

Nothing changed. Thank you much

0 Likes
Message 8 of 9

manasi4532
Enthusiast
Enthusiast

I  run :cl but Nothing changed. Thank you so much

0 Likes
Message 9 of 9

Sea-Haven
Mentor
Mentor

If you want run straight away when apploaded add as shown. To run again type CL.`

 

); c:cl
(c:cl)

 

A warning CL may already exist as a command, maybe call it something different say CL2.