Jump to content

Recommended Posts

Posted

Been Using this colour changing lisp. So far its good. But found that some lines will not change & encounter error instead.

 

Command: 4

 

To assign to object(s) color 4 (Cyan),

Select objects: Specify opposite corner: 2 found

 

Select objects: Unknown command "P". Press F1 for help.

Unknown command "C". Press F1 for help.

4

Unknown command "4". Press F1 for help.

 

Assigned color to 2 object(s).

 

Attached is dwg. Left side of line cannot change. Right side can

 

what is problem?

 

 

;;  ColorCommandNames.lsp
;;  Function name: CCN; command names 0 through 256
;;  Defines commands for all color numbers.
;;  Type color number as command, select objects, and
;;    they will have that color assigned as entity override.
;;  Based on okc.lsp by Tommy Shumpert at Cadalyst CAD
;;    Tips, Tip #3645, "Change Entity Colors," 15 May 2011
;;  Slightly altered, and expanded on, by Kent Cooper,
;;    13 September 2012, to add to original's colors 1-255:
;;    0 = ByBlock
;;    256 = ByLayer
;;  Enhanced 17 September 2013 [prompt including color names,
;;    notifications, locked-Layer prevention, operation only with
;;    valid selection, command-echo suppression.]

(setq i 0)
(while (<= i 256)
 (eval (read (strcat "(defun c:" (itoa i) "() (ccn " (itoa i) "))")))
 (setq i (1+ i))
)

(defun ccn (color / ss cmde); = Color Command Name
 (prompt
   (strcat
     "\nTo assign to object(s) color "
     (itoa color)
     (cond
       ((< color 
         (strcat
           " ("
           (nth color '("ByBlock" "Red" "Yellow" "Green" "Cyan" "Blue" "Magenta" "White/Black"))
           ")"
         ); strcat
       ); ByBlock-or-named-color condition
       ((= color 256) " (ByLayer)")
       (""); add nothing for 1 through 255
     ); cond
     ","
   ); strcat
 ); prompt
 (if (setq ss (ssget "_:L")); User selection, excluding object(s) on locked Layer(s)
   (progn ; then
     (setq cmde (getvar 'cmdecho))
     (setvar 'cmdecho 0)
     (command
       "._change" ss "" "p" "c"
       (cond
         ((= color 0) "byblock")
         ((= color 256) "bylayer")
         (color)
       ); cond
       ""
     ); command
     (setvar 'cmdecho cmde)
     (prompt (strcat "\nAssigned color to " (itoa (sslength ss)) " object(s)."))
   ); progn
   (prompt "\nNo changeable objects selected."); else
 ); if
 (princ)
)

 

cannot change colour.dwg

Posted

That LISP uses the "Change" command. If you run "Change" on the polyline on the left side it will throw a "not parallel to ucs" error. You could run the "Flatten" command on the lines first, then run the LISP and see if that works for you.

 

BKT

Posted

Try a vl solution

 

(repeat (setq x (sslength ss))
(vla-put-color (vlax-ename->vla-object (ssname ss (setq x (- x 1)))) 4)
)

Posted
Try a vl solution

 

(repeat (setq x (sslength ss))
(vla-put-color (vlax-ename->vla-object (ssname ss (setq x (- x 1)))) 4)
)

Which part to insert this code?

Posted
That LISP uses the "Change" command. If you run "Change" on the polyline on the left side it will throw a "not parallel to ucs" error. You could run the "Flatten" command on the lines first, then run the LISP and see if that works for you.

 

BKT

 

Possible but prefer not to.

Posted

Try changing:

"._change" ss "" "p" "c"

To:

"._chprop" ss "" "c"

Posted
Try changing:

"._change" ss "" "p" "c"

To:

"._chprop" ss "" "c"

 

Thanks dude!! That worked!!

Posted

Try this function

 

(defun ccn (col / a i)
 (if (setq a (ssget "_:L"))
   (progn
     (repeat (setq i (sslength a))
(vla-put-color
  (vlax-ename->vla-object (ssname a (setq i (1- i))))
  col
)
     )
     (prompt (strcat
	"\nAssigned "
	(cond ((< col 
	       (nth col
		    '("ByBlock"	   "Red"	"Yellow"
		      "Green"	   "Cyan"	"Blue"
		      "Magenta"	   "White/Black"
		     )
	       )
	      )
	      ((= col 256) "bylayer")
	      ((itoa col))
	)
	" color to "
	(itoa (sslength a))
	" object(s)."
      )
     )
   )
   (prompt "\nNo changeable objects selected.")
 )
)

Posted
Try this function

 

 

Tried. but when pressing numbers it do not register a command. The present code when press 2 or 10 then select object & enter will change object to red colour. If press 3 or 100, will change to green colour.

Posted

Color 2 & 10 are not same... they are different shades of same color... same with 3 & 100

 

YOu can see the difference in color index

Posted (edited)
Color 2 & 10 are not same... they are different shades of same color... same with 3 & 100

 

YOu can see the difference in color index

 

That's correct . I meant how it visually look in its base colour. wanted to emphasie that the colour will change according to its number indicated which as you have mention, the colour index.

 

by the way how does your code works?

Edited by Tripledot

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