明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1674|回复: 7

如何生成该图形

[复制链接]
发表于 2005-5-5 11:08:00 | 显示全部楼层 |阅读模式
入图,怎么能控制按顺时针或逆时针顺序的连接图面上的点啊

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2005-5-5 17:21:00 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2005-5-6 09:28:00 | 显示全部楼层
请各位高手指点一下啊
发表于 2005-5-6 12:18:00 | 显示全部楼层
你想让程序自动生成?
发表于 2005-5-6 12:31:00 | 显示全部楼层
  1. (DEFUN c:test (/ index pts pt_base ss tmp)
  2.    (INITGET 1)
  3.    (SETQ pt_base (GETPOINT "\n选择基点:"))
  4.    (PRINC "\n选择要连接的点:")
  5.    (SETQ  ss       (SSGET '((0 . "point")))
  6.   index 0
  7.   pts     (LIST)
  8.    )
  9.    ;;设置起始点
  10.    ;;得到选择点的所有坐标数据
  11.    (REPEAT (IF ss
  12.          (SSLENGTH ss)
  13.          0
  14.      )
  15.        (SETQ pts  (CONS (CDR (ASSOC '10 (ENTGET (SSNAME ss index)))) pts)
  16.      index  (1+ index)
  17.        )
  18.    )
  19.    ;;整理坐标
  20.    (SETQ  pts (MAPCAR '(LAMBDA (tmp) (LIST tmp (ANGLE pt_base tmp))) pts)
  21.   pts (VL-SORT pts
  22.              '(LAMBDA (tmp1 tmp2) (< (LAST tmp1) (LAST tmp2)))
  23.          )
  24.   pts (MAPCAR 'CAR pts)
  25.    )
  26.    (COMMAND "spline")
  27.    (FOREACH tmp pts (COMMAND tmp))
  28.    (COMMAND "c" "")
  29.    (PRINC)
  30. )
复制代码
发表于 2005-5-6 20:51:00 | 显示全部楼层
楼上的程序让人收益菲浅呐!
发表于 2005-5-6 22:02:00 | 显示全部楼层
思路:1、对点的X、Y坐标取平均值,组成参考点;2、计算参考点与各点的角度;3、角度按逆序排序;4、画SPLINE。
  1. ;点按顺时针连线
  2. (DEFUN C:CLOCKWISE_POINT ( / LSORT SS OLDOS SL I PT X Y PTL PTTL ANG PT1)
  3. (SETVAR "CMDECHO" 0)
  4. (IF (<= (ATOI (GETVAR "ACADVER")) 14)
  5.   (DEFUN LSORT (DL I / K N DDL L1 L2 IPN J)
  6.    (SETQ K 0 N (LENGTH DL))
  7.    (WHILE (< K N) (SETQ J (1+ K) L1 (NTH K DL) IPN K)
  8.      (WHILE (< J N) (SETQ L2 (NTH J DL) J (1+ J))
  9.        (IF (< (NTH I L1) (NTH I L2)) (SETQ L1 L2 IPN (1- J)))
  10.      )
  11.      (IF (/= IPN K) (PROGN
  12.        (SETQ J 0 DDL (LIST))
  13.        (WHILE (< J K) (SETQ DDL (CONS (NTH J DL) DDL) J (1+ J)))
  14.        (SETQ DDL (CONS L1 DDL))
  15.        (WHILE (< J N)
  16.          (IF (/= J IPN) (SETQ DDL (CONS (NTH J DL) DDL)))
  17.          (SETQ J (1+ J))
  18.        )
  19.        (SETQ DL (REVERSE DDL))
  20.      ))
  21.      (SETQ K (1+ K))
  22.    )
  23.    DL
  24.   )
  25. )
  26. (PRINC "\nSelect Point(s) 选择要连接的点: ")
  27. (IF (SETQ SS (SSGET &#39;((0 . "POINT")))) (PROGN
  28.   (SETQ OLDOS (GETVAR "OSMODE"))
  29.   (SETVAR "OSMODE" 0)
  30.   (SETQ SL (SSLENGTH SS) I 0 X 0 Y 0 PTL (LIST))
  31. ;计算参考点
  32.   (REPEAT SL
  33.    (SETQ PT (CDR (ASSOC 10 (ENTGET (SSNAME SS I))))
  34.                I (1+ I)
  35.                X (+ (CAR PT) X)
  36.                Y (+ (CADR PT) Y)
  37.                PTL (CONS PT PTL))
  38.   )
  39.   (SETQ PC (LIST (/ X SL) (/ Y SL) 0.0)
  40.              I 0
  41.              PTL (REVERSE PTL)
  42.              PTTL (LIST))
  43. ;计算角度
  44.   (REPEAT SL
  45.    (SETQ PT (NTH I PTL) I (1+ I)
  46.                ANG (ANGLE PC PT)
  47.                PTTL (CONS (LIST ANG PT) PTTL))
  48.   )
  49. ;角度从大到小排序
  50.   (IF (<= (ATOI (GETVAR "ACADVER")) 14)
  51.    (SETQ PTTL (LSORT PTTL 0))
  52.    (SETQ PTTL (VL-SORT PTTL (FUNCTION (LAMBDA (P1 P2) (> (CAR P1) (CAR P2))))))
  53.   )
  54. ;画SPLINE线
  55.   (COMMADN ".UNDO" "BE")
  56.   (SETQ I 1)
  57.   (SETQ PT1 (CADAR PTTL))
  58. ; (COMMAND "PLINE" PT1)
  59.   (COMMAND "SPLINE" PT1)
  60.   (REPEAT (1- SL)
  61.    (SETQ PT (CADR (NTH I PTTL)) I (1+ I))
  62.    (COMMAND PT)
  63.   )
  64. ; (COMMAND PT1 "")
  65.   (COMMAND PT1 "" "" "")
  66.   (COMMAND ".UNDO" "E")
  67.   (SETVAR "OSMODE" OLDOS)
  68. ))
  69. (SETVAR "CMDECHO" 1)
  70. (PRINC)
  71. )
复制代码
程序支持所有ACAD版本。
发表于 2005-5-7 02:48:00 | 显示全部楼层
呵呵!好东西,我想了好久,这回我改一改,可以做宗地图了。


谢了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-17 04:59 , Processed in 0.190677 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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