明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1174|回复: 8

[提问] 撑开面积区域

[复制链接]
发表于 2023-3-30 17:24:16 | 显示全部楼层 |阅读模式
本帖最后由 nyistjz 于 2023-3-30 23:43 编辑

画区域的时候,有没有办法像这个样子把区域撑开,而不是画直线再闭合


有点类似wipeout这个命令画区域覆盖一样


本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2023-3-31 09:08:26 | 显示全部楼层
(defun c:tt(/ ent)
        (command "wipeout")
        (while (= 1 (getvar "cmdactive")) (command pause))
        (setvar "qaflags" 1)
        (command "explode" (entlast) "")
        (setvar "peditaccept" 1)
        (command "pedit" "m" (ssget "p") "" "J" 1 "")
        (setq ent (entlast))
        (sssetfirst nil (ssadd ent))
)

曲线救国,呵呵
回复 支持 0 反对 1

使用道具 举报

发表于 2023-3-30 17:57:16 | 显示全部楼层
带动画的 用grread  都的想办法怎么精准捕捉点。如果不需要精准捕捉点,实现问题都不大
发表于 2023-3-30 19:34:47 | 显示全部楼层
本帖最后由 cable2004 于 2023-3-30 19:44 编辑

如果只是直线边界,可以用grdraw 提前显示。

  • (setq p1 (GETPOINT))
  • (while (progn
  •          (setq gr (grread 7 2))
  •          (setq p2 (cadr gr))
  •          (GRDRAW p1 p2 1)
  •          (if pt_tmp
  •            (GRDRAW p1 pt_tmp 0)
  •          )
  •          (setq pt_tmp p2)
  •        )
  • )


发表于 2023-3-30 21:50:57 | 显示全部楼层
有,之前就实现过类似的效果
 楼主| 发表于 2023-3-30 23:42:13 | 显示全部楼层
cable2004 发表于 2023-3-30 19:34
如果只是直线边界,可以用grdraw 提前显示。

你这个试了一下,无法正常运行,不及好使。
也有可能是我操作不正确
发表于 2023-3-31 07:15:18 | 显示全部楼层
本帖最后由 cable2004 于 2023-3-31 07:16 编辑
nyistjz 发表于 2023-3-30 23:42
你这个试了一下,无法正常运行,不及好使。
也有可能是我操作不正确
好久不写lisp了,语法函数都忘记了。

  1. (defun c:tt()
  2. (setq lst nil)
  3. (setq p1 (GETPOINT))
  4. (setq lst (cons p1 lst ))      
  5. (while(setq p1 (GETPOINT))
  6.   (redraw)
  7. (setq lst (cons p1 lst ))
  8.   (mapcar '(lambda (x y)  (GRDRAW x y 2))  lst (append (cdr lst) (list (car lst))))
  9. )
  10. )

发表于 2023-3-31 23:31:42 | 显示全部楼层
 楼主| 发表于 2023-4-1 08:40:18 | 显示全部楼层
本帖最后由 nyistjz 于 2023-4-1 13:57 编辑

下面这个方法十分nice,可惜不能捕捉,有瑕疵,相对而言,前面我那个变通的方法目前来看还是可以的。


;;[功能] 画封闭多边形----------脱了裤子放屁
(defun C:w1 (/ PTS)
  (cond ((setq pts (HH::getPoints)) (MakeXLWPOLYLINE pts)))
)

;;[功能] 取点函数
(defun HH::getPoints (/ CODE FLAG P0 PT PT1 X Y)
  (while (and (setq code (grread T 8)) (or (= (car code) 3) (= (car code) 5)))
    (cond ((= (car code) 3) (setq pt (cons (cadr code) pt))))
    (redraw)
    (cond
      ((> (length pt) 1)
       (setq pt1 (cons (cadr code) pt))
       (setq pt1 (cons p0 pt1))
       (mapcar '(lambda (x y) (grdraw x y 1)) pt1 (cdr pt1))
      )
      ((equal (length pt) 1) (setq p0 (car pt)) (grdraw p0 (cadr code) 1))
      (T
       (cond ((not Flag) (setq Flag T) (princ "\n 点取起点")))
      )
    )
  )
  (redraw)
  (cond ((> (length pt) 2) (reverse pt)))
)
;;http://bbs.xdcad.net/thread-673261-1-1.html
;;167.3 [功能] Entmake点表生成多段线
(defun MakeXLWPOLYLINE (lst / PT)
  (entmakeX
    (append
      (list '(0 . "LWPOLYLINE")
            '(100 . "AcDbEntity")
            '(100 . "AcDbPolyline")
            (cons 90 (length lst))
            '(70 . 1)
      )
      (mapcar '(lambda (pt) (cons 10 pt)) lst)
    )
  )
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-16 13:28 , Processed in 0.192967 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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