明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 735|回复: 1

【K:GetClsUcsLst 】获取撑开的多边形UCS点表

[复制链接]
发表于 2024-5-15 23:45:10 | 显示全部楼层 |阅读模式
本帖最后由 kucha007 于 2024-5-15 23:50 编辑


绘制撑开的多边形,这里提供另外一种思路
以前大多使用区域覆盖来曲线救国,类似这篇帖子:撑开面积区域


  1. ;获取撑开的多边形UCS点表
  2. (defun K:GetClsUcsLst (/ PTLst TgtPT TmpLst)
  3.     (defun *error* (x)  ;出错函数
  4.       (redraw)
  5.     )
  6.     (if (car (setq PTLst (list (getpoint "\n→请指定起点或空格退出"))))
  7.         (progn
  8.           (while
  9.             (setq TgtPT
  10.                 (if (>= (length PTLst) 2) ;至少两个点
  11.                     (if (>= (length PTLst) 3) ;三个点
  12.                         (progn
  13.                           (initget "U")
  14.                           (getpoint (car PTLst) "\n→请指定下一点或空格结束 [撤回(U)]: ")
  15.                         )
  16.                         (progn
  17.                           (initget 1 "U")
  18.                           (getpoint (car PTLst) "\n→请指定下一点或 [撤回(U)]:")
  19.                         )
  20.                     )
  21.                     (progn
  22.                       (initget 1 "S");非空
  23.                       (getpoint (car PTLst)"\n→请指定下一点")
  24.                     )
  25.                 )
  26.             );第二个点
  27.             (redraw)
  28.             (cond
  29.                 ((and (eq (type TgtPT) 'STR) (eq TgtPT "U"))
  30.                     (setq PTLst (cdr PTLst))
  31.                 )
  32.                 ((eq (type TgtPT) 'LIST)
  33.                     (setq PTLst (cons TgtPT PTLst))
  34.                 )
  35.             ) ;根据关键词返回坐标点
  36.             (if (>= (length PTLst) 3);多边形
  37.                 (progn
  38.                     (setq TmpLst (cons (Last PTLst) PTLst));闭合坐标
  39.                     (mapcar '(lambda (a b) (grdraw a b 1 -1)) TmpLst (cdr TmpLst)) ;画线
  40.                 )
  41.                 (mapcar '(lambda (a b) (grdraw a b 1 -1)) PTLst (cdr PTLst)) ;画线
  42.             )
  43.           ) ;下一点OR撤回
  44.           (redraw)
  45.         )
  46.     )
  47.     (if (>= (length PTLst) 3) PTLst)
  48. )




用法:
  1. (if (setq UCSLst (K:GetClsUcsLst))
  2.     (K:MakeLWPOLYLINE Nil T UCSLst)
  3. )

本帖子中包含更多资源

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

x

评分

参与人数 1明经币 +1 收起 理由
飞雪神光 + 1 赞一个!

查看全部评分

 楼主| 发表于 2024-5-15 23:47:46 | 显示全部楼层
补充一个基础函数
  1. ;点表生成多段线
  2. (defun K:MakeLWPOLYLINE (WCS Clsd PTLst / PT)
  3.   (entmakeX
  4.     (append
  5.       (list
  6.         (cons 0 "LWPOLYLINE")
  7.         (cons 100 "AcDbEntity")
  8.         (cons 100 "AcDbPolyline")
  9.         (cons 90 (length PTLst))
  10.       )
  11.       (if Clsd (list (cons 70 1)))
  12.       (mapcar '(lambda (PT)
  13.                 (cons 10
  14.                   (if WCS PT (trans PT 1 0))
  15.                 )
  16.               )
  17.               PTLst
  18.       )
  19.     )
  20.   )
  21. )


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

本版积分规则

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

GMT+8, 2024-12-26 19:18 , Processed in 0.156817 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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