这是一个非常简单的版本,只使用ACI颜色数从10到199,从最低到最高。
- (vl-load-com)
- (setq *PLColor:ACI_Range* '(10 . 199)
- *PLColor:Z_Range* '(0.0 . 100.0))
- (defun PLColour:CalcColour (elevation / z aci)
- (setq z (- (cdr *PLColor:Z_Range*) (car *PLColor:Z_Range*) -1.0)
- z (/ (rem elevation z) z))
- (+ (car *PLColor:ACI_Range*) (fix (* (- (cdr *PLColor:ACI_Range*) (car *PLColor:ACI_Range*)) z))))
- (defun c:PLColour (/ ss eList minZ maxZ)
- (if (and (ssget '((0 . "LWPOLYLINE")))
- (setq ss (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object)))))
- (progn (setq minZ 1.7976931348623158e308 maxZ -1.7976931348623158e308)
- (vlax-for eo ss
- (setq eList (cons eo eList)
- minZ (min (vla-get-Elevation eo) minZ)
- maxZ (max (vla-get-Elevation eo) maxZ)))
- (setq *PLColor:Z_Range* (cons minZ maxZ))
- (foreach eo eList (vla-put-Color eo (PLColour:CalcColour (vla-get-Elevation eo))))
- (vla-Delete ss)))
- (princ))
|