明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1983|回复: 15

[资源] <*** 移動滑鼠-->動態判別矩形框區域 畫線 ***>

  [复制链接]
发表于 2022-9-5 11:28 | 显示全部楼层 |阅读模式
本帖最后由 lee50310 于 2022-9-6 04:18 编辑

移動滑鼠-->動態判別矩形框區域 畫線


這個是之前在此論壇上看到 有人提問
覺得很有趣,試寫了一個 終於完成
發個測試版讓各位體驗一下吧!

測試版:目前只適用封閉矩形物 偏移距離已被固定=20    dbk.fas
        執行指令:dbk
        移動滑鼠: 游標在封閉矩形物 內 靠 上,下,左,右,中間 依偏移距暫顯要畫的線段(粉紅色線)
左擊滑鼠: 畫出線段(綠線)
右擊滑鼠: 離開


本帖子中包含更多资源

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

x

评分

参与人数 4明经币 +4 收起 理由
USER2128 + 1 赞一个!
tigcat + 1 很给力!
start4444 + 1 很给力!
434939575 + 1 赞一个!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2022-9-5 17:26 | 显示全部楼层
lee50310 发表于 2022-9-5 16:45
理論上應該可以, 若是一般線弧圍成的封閉空間 則程式碼會多寫一些

  • ;;动态框绘制 By 明经通道 Gu_xl
  • (defun c:DynRect (/               GR         GetScreenCoords
  •              LL               LMTS         LOOP           LU             P1
  •              P2               P3         P4           PT             RL
  •              RU               S1         S2           S3             S4
  •             )
  •   ;;取得当前绘图区屏幕的左下角和右上角的坐标
  •   (defun GetScreenCoords
  •          (/ c03 c08 c04 c05 c07 c06 c09 c01 c02)
  •     (setq c03 (getvar "viewctr")
  •           c03 (trans c03 1 2)
  •           c08 (getvar "viewsize")
  •           c04 (getvar "screensize")
  •           c07 (car c04)
  •           c06 (cadr c04)
  •           c09 (/ (* c08 c07) c06)
  •           c01 (list (- (car c03) (* 0.5 c09)) (- (cadr c03) (* 0.5 c08)))
  •           c02 (list (+ (car c03) (* 0.5 c09)) (+ (cadr c03) (* 0.5 c08)))
  •           c01 (trans c01 2 1)
  •           c02 (trans c02 2 1)
  •     )
  •     (list c01 c02)
  •   )
  •   (setq loop t)
  •   (while loop
  •     (setq lmts (GetScreenCoords))
  •     (setq gr (grread t 15 0))
  •     (cond ((= 5 (car gr))
  •            (setq pt (cadr gr))
  •            (if (and
  •                  (setq s1 (ssget "F"
  •                                  (list pt (list (car pt) (cadadr lmts) 0))
  •                                  '((0 . "*line,arc,circle"))
  •                           )
  •                  ) ;_ 向上
  •                  (setq s2 (ssget "F"
  •                                  (list pt (list (car pt) (cadar lmts) 0))
  •                                  '((0 . "*line,arc,circle"))
  •                           )
  •                  ) ;_ 向下
  •                  (setq s3 (ssget "F"
  •                                  (list pt (list (caar lmts) (cadr pt) 0))
  •                                  '((0 . "*line,arc,circle"))
  •                           )
  •                  ) ;_ 向左
  •                  (setq s4 (ssget "F"
  •                                  (list pt (list (caadr lmts) (cadr pt) 0))
  •                                  '((0 . "*line,arc,circle"))
  •                           )
  •                  ) ;_ 向右
  •                )
  •              (progn
  •                (setq p1 (trans (cadar (cdddar (ssnamex s1))) 0 1)) ;_ 上点
  •                (setq p2 (trans (cadar (cdddar (ssnamex s2))) 0 1)) ;_ 下点
  •                (setq p3 (trans (cadar (cdddar (ssnamex s3))) 0 1)) ;_ 左点
  •                (setq p4 (trans (cadar (cdddar (ssnamex s4))) 0 1)) ;_ 右点
  •                (setq ll (apply 'mapcar (cons 'min (list p1 p2 p3 p4)))) ;_ 左下角点
  •                (setq ru (apply 'mapcar (cons 'max (list p1 p2 p3 p4)))) ;_ 右上角点
  •                (setq lu (list (car ll) (cadr ru) 0)) ;_ 左上角点
  •                (setq rl (list (car ru) (cadr ll) 0)) ;_ 右下角点
  •                (redraw)
  •                (grdraw ll lu 1)
  •                (grdraw lu ru 1)
  •                (grdraw ru rl 1)
  •                (grdraw rl ll 1)
  •              )
  •              (redraw)
  •            )
  •           )
  •           ((= 3 (car gr))
  •            (setq loop nil)
  •            (command "_rectang" "_non" ll "_non" ru)
  •           )
  •     )
  •   )
  •   (redraw)
  •   (princ)
  • )


回复 支持 2 反对 0

使用道具 举报

发表于 2022-9-5 17:28 | 显示全部楼层
zj20190405 发表于 2022-9-5 17:26
  • ;;动态框绘制 By 明经通道 Gu_xl
  • (defun cynRect (/               GR         GetScreenC ...

  • 院长之前写过一个这样的程序,但是不能圆弧和斜角.只能规矩的矩形和长方形
    发表于 2022-9-5 11:45 | 显示全部楼层
    厲害喔!
    線和框的設定,能設定嗎?
    发表于 2022-9-5 12:07 | 显示全部楼层
    有点小众,通过什么方法判断外框?射线?可以选中外框再进行点和外框的相对位置判断。如果是负责多线段封闭图形不知道可不可以
    发表于 2022-9-5 12:41 | 显示全部楼层
    老大能这样拾取吗,并且显示出来,而且拾取的空间不要多段线,只要是线段弧形围成的封闭空间。

    本帖子中包含更多资源

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

    x
     楼主| 发表于 2022-9-5 16:34 | 显示全部楼层
    p-3-ianlcc 发表于 2022-9-5 11:45
    厲害喔!
    線和框的設定,能設定嗎?

    當然可以,只是測試版無此功能
     楼主| 发表于 2022-9-5 16:45 | 显示全部楼层
    zj20190405 发表于 2022-9-5 12:41
    老大能这样拾取吗,并且显示出来,而且拾取的空间不要多段线,只要是线段弧形围成的封闭空间。

    理論上應該可以, 若是一般線弧圍成的封閉空間 則程式碼會多寫一些
     楼主| 发表于 2022-9-5 16:49 | 显示全部楼层
    本帖最后由 lee50310 于 2022-9-5 17:15 编辑
    liuhe 发表于 2022-9-5 12:07
    有点小众,通过什么方法判断外框?射线?可以选中外框再进行点和外框的相对位置判断。如果是负责多线段封闭 ...

    用grread函數
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

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

    GMT+8, 2024-5-2 00:09 , Processed in 1.421681 second(s), 29 queries , Gzip On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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