明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2719|回复: 2

[LISP]一个实用的LISP程序

[复制链接]
发表于 2006-11-29 23:22:00 | 显示全部楼层 |阅读模式

以下程序用来判断多义线的时针方向

(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
  )

对不住大家,程序没有注解,如果返回值为正,则曲线为顺时针方向。

发表于 2006-11-30 08:24:00 | 显示全部楼层

多谢共享,为大家提供一种新的方法。

另外一种方法是偏移法,利用AX中的偏移法,几行代码就可完成。可查看源码共享版块。

发表于 2019-4-12 02:57:41 | 显示全部楼层
mccad 发表于 2006-11-30 08:24
多谢共享,为大家提供一种新的方法。
另外一种方法是偏移法,利用AX中的偏移法,几行代码就可完成。可查看 ...

哪里呢,给个链接
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-18 22:55 , Processed in 0.197399 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表