<*** 移動滑鼠-->動態判別矩形框區域 畫線 ***>
本帖最后由 lee50310 于 2022-9-6 04:18 编辑移動滑鼠-->動態判別矩形框區域 畫線
這個是之前在此論壇上看到 有人提問
覺得很有趣,試寫了一個 終於完成
發個測試版讓各位體驗一下吧!
測試版:目前只適用封閉矩形物 偏移距離已被固定=20 dbk.fas
執行指令:dbk
移動滑鼠: 游標在封閉矩形物 內 靠 上,下,左,右,中間 依偏移距暫顯要畫的線段(粉紅色線)
左擊滑鼠: 畫出線段(綠線)
右擊滑鼠: 離開
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:26
[*];;动态框绘制 By 明经通道 Gu_xl
[*](defun cynRect (/ GR GetScreenC ...
院长之前写过一个这样的程序,但是不能圆弧和斜角.只能规矩的矩形和长方形 这个厉害! 厲害喔!
線和框的設定,能設定嗎?
有点小众,通过什么方法判断外框?射线?可以选中外框再进行点和外框的相对位置判断。如果是负责多线段封闭图形不知道可不可以 老大能这样拾取吗,并且显示出来,而且拾取的空间不要多段线,只要是线段弧形围成的封闭空间。
p-3-ianlcc 发表于 2022-9-5 11:45
厲害喔!
線和框的設定,能設定嗎?
當然可以,只是測試版無此功能 zj20190405 发表于 2022-9-5 12:41
老大能这样拾取吗,并且显示出来,而且拾取的空间不要多段线,只要是线段弧形围成的封闭空间。
理論上應該可以, 若是一般線弧圍成的封閉空間 則程式碼會多寫一些 本帖最后由 lee50310 于 2022-9-5 17:15 编辑
liuhe 发表于 2022-9-5 12:07
有点小众,通过什么方法判断外框?射线?可以选中外框再进行点和外框的相对位置判断。如果是负责多线段封闭 ...
用grread函數
页:
[1]
2