以下程序用来判断多义线的时针方向
(DEFUN GE_WHATPOLY (OBJ / NVERTS CNT TMP X1 Y1);;; (SETQ PT_LIST(VLA-GET-COORDINATES OBJ)) (SETQ CNT 0) (SETQ NVERTS(/ (+(VLAX-SAFEARRAY-GET-U-BOUND (VLAX-VARIANT-VALUE PT_LIST ) 1)1) 2)) (SETQ AREA 0.0) (WHILE (< CNT (1- NVERTS)) (SETQ Y1(VLAX-SAFEARRAY-GET-ELEMENT (VLAX-VARIANT-VALUE PT_LIST ) (+(* CNT 2)1))) (SETQ X1(VLAX-SAFEARRAY-GET-ELEMENT (VLAX-VARIANT-VALUE PT_LIST ) (* (+ CNT 1) 2))) (SETQ AREA(+ AREA (* Y1 X1))) (SETQ CNT(1+ CNT)) ) (SETQ Y1(VLAX-SAFEARRAY-GET-ELEMENT (VLAX-VARIANT-VALUE PT_LIST ) (+(* CNT 2)1))) (SETQ X1(VLAX-SAFEARRAY-GET-ELEMENT (VLAX-VARIANT-VALUE PT_LIST ) 0)) (SETQ AREA(+ AREA(* Y1 X1))) (SETQ CNT 0) (SETQ TMP 0.0) (WHILE (< CNT (1- NVERTS)) (SETQ Y1(VLAX-SAFEARRAY-GET-ELEMENT (VLAX-VARIANT-VALUE PT_LIST ) (+(* (+ CNT 1) 2)1))) (SETQ X1(VLAX-SAFEARRAY-GET-ELEMENT (VLAX-VARIANT-VALUE PT_LIST ) (* CNT 2))) (SETQ TMP(+ TMP (* Y1 X1))) (SETQ CNT(+ CNT 1)) ) (SETQ Y1(VLAX-SAFEARRAY-GET-ELEMENT (VLAX-VARIANT-VALUE PT_LIST )1)) (SETQ X1(VLAX-SAFEARRAY-GET-ELEMENT (VLAX-VARIANT-VALUE PT_LIST)(* CNT 2))) (SETQ TMP(+ TMP (* Y1 X1))) (SETQ AREA(- AREA TMP)) (COND ((< AREA 0.0) (SETQ AREA -1)) ((> AREA 0.0) (SETQ AREA 1)) (T (SETQ AREA 0)) ) AREA )
对不住大家,程序没有注解,如果返回值为正,则曲线为顺时针方向。 |