Jump to content

Recommended Posts

Posted

How do I select a pline in a lisp to pass to a selection set?

Posted

This would filter for LWpolyline and Polyline as well.

 

(setq ss (ssget '((0 . "LWPOLYLINE,POLYLINE"))))

Posted

But to select it on screen.

Posted

Sorry if i didn't explain properly. I want the lisp to ask the user to select a pline. Thanks

Posted

All right .

 

Check this out ...:)

 

This ..

(progn
 (princ "\n Select POLYLINE(S) only please :")
 (setq ss (ssget '((0 . "LWPOLYLINE,POLYLINE"))))
)

 

Or this ..

(setq free (getvar 'nomutt))
(setvar 'nomutt 1)
(progn
 (princ "\n Select POLYLINE(S) only please :")
 (setq ss (ssget '((0 . "LWPOLYLINE,POLYLINE"))))
)
(setvar 'nomutt free)

 

TharwaT

Posted

Thanks. I'll try that.

Posted

This is what i have so far. I don't think i integrated your part right cause I get an error about selection sets.

 

 
(defun C:yellow_lines (/ *error* ang col clr coords dwo elist midp offsetted ofpt osm p1 p2 p3 pline a b c SUCE SUOM SUSM SUAB SUAD SUCL SUCR)
(setq SUCE (getvar "cmdecho"))
 (setq SUOM (getvar "orthomode"))
 (setq SUSM (getvar "osmode"))
 (setq SUAB (getvar "angbase"))
 (setq SUAD (getvar "angdir"))
 (setq SUCL (getvar "clayer"))
 (setq SUCR (getvar "cecolor"))

(command "_.-layer" "_N" "CCC_LAYOUT_Proposed_Road_Lining_Yellow_Lines" "_C" "2" "CCC_LAYOUT_Proposed_Road_Lining_Yellow_Lines" "" )
(setvar "clayer" "CCC_LAYOUT_Proposed_Road_Lining_Yellow_Lines")
 
(progn
 (princ "\n Select POLYLINE(S) only please :")
 (setq pline (ssget '((0 . "LWPOLYLINE,POLYLINE"))))
elist (entget pline)
)
 ;(setq pline (entlast)
;elist (entget pline)

;(setq elist (entmod (subst (cons 70 1)(assoc 70 elist)elist)));<--close pline
(entmod (subst (cons 43 0)(assoc 43 elist)elist));<--set line width to zero
(setvar "draworderctl" 3)  
(command "_.draworder" pline "" "_F");<--set pline's draw order to front  
(setq coords (vl-remove-if (function not)
  (mapcar (function (lambda (x)
        (if (= 10 (car x))(cdr x))))
   elist))
)
(setq p3 (caddr coords)
     p1 (car coords)
     ang (angle p1 p3)
     ofpt (polar p3 ang 1.0)
     )
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(command "._offset" 0.1 pline ofpt "")
 (setq offsetted (entlast)
 elist (entget offsetted)
)
(if (assoc 62 elist)
(setq elist (subst (cons 62 1)(assoc 62 elist) elist ))
(setq elist (append elist (list '(62 . 1))))
)
(entmod elist)
(command "._pedit" offsetted "_W" 1.0 "")
(command "_.draworder" offsetted "" "_B");<--set pline's draw order to back  
(setq coords (vl-remove-if (function not)
  (mapcar (function (lambda (x)
        (if (= 10 (car x))(cdr x))))
   elist))
)
 (setq p2 (car coords)
midp (mapcar (function (lambda( a b)(/ (+ a b) 2)))
      p1 p2)
)
(command "_.chprop" offsetted "LA" "CCC_LAYOUT_Proposed_Road_Lining_Yellow_Lines" "")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(command "._offset" 0.3 offsetted ofpt "")
 (setq offsetted1 (entlast)
 elist (entget offsetted1)
)
(if (assoc 62 elist)
(setq elist (subst (cons 62 1)(assoc 62 elist) elist ))
(setq elist (append elist (list '(62 . 1))))
)
(entmod elist)
(command "._pedit" offsetted1 "_W" 1.0 "")
(setq coords (vl-remove-if (function not)
  (mapcar (function (lambda (x)
        (if (= 10 (car x))(cdr x))))
   elist))
)
 (setq p2 (car coords)
midp (mapcar (function (lambda( a b)(/ (+ a b) 2)))
      p1 p2)
)
;(command "_.chprop" offsetted "LA" "CCC_LAYOUT_Proposed_Road_Lining_Yellow_Lines" "")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(command "_.mleader")
 (setvar "cmdecho"   SUCE)
 (setvar "orthomode" SUOM)
 (setvar "osmode"    SUSM)
 (setvar "angbase"   SUAB)
 (setvar "angdir"    SUAD)
 (setvar "clayer"    SUCL)
 (setvar "cecolor"    SUCR)
(princ) 
)

 

Can you take a look please?

Posted

Hi,

 

I have changed my tack on this one. Now the user draws a line as part of the routine that is deleted when it is completed. My problem is the the offset side in controlled. How do I integrate a call to choose a side to offset to?

 

 
(defun C:yellow_lines (/ ang coords elist midp offsetted offsetted1 ofpt p1 p2 p3 pline SUCE SUOM SUSM SUAB SUAD SUCL SUCR)
(setq SUCE (getvar "cmdecho"))
 (setq SUOM (getvar "orthomode"))
 (setq SUSM (getvar "osmode"))
 (setq SUAB (getvar "angbase"))
 (setq SUAD (getvar "angdir"))
 (setq SUCL (getvar "clayer"))
 (setq SUCR (getvar "cecolor"))
(command "_.-layer" "_N" "CCC_LAYOUT_Proposed_Road_Lining_Yellow_Lines" "_C" "2" "CCC_LAYOUT_Proposed_Road_Lining_Yellow_Lines" "" )
(setvar "clayer" "CCC_LAYOUT_Proposed_Road_Lining_Yellow_Lines")  
(setvar "cecolor" "1")
(command "._pline")
(while (= 1 (logand 1 (getvar "cmdactive")))
(command pause))
 (setq pline (entlast)
elist (entget pline)
)
(setvar "cecolor" "Bylayer")  
(command "_.draworder" pline "" "_F");<--set pline's draw order to front  
(setq coords (vl-remove-if (function not)
  (mapcar (function (lambda (x)
        (if (= 10 (car x))(cdr x))))
   elist))
)
(setq p3 (caddr coords)
     p1 (car coords)
     ang (angle p1 p3)
     ofpt (polar p3 ang 1.0)
     )
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(command "._offset" 0.2 pline ofpt "")
 (setq offsetted (entlast)
 elist (entget offsetted)
)
(entmod elist)
(command "._pedit" offsetted "_W" 0.1 "")
(setq coords (vl-remove-if (function not)
  (mapcar (function (lambda (x)
        (if (= 10 (car x))(cdr x))))
   elist))
)
 (setq p2 (car coords)
midp (mapcar (function (lambda( a b)(/ (+ a b) 2)))
      p1 p2)
)
(command "_change" offsetted ""  "p" "color" "2" "")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(command "._offset" 0.4 pline ofpt "")
 (setq offsetted1 (entlast)
 elist (entget offsetted1)
)
(entmod elist)
(command "._pedit" offsetted1 "_W" 0.1 "")
(setq coords (vl-remove-if (function not)
  (mapcar (function (lambda (x)
        (if (= 10 (car x))(cdr x))))
   elist))
)
 (setq p2 (car coords)
midp (mapcar (function (lambda( a b)(/ (+ a b) 2)))
      p1 p2)
)
(command "_change" offsetted1 ""  "p" "color" "2" "")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(command "_erase" pline "" )
 (setvar "cmdecho"   SUCE)
 (setvar "orthomode" SUOM)
 (setvar "osmode"    SUSM)
 (setvar "angbase"   SUAB)
 (setvar "angdir"    SUAD)
 (setvar "clayer"    SUCL)
 (setvar "cecolor"    SUCR)
(princ) 
)

Posted

Thanks for the hint. That sorted it alright.

Posted

I have moved this on a bit and have put in an option that will allow the user to choose whether to create offset the lines from an existing line or to draw a new line that would be offset. I have tried to introduce a cond to choose which sub-routine to call. I'm stuck though and can't find an obvious answer online. Can some help with the missing part? Thanks.

 

 

 
(defun C:double_yellow_lines (/ ang coords elist midp offsetted offsetted1 ofpt p1 p2 p3 pline side SUCE SUOM SUSM SUAB SUAD SUCL SUCR)
(setq SUCE (getvar "cmdecho"))
 (setq SUOM (getvar "orthomode"))
 (setq SUSM (getvar "osmode"))
 (setq SUAB (getvar "angbase"))
 (setq SUAD (getvar "angdir"))
 (setq SUCL (getvar "clayer"))
 (setq SUCR (getvar "cecolor"))
(command "_.-layer" "_N" "CCC_LAYOUT_Proposed_Road_Lining_Yellow_Lines" "_C" "2" "CCC_LAYOUT_Proposed_Road_Lining_Yellow_Lines" "" )
(setvar "clayer" "CCC_LAYOUT_Proposed_Road_Lining_Yellow_Lines")  
(setvar "cecolor" "1")

[color=red](setq option(XXXX "\n:Choose draw line or select line method: (D/S) ")
(cond     ((= option "D")(yellow_draw))
((= option "S")(yellow_select))
)[/color]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun yellow_select ()
(setq pline(entsel "\nSelect a kerb line: "))
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun yellow_draw ()
(command "._pline")
(while (= 1 (logand 1 (getvar "cmdactive")))
(command pause))
(setq pline (entlast)
elist (entget pline)
)
(setvar "cecolor" "Bylayer")  
(command "_.draworder" pline "" "_F");<--set pline's draw order to front  
(setq coords (vl-remove-if (function not)
(mapcar (function (lambda (x)
(if (= 10 (car x))(cdr x))))
elist))
)
(setq p3 (caddr coords)
p1 (car coords)
ang (angle p1 p3)
)
;(command "_erase" pline "" )
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq side(getpoint "\nPick an offset side: "))
(command "._offset" 0.3 pline side "")
(setq offsetted (entlast)
elist (entget offsetted)
)
(entmod elist)
(command "._pedit" offsetted "_W" 0.1 "")
(setq coords (vl-remove-if (function not)
(mapcar (function (lambda (x)
(if (= 10 (car x))(cdr x))))
elist))
)
(setq p2 (car coords)
midp (mapcar (function (lambda( a b)(/ (+ a b) 2)))
p1 p2)
)
(command "_change" offsetted ""  "p" "color" "2" "")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(command "._offset" 0.5 plinesel side "")
(setq offsetted1 (entlast)
elist (entget offsetted1)
)
(entmod elist)
(command "._pedit" offsetted1 "_W" 0.1 "")
(setq coords (vl-remove-if (function not)
(mapcar (function (lambda (x)
(if (= 10 (car x))(cdr x))))
elist))
)
(setq p2 (car coords)
midp (mapcar (function (lambda( a b)(/ (+ a b) 2)))
p1 p2)
)
(command "_change" offsetted1 ""  "p" "color" "2" "")

 (setvar "cmdecho"   SUCE)
 (setvar "orthomode" SUOM)
 (setvar "osmode"    SUSM)
 (setvar "angbase"   SUAB)
 (setvar "angdir"    SUAD)
 (setvar "clayer"    SUCL)
 (setvar "cecolor"    SUCR)
(princ) 
)

Posted

getkword with initget

 

eg.

(initget "Yes No")
(getkword "\nDo you understand? [Yes/No]: ")

Posted

Thanks Alanjt,

 

I tried to integrate that but now it stops when I select my method. Would be able to have a look and spot the problem?

 

 
(defun C:dyl (/ ang coords elist midp offsetted offsetted1 ofpt p1 p2 p3 pline side SUCE SUOM SUSM SUAB SUAD SUCL SUCR)
(setq SUCE (getvar "cmdecho"))
 (setq SUOM (getvar "orthomode"))
 (setq SUSM (getvar "osmode"))
 (setq SUAB (getvar "angbase"))
 (setq SUAD (getvar "angdir"))
 (setq SUCL (getvar "clayer"))
 (setq SUCR (getvar "cecolor"))
(command "_.-layer" "_N" "CCC_LAYOUT_Proposed_Road_Lining_Yellow_Lines" "_C" "2" "CCC_LAYOUT_Proposed_Road_Lining_Yellow_Lines" "" )
(setvar "clayer" "CCC_LAYOUT_Proposed_Road_Lining_Yellow_Lines")  
(setvar "cecolor" "1")
(initget "D S")
(getkword "\nChoose Draw line or Select line method: [D/S]: ")
(cond     ((= option "D")(yellow_draw))
((= option "S")(yellow_select))
)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun yellow_select ()
(setq pline(entsel "\nSelect a kerb line: "))
(yellow_resume)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun yellow_draw ()
(command "._pline")
(while (= 1 (logand 1 (getvar "cmdactive")))
(command pause))
(setq pline (entlast)
elist (entget pline)
)
(setvar "cecolor" "Bylayer")  
(command "_.draworder" pline "" "_F");<--set pline's draw order to front  
(setq coords (vl-remove-if (function not)
(mapcar (function (lambda (x)
(if (= 10 (car x))(cdr x))))
elist))
)
(setq p3 (caddr coords)
p1 (car coords)
ang (angle p1 p3)
)
;(command "_erase" pline "" )
(yellow_resume)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun yellow_resume ()
(setq side(getpoint "\nPick an offset side: "))
(command "._offset" 0.3 pline side "")
(setq offsetted (entlast)
elist (entget offsetted)
)
(entmod elist)
(command "._pedit" offsetted "_W" 0.1 "")
(setq coords (vl-remove-if (function not)
(mapcar (function (lambda (x)
(if (= 10 (car x))(cdr x))))
elist))
)
(setq p2 (car coords)
midp (mapcar (function (lambda( a b)(/ (+ a b) 2)))
p1 p2)
)
(command "_change" offsetted ""  "p" "color" "2" "")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(command "._offset" 0.5 plinesel side "")
(setq offsetted1 (entlast)
elist (entget offsetted1)
)
(entmod elist)
(command "._pedit" offsetted1 "_W" 0.1 "")
(setq coords (vl-remove-if (function not)
(mapcar (function (lambda (x)
(if (= 10 (car x))(cdr x))))
elist))
)
(setq p2 (car coords)
midp (mapcar (function (lambda( a b)(/ (+ a b) 2)))
p1 p2)
)
(command "_change" offsetted1 ""  "p" "color" "2" "")

 (setvar "cmdecho"   SUCE)
 (setvar "orthomode" SUOM)
 (setvar "osmode"    SUSM)
 (setvar "angbase"   SUAB)
 (setvar "angdir"    SUAD)
 (setvar "clayer"    SUCL)
 (setvar "cecolor"    SUCR)
(princ) 
)

 

Thanks.

Posted

You are checking against a 'option' variable but you are NOT defining the variable with your getkword statement.

Posted

Yeah, that was it. Thanks for the bailout again.

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