Jump to content

Help lisp set color for polyline based on elevation


tuantrinhdp

Recommended Posts

Hello everyone. I have this problem and need help writing lisp, i want to choose color for polyline based on elevation. 
Example:
- Polyline have elevation: 0.5,1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,.... i want to set color ( ex: color green)
- Polyline have elevation: 1,2,3,4,6,7,8,9,11,12,13,14,16,17,18,19,21.... i want to set color ( ex: color megenta)Capture.png

test.dwg

Link to comment
Share on other sites

Are all the polylines whole numbers (1 2 etc, not 1.34) and are they all 2d Polylines, not 3D?

 

Second question is what are your abilities to write a LISP like? For example if we gave you a couple of hints would you be able to write this or would you need a nearly complete LISP to do the job

 

Third question, did you search this forum? I am sure I saw similar in the last 2 or 3 months asking the same thing which can be a good starting point to modify7 to what you want.

 

 

there will of course be someone out there with this as a complete solution, you might get lucky that they post you an answer with that as well

 

 

 

-EDIT with the link:-

 

I reckon if you look at this and change the line "(Command "Pline".... " to change the colour that might work but CAD is off today, Sunday you see so I can't check for you

 

 

Edited by Steven P
  • Like 1
Link to comment
Share on other sites

You would need to set major contour interval, minor contour interval, as the plines do have a Z its feasible, I will say though never had to do it multicoloured in like 40 years. So a bit one off. Will maybe try to find time.

  • Like 1
Link to comment
Share on other sites

; ELPOLY - 2022.06.20 exceed
; https://www.cadtutor.net/forum/topic/75461-help-lisp-set-color-for-polyline-based-on-elevation/
; change lwpolyline's color by it's elevation
; 0, 5, 10, 15, 20... - change to red
; 1, 2, 3, 4, 5, 6, 7... - change to purple
; 1.5, 2.5, 3.5, 4.5, 5.5 ... - change to green
; 1.xxx, 2.xxx, 3.xxx ..... - change to green anyway
; if you want to change 4th option, just change
;         (t
;            (princ " , so change to green anyway")
;            (vlax-put-property obj 'color 3)
;          )
; "3" of this part's after 'color.
; this is autocad indexed color number
 
(vl-load-com)
(defun c:ELPOLY ( / ss ssl index obj objelevation )
  (if (setq ss (ssget ":L" '((0 . "LWPOLYLINE"))))
    (progn
      (setq ssl (sslength ss))
      (setq index 0)
      (repeat ssl
        (setq obj (vlax-ename->vla-object (ssname ss index)))
        (setq objelevation (vlax-get-property obj 'elevation))
        (princ "\n it's elevation is = ")
        (princ objelevation)
        (cond
          ((= (rem objelevation 5) 0)
            (princ " , so change to red")
            (vlax-put-property obj 'color 1)
          )
          ((= (rem objelevation 1) 0)
            (princ " , so change to purple")
            (vlax-put-property obj 'color 6)
          )
          ((= (rem objelevation 0.5) 0)
            (princ " , so change to green")
            (vlax-put-property obj 'color 3)
          )
          (t
            (princ " , so change to green anyway")
            (vlax-put-property obj 'color 3)
          )
        )
        (setq index (+ index 1))
      )
    )
    (progn
      (princ "\n there's nothing to change")
    )
  )
  (princ)
)

 

you can start with this

Edited by exceed
  • Like 1
  • Thanks 1
Link to comment
Share on other sites

A quick modification to the link I posted, Same result, slightly different method to exceed - though a blatant copy here for the 'cond' part of his code.

 

 

(defun c:layerElev ( / ss i pline elevation MyColour)
  (setq ss (ssget '((0 . "LWPOLYLINE"))))
  (if ss
    (progn
      (setq i -1)
      (repeat (sslength ss)
        (setq i (1+ i)
              pline (ssname ss i)
              elevation (cdr (assoc 38 (entget pline)))
        )
        (cond
          ((= (rem elevation 5) 0)(setq MyColour 1))
          ((= (rem elevation 1) 0)(setq MyColour 2))
          ((= (rem elevation 0.5) 0)(setq MyColour 3))
          (t (setq MyColour 1))
        )
        (command "chprop" pline "" "c" MyColour "")
      )
    )
  )
  (princ)
)

 

  • Like 1
  • Thanks 1
Link to comment
Share on other sites

On 6/20/2022 at 11:22 AM, exceed said:
; ELPOLY - 2022.06.20 exceed
; https://www.cadtutor.net/forum/topic/75461-help-lisp-set-color-for-polyline-based-on-elevation/
; change lwpolyline's color by it's elevation
; 0, 5, 10, 15, 20... - change to red
; 1, 2, 3, 4, 5, 6, 7... - change to purple
; 1.5, 2.5, 3.5, 4.5, 5.5 ... - change to green
; 1.xxx, 2.xxx, 3.xxx ..... - change to green anyway
; if you want to change 4th option, just change
;         (t
;            (princ " , so change to green anyway")
;            (vlax-put-property obj 'color 3)
;          )
; "3" of this part's after 'color.
; this is autocad indexed color number
 
(vl-load-com)
(defun c:ELPOLY ( / ss ssl index obj objelevation )
  (if (setq ss (ssget ":L" '((0 . "LWPOLYLINE"))))
    (progn
      (setq ssl (sslength ss))
      (setq index 0)
      (repeat ssl
        (setq obj (vlax-ename->vla-object (ssname ss index)))
        (setq objelevation (vlax-get-property obj 'elevation))
        (princ "\n it's elevation is = ")
        (princ objelevation)
        (cond
          ((= (rem objelevation 5) 0)
            (princ " , so change to red")
            (vlax-put-property obj 'color 1)
          )
          ((= (rem objelevation 1) 0)
            (princ " , so change to purple")
            (vlax-put-property obj 'color 6)
          )
          ((= (rem objelevation 0.5) 0)
            (princ " , so change to green")
            (vlax-put-property obj 'color 3)
          )
          (t
            (princ " , so change to green anyway")
            (vlax-put-property obj 'color 3)
          )
        )
        (setq index (+ index 1))
      )
    )
    (progn
      (princ "\n there's nothing to change")
    )
  )
  (princ)
)

 

you can start with this

thank you so much.

  • Like 1
Link to comment
Share on other sites

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