¸®½À °­Á - PLINE Á¤Á¡µéÀÇ ¹æÇâ üũ ÇÔ¼ö.


º» °­Á´ ¾ÆÅ°¿ÀÇǽº(±èÈñÅÂ)¿¡ ÀÇÇØ ¸¸µé¾î Á³À¸¸ç ¾î¶°ÇÑ À¥À̳ª
ÃâÆÇ¹°¿¡ ¾ÆÅ°¿ÀÇǽº(±èÈñÅÂ)ÀÇ µ¿ÀǾøÀÌ ¿Ã¸®´Â °ÍÀ» Çã¶ôÇÏÁö ¾Ê½À´Ï´Ù.

 


´ÝÈù pline ÀÇ Á¤Á¡µéÀÇ ¼ø¼­°¡ ½Ã°è¹æÇâÀÎÁö ½Ã°è¹Ý´ë ¹æÇâÀÎÁö üũÇÕ´Ï´Ù.
pline ÀÇ Á¤Á¡Àº ÃÖ¼Ò 3°³ ÀÌ»óÀ̾î¾ß ÇÕ´Ï´Ù.
½Ã°è¹æÇâÀ̸é "right" , ½Ã°è¹Ý´ë¹æÇâÀ̸é "left" ¸¦ ¸®ÅÏÇÕ´Ï´Ù.



(pl-l-r-chk pline-ename plineÀÇ ³»ºÎÁ¡)

(pl-l-r-chk (car (entsel)) (getpoint)) => 1¹øÀÇ °æ¿ì "right" ¸®ÅÏ.

(pl-l-r-chk (car (entsel)) (getpoint)) => 2¹øÀÇ °æ¿ì "left" ¸®ÅÏ.



ÄÚµå



  (defun GetPolyVtx(EntList / VtxList AA X)
    (setq VtxList '())
    (IF (= "LWPOLYLINE" (CDR (ASSOC 0 EntList))) 
     (mapcar '(lambda (x) (if (= 10 (car x)) (setq VtxList (append VtxList (list (cdr x))) ) ) ) EntList)
     (PROGN
      (SETQ AA (ENTGET(ENTNEXT (CDR (ASSOC -1 EntList)))))
      (WHILE (/= "SEQEND" (CDR (ASSOC 0 AA)))
        (setq VtxList (append VtxList (list (cdr (ASSOC 10 AA)))))
        (SETQ AA (ENTGET(ENTNEXT (CDR (ASSOC -1 AA)))))
      )
    ));IF
    VtxList
  )

  (defun pl-l-r-chk (pn poin / plist rtd ang+ ang-)
    (defun rtd (a)(/ (* a 180.0) pi))
    (setq plist (getpolyvtx (entget pn)) ang+ 0 ang- 0)
    (setq plist (mapcar '(lambda (x) (rtd (angle poin x))) plist))
    (mapcar '(lambda (x y)
               (cond
                 ((and (< 180 (abs (- x y))) (< 180 x) (> 180 y)) (setq ang+ (+ ang+ (- 360 x) y)))
                 ((and (< 180 (abs (- x y))) (> 180  x) (< 180 y)) (setq ang- (+ ang- x (- 360 Y))))
                 ((< x y) (setq ang+ (+ ang+ (- y x))))
                 ((> x y) (setq ang- (+ ang- (- x y))))
               )
             )	 
            plist (cdr (append plist (list (car plist))))
    )
    (if (< ang+ ang-) "right" "left")
  )

¼³¸í


  (defun pl-l-r-chk (pn poin / plist rtd ang+ ang-)
    ;; ¶óµð¾È°¢µµ °ªÀ» µð±×¸®°¢µµ·Î º¯È¯ÇÏ´Â ÇÔ¼ö´Ù.
    (defun rtd (a)(/ (* a 180.0) pi))
    ;; Á¤Á¡µéÀ» ÃßÃâÇÑ´Ù.
    (setq plist (getpolyvtx (entget pn)) ang+ 0 ang- 0)
    ;; pline ³»ºÎÁ¡°ú Á¤Á¡°úÀÇ °¢µµ¸®½ºÆ®¸¦ ¸¸µç´Ù.
    (setq plist (mapcar '(lambda (x) (rtd (angle poin x))) plist))
    ;; °¢µµ°¡ Áõ°¡ÇÏ¸é °¢µµ¸¦ ang+ º¯¼ö¿¡ , °¨¼ÒÇϸé ang- º¯¼ö¿¡ º¯È­°¢µµ¸¦ ÇÕÇÑ´Ù.
    (mapcar '(lambda (x y)
               (cond
                 ;; °¢µµÀÇ Æ¯¼º»ó µÎ °¢µµ°¡ 0 µµ¸¦ ³¢°í ÀÖÀ»¶§ÀÇ °è»ê¹æ¹ýÀÌ´Ù.
                 ((and (< 180 (abs (- x y))) (< 180 x) (> 180 y)) (setq ang+ (+ ang+ (- 360 x) y)))
                 ((and (< 180 (abs (- x y))) (> 180  x) (< 180 y)) (setq ang- (+ ang- x (- 360 Y))))
                 ((< x y) (setq ang+ (+ ang+ (- y x))))
                 ((> x y) (setq ang- (+ ang- (- x y))))
               )
             )	 
            plist (cdr (append plist (list (car plist))))
    )
    ;; °è»êµÈ °á°ú¿¡ µû¶ó "right" ¶Ç´Â "left" ¸¦ Ãâ·ÂÇÑ´Ù.
    (if (< ang+ ang-) "right" "left")
  )