尘缘一生 发表于 2024-7-20 18:26:44

从来人生疲画弧

本帖最后由 尘缘一生 于 2024-7-20 19:41 编辑





;;两点圆弧(以弧长决定方式的探索)---
;;Modify by SLdesign V3.0 尘缘一生 QQ:15290049 2024年7月20号
(defun c:2parc (/ p1 p2 l s ang aa)
(defun inputbox-arc (dval / dcl_id dis)
    (defun inputbox-dcl-arc (/ lst_str)
      (setq lst_str
      (list
          "inputbox:dialog {"
          (strcat "label=\"" (slmsg "输入弧长" "块┓" "Input arc length") "\"" ";")
          "initial_focus=tile0;"
          $boxed_row
          (strcat "label=\"" (slmsg "弧长定式画弧" "┓﹚Α礶┓" "Determine the arc drawing method based on the arc length") "\";")
          ":button {label=\"2Pd<--\"; key=\"2-p-d\";}"
          ":tile {}"
          ":edit_box {"
          (strcat "label=\"" (slmsg "弧长 >=" "┓ >=" "arc length >=") "\"" ";")
          "key=\"tile0\";"
          (strcat "value=\"" dval "\"" ";")
          "edit_width=8;"
          "allow_accept=true;"
          "}}"
          $row
          ":tile {}:tile {}"
          $okbt $canbt
          ":tile {}:tile {}"
          "}}"
      )
      )
      (dcl2lisp lst_str)
    )
    ;;---------
    (defun doddarc ()
      (setq Restr (rtos (* 0.9 (atof dval)) 2 2))
      (set_tile "tile0" Restr)
      (done_dialog 1)
    )
    ;;---------
    (setq dcl_id (load_dialog (inputbox-dcl-arc)))
    (new_dialog "inputbox" dcl_id)
    (action_tile "tile0" "(setq Restr $value)")
    (action_tile "2-p-d" "(doddarc)")
    (action_tile "accept" "(done_dialog 1)")
    (action_tile "cancel" "(done_dialog 0)");;退出
    (start_dialog)
    (slunloaddcl dcl_id)
    Restr ;;返回字符串
)
;;---------------
(setq p1 (getpoint (slmsg "\n 圆弧第一点:" "\n 蛾┓材滁翴:" "\n First point of arc:"))
    p2 (getpoint p1 (slmsg "\n 圆弧第二点:" "\n 蛾┓材翴:" "\n Second point of arc:"))
)
(setq l (rtos (* (distance p1 p2) (getvar "dimlfac")) 2 2))
(setq s (atof (strcase (inputbox-arc l))))
(setq l (atof l))
(cond
    ((< s l)
      (2p-dd-arc p1 p2)
    )
    ((= s l)
      (command "arc" p1 "e" p2 "d")
    )
    ((> s l)
      (setq ang (4dire p1))
      (if (or (= ang 0) (= ang 3pi2))
      (setq aa nil)
      (setq aa t)
      )
      (2p-d-arc p1 p2 (/ s (getvar "dimlfac")) aa)
    )
)
)
;;两点动态圆弧------(一级)-----
;;Modify by SLdesign V3.0 尘缘一生 QQ:15290049 2024年7月20号
(defun 2p-dd-arc (p1 p2 / p3 nam nam1 obj nam2 ent ent1 loop bb pt f3 f8 d ang ang0 s0 s s1 s2 s3 kk)
(command "_.undo" "be")
(setq s0
    (slmsg
      "\n->动态圆弧 [信息开关(TAB)/扑捉(F3)/正交弧(F8)/定位(Left-Right-Other keys)]"
      "\n->笆篈蛾┓ [獺秨闽(TAB)/汲(F3)/タユ┓(F8)/﹚(Left-Right-Other keys)]"
      "\n->Dynamic Arc"
    )
)
(setq p3 (polar (sl:mid p1 p2) (setq ang0 (+ (angle p1 p2) pi2)) 10.0) s1 "mm" s2 (slmsg "..开.." "..秨.." "..open..") s3 (slmsg "..关.." "..闽.." "..close.."))
(make-arc p1 p3 p2)
(setq nam (entlast))
(slmkwz (strcat "R=" (rtos (* (getvar "DIMLFAC") (dxf1 nam 40))) s1) p3 3.0 0 nil nil nil 6 "m")
(setq ent (entget (setq nam1 (entlast))) obj (en2obj nam1))
(slmkwz (strcat "L=" (rtos (* (getvar "DIMLFAC") (sllen nam))) s1) p3 3.0 0 nil nil nil 6 "m")
(setq ent1 (entget (setq nam2 (entlast))))
(setq loop t f3 (getvar "OSMODE") f8 (getvar "ORTHOMODE") s s2)
(princ (strcat s0 "(" s ")"))
(while loop
    (setq bb (grread t 15 2))
    (setq pt (cadr bb) d (p2uu 20))
    (cond
      ((equal bb '(2 6));F3切换捕捉开关
      (cond
          ((and (< f3 16384) (/= f3 0))
            (setq f3 (+ f3 16384))
            (prompt (slmsg "\n <对象捕捉 关>" "\n <癸禜 闽>" "\n <OSnap Off>"))
          )
          ((or (= f3 0) (>= f3 16384))
            (setq f3 16383)
            (prompt (slmsg "\n <对象捕捉 开>" "\n <癸禜 秨>" "\n <OSnap On>"))
          )
      )
      (setvar "OSMODE" f3)(redraw)
      )   
      ((equal bb '(2 15))    ;F8切换正交开关
      (if (= f8 0)
          (progn (setq f8 1) (prompt (slmsg "\n <正交 开>" "\n <タユ 秨>" "\n <Orth open>")))
          (progn (setq f8 0) (prompt (slmsg "\n <正交 关>" "\n <タユ 闽>" "\n <Orth off>")))
      )
      (setvar "ORTHOMODE" f8) (redraw)
      )
      ((= (car bb) 5)
      (redraw)
      (if (and (<= f3 16384) (> f3 0))
          (setq pt (slosnappt nam pt) kk t)
      )
      (if (= f8 1)
          (setq pt (pertolinecz pt p3 (polar p3 ang0 50)))
      )
      (grdraw (sl:mid p1 p2) pt 3 2)
      (setq pt (trans pt 1 0))
      (if (sl:pts-onLine (list p1 pt p2))
          (setq pt p3)
      )
      (entdel nam)
      (make-arc p1 pt p2)
      (setq nam (entlast))
      (if (= s s2)
          (progn
            (setq ang (angle-sharp (angle '(0.0 0.0 0.0) (vlax-curve-getFirstDeriv nam (vlax-curve-getparamatpoint nam pt)))))
            (setq pt (polar pt (+ ang pi2) (* 0.7 d)))
            (entmod (emod (emod (emod (emod (emod ent 1 (strcat "R=" (rtos (* (getvar "DIMLFAC") (dxf1 nam 40))) s1)) 10 pt) 11 pt) 40 d) 50 ang))
            (setq pt (polar pt (+ ang pi2) (* 1.3 d)))
            (entmod (emod (emod (emod (emod (emod ent1 1 (strcat "L=" (rtos (* (getvar "DIMLFAC") (sllen nam))) s1)) 10 pt) 11 pt) 40 d) 50 ang))
          )
      )
      )
      ((member bb '((2 9))) ;;table 信息关
      (entdel nam1) (entdel nam2)
      (if (not (vlax-erased-p obj)) (setq s s2) (setq s s3))
      (princ (strcat s0 "(" s ")"))
      )
      ((or t (equal (car bb) 3) (member (car bb) '(11 25)));;左、右、其余键
      (setq loop nil)
      )
    )
)
(if kk (sl:erase (ssget "X" (list (cons 8 "f-i-n-d")))))
(command "_.undo" "e")
(redraw)
)
;;两点+弧长+方向画圆弧-------(一级)-----
;; s 弧长 ; aa 方向 aa=n nil 逆时针 aa=s 顺时针
;;Modify by SLdesign V3.0 尘缘一生 QQ:15290049 2024年7月20号
(defun 2p-d-arc (p1 p2 s aa / a l x xx fx flx r c c1 c2)
(setq a (angle p1 p2))
(setq l (distance p1 p2))
(setq x 2)
(setq fx (- (/ (sin (* 0.5 x)) x) (/ (* 0.5 l) s)))
(setq flx (/ (- (* 0.5 x (cos (* 0.5 x))) (sin (* 0.5 x))) (* x x)))
(setq xx (- x (/ fx flx)))
(while (> (abs (- x xx)) 0.0000000001)
    (setq x xx)
    (setq fx (- (/ (sin (* 0.5 x)) x) (/ (* 0.5 l) s)))
    (setq flx (/ (- (* 0.5 x (cos (* 0.5 x))) (sin (* 0.5 x))) (* x x)))
    (setq xx (- x (/ fx flx)))
)
(setq r (/ s xx))
(if (= aa nil) (setq aa "N") (setq aa "S"))
(cond
    ((= aa "N")
      (setq c (- (+ a pi2) (* x 0.5)))
      (setq cen (polar p1 c r))
      (setq c1 (+ c pi))
      (setq c2 (+ c1 x))
      (vla-addarc *Model-Space* (vlax-3d-point cen) r c1 c2)
    )
    ((= aa "S")
      (setq c (- (+ a (* 0.5 x)) pi2))
      (setq cen (polar p1 c r))
      (setq c1 (- (+ c pi) x))
      (setq c2 (+ c pi))
      (vla-addarc *Model-Space* (vlax-3d-point cen) r c1 c2)
    )
)
(entlast)
)

moranyuyan 发表于 2024-7-26 11:40:54

moranyuyan 发表于 2024-7-22 06:36
命令: 2PARC
; 错误: no function definition: SLMSG



不明白

ynhh 发表于 2024-7-25 11:34:53

Error: no function definition: SLMSG

找不到MSG

试一下用不成啊


尘缘一生 发表于 2024-7-20 21:02:48

tranque 发表于 2024-7-20 19:52
尘缘前辈最近很高产

最近主要是旧程序在改写,

tranque 发表于 2024-7-20 19:52:47

尘缘前辈最近很高产

wangsr 发表于 2024-7-20 22:29:32

谢谢分享。

tigcat 发表于 2024-7-20 23:16:03

谢谢分享!

qazxswk 发表于 2024-7-21 01:00:26

我感觉我画直线比较多:lol

429014673 发表于 2024-7-21 08:39:22

多是画特定值相切弧,不画任意弧

Bao_lai 发表于 2024-7-21 10:43:31

老爷子好诗词,高技术。

qazxswk 发表于 2024-7-21 11:09:18

Bao_lai 发表于 2024-7-21 10:43
老爷子好诗词,高技术。
还老爷子,人家正青春:lol

guankuiwu 发表于 2024-7-21 12:15:43

:lol厉害科啊。666
页: [1] 2 3
查看完整版本: 从来人生疲画弧