lee50310 发表于 2022-9-5 11:28:41

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

本帖最后由 lee50310 于 2022-9-6 04:18 编辑

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


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

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


zj20190405 发表于 2022-9-5 17:26:17

lee50310 发表于 2022-9-5 16:45
理論上應該可以, 若是一般線弧圍成的封閉空間 則程式碼會多寫一些


[*];;动态框绘制 By 明经通道 Gu_xl

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif(defun c:DynRect (/               GR         GetScreenCoords

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif             LL               LMTS         LOOP         LU             P1

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif             P2               P3         P4         PT             RL

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif             RU               S1         S2         S3             S4

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif            )

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif;;取得当前绘图区屏幕的左下角和右上角的坐标

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif(defun GetScreenCoords

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif         (/ c03 c08 c04 c05 c07 c06 c09 c01 c02)

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif    (setq c03 (getvar "viewctr")

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif          c03 (trans c03 1 2)

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif          c08 (getvar "viewsize")

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif          c04 (getvar "screensize")

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif          c07 (car c04)

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif          c06 (cadr c04)

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif          c09 (/ (* c08 c07) c06)

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif          c01 (list (- (car c03) (* 0.5 c09)) (- (cadr c03) (* 0.5 c08)))

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif          c02 (list (+ (car c03) (* 0.5 c09)) (+ (cadr c03) (* 0.5 c08)))

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif          c01 (trans c01 2 1)

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif          c02 (trans c02 2 1)

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif    )

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif    (list c01 c02)

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif)

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif(setq loop t)

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif(while loop

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif    (setq lmts (GetScreenCoords))

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif    (setq gr (grread t 15 0))

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif    (cond ((= 5 (car gr))

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif         (setq pt (cadr gr))

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif         (if (and

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif               (setq s1 (ssget "F"

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif                                 (list pt (list (car pt) (cadadr lmts) 0))

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif                                 '((0 . "*line,arc,circle"))

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif                        )

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif               ) ;_ 向上

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif               (setq s2 (ssget "F"

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif                                 (list pt (list (car pt) (cadar lmts) 0))

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif                                 '((0 . "*line,arc,circle"))

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif                        )

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif               ) ;_ 向下

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif               (setq s3 (ssget "F"

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif                                 (list pt (list (caar lmts) (cadr pt) 0))

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif                                 '((0 . "*line,arc,circle"))

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif                        )

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif               ) ;_ 向左

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif               (setq s4 (ssget "F"

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif                                 (list pt (list (caadr lmts) (cadr pt) 0))

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif                                 '((0 . "*line,arc,circle"))

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif                        )

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif               ) ;_ 向右

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif               )

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif             (progn

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif               (setq p1 (trans (cadar (cdddar (ssnamex s1))) 0 1)) ;_ 上点

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif               (setq p2 (trans (cadar (cdddar (ssnamex s2))) 0 1)) ;_ 下点

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif               (setq p3 (trans (cadar (cdddar (ssnamex s3))) 0 1)) ;_ 左点

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif               (setq p4 (trans (cadar (cdddar (ssnamex s4))) 0 1)) ;_ 右点

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif               (setq ll (apply 'mapcar (cons 'min (list p1 p2 p3 p4)))) ;_ 左下角点

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif               (setq ru (apply 'mapcar (cons 'max (list p1 p2 p3 p4)))) ;_ 右上角点

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif               (setq lu (list (car ll) (cadr ru) 0)) ;_ 左上角点

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif               (setq rl (list (car ru) (cadr ll) 0)) ;_ 右下角点

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif               (redraw)

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif               (grdraw ll lu 1)

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif               (grdraw lu ru 1)

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif               (grdraw ru rl 1)

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif               (grdraw rl ll 1)

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif             )

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif             (redraw)

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif         )

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif          )

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif          ((= 3 (car gr))

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif         (setq loop nil)

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif         (command "_rectang" "_non" ll "_non" ru)

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif          )

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif    )

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif)

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif(redraw)

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif(princ)

[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif)


zj20190405 发表于 2022-9-5 17:28:06

zj20190405 发表于 2022-9-5 17:26
[*];;动态框绘制 By 明经通道 Gu_xl

[*](defun cynRect (/               GR         GetScreenC ...

院长之前写过一个这样的程序,但是不能圆弧和斜角.只能规矩的矩形和长方形

434939575 发表于 2022-9-5 11:42:10

这个厉害!

p-3-ianlcc 发表于 2022-9-5 11:45:27

厲害喔!
線和框的設定,能設定嗎?

liuhe 发表于 2022-9-5 12:07:03

有点小众,通过什么方法判断外框?射线?可以选中外框再进行点和外框的相对位置判断。如果是负责多线段封闭图形不知道可不可以

zj20190405 发表于 2022-9-5 12:41:28

老大能这样拾取吗,并且显示出来,而且拾取的空间不要多段线,只要是线段弧形围成的封闭空间。

lee50310 发表于 2022-9-5 16:34:13

p-3-ianlcc 发表于 2022-9-5 11:45
厲害喔!
線和框的設定,能設定嗎?

當然可以,只是測試版無此功能

lee50310 发表于 2022-9-5 16:45:53

zj20190405 发表于 2022-9-5 12:41
老大能这样拾取吗,并且显示出来,而且拾取的空间不要多段线,只要是线段弧形围成的封闭空间。

理論上應該可以, 若是一般線弧圍成的封閉空間 則程式碼會多寫一些

lee50310 发表于 2022-9-5 16:49:40

本帖最后由 lee50310 于 2022-9-5 17:15 编辑

liuhe 发表于 2022-9-5 12:07
有点小众,通过什么方法判断外框?射线?可以选中外框再进行点和外框的相对位置判断。如果是负责多线段封闭 ...
用grread函數
页: [1] 2
查看完整版本: <*** 移動滑鼠-->動態判別矩形框區域 畫線 ***>