明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 967|回复: 23

[经验] 从来人生疲画弧

  [复制链接]
发表于 2024-7-20 18:26:44 | 显示全部楼层 |阅读模式
本帖最后由 尘缘一生 于 2024-7-20 19:41 编辑




  1. ;;两点圆弧(以弧长决定方式的探索)---
  2. ;;Modify by SLdesign V3.0 尘缘一生 QQ:15290049 2024年7月20号
  3. (defun c:2parc (/ p1 p2 l s ang aa)
  4.   (defun inputbox-arc (dval / dcl_id dis)
  5.     (defun inputbox-dcl-arc (/ lst_str)
  6.       (setq lst_str
  7.         (list
  8.           "inputbox:dialog {"
  9.           (strcat "label="" (slmsg "输入弧长" "块┓" "Input arc length") """ ";")
  10.           "initial_focus=tile0;"
  11.           $boxed_row
  12.           (strcat "label="" (slmsg "弧长定式画弧" "┓﹚Α礶┓" "Determine the arc drawing method based on the arc length") "";")
  13.           ":button {label="2Pd<--"; key="2-p-d";}"
  14.           ":tile {}"
  15.           ":edit_box {"
  16.           (strcat "label="" (slmsg "弧长 >=" "┓ >=" "arc length >=") """ ";")
  17.           "key="tile0";"
  18.           (strcat "value="" dval """ ";")
  19.           "edit_width=8;"
  20.           "allow_accept=true;"
  21.           "}}"
  22.           $row
  23.           ":tile {}:tile {}"
  24.           $okbt $canbt
  25.           ":tile {}:tile {}"
  26.           "}}"
  27.         )
  28.       )
  29.       (dcl2lisp lst_str)
  30.     )
  31.     ;;---------
  32.     (defun doddarc ()
  33.       (setq Restr (rtos (* 0.9 (atof dval)) 2 2))
  34.       (set_tile "tile0" Restr)
  35.       (done_dialog 1)
  36.     )
  37.     ;;---------
  38.     (setq dcl_id (load_dialog (inputbox-dcl-arc)))
  39.     (new_dialog "inputbox" dcl_id)
  40.     (action_tile "tile0" "(setq Restr $value)")
  41.     (action_tile "2-p-d" "(doddarc)")
  42.     (action_tile "accept" "(done_dialog 1)")
  43.     (action_tile "cancel" "(done_dialog 0)")  ;;退出
  44.     (start_dialog)
  45.     (slunloaddcl dcl_id)
  46.     Restr ;;返回字符串
  47.   )
  48.   ;;---------------
  49.   (setq p1 (getpoint (slmsg "\n 圆弧第一点:" "\n 蛾┓材滁翴:" "\n First point of arc:"))
  50.     p2 (getpoint p1 (slmsg "\n 圆弧第二点:" "\n 蛾┓材翴:" "\n Second point of arc:"))
  51.   )
  52.   (setq l (rtos (* (distance p1 p2) (getvar "dimlfac")) 2 2))
  53.   (setq s (atof (strcase (inputbox-arc l))))
  54.   (setq l (atof l))
  55.   (cond
  56.     ((< s l)
  57.       (2p-dd-arc p1 p2)
  58.     )
  59.     ((= s l)
  60.       (command "arc" p1 "e" p2 "d")
  61.     )
  62.     ((> s l)
  63.       (setq ang (4dire p1))
  64.       (if (or (= ang 0) (= ang 3pi2))
  65.         (setq aa nil)
  66.         (setq aa t)
  67.       )
  68.       (2p-d-arc p1 p2 (/ s (getvar "dimlfac")) aa)
  69.     )
  70.   )
  71. )
  72. ;;两点动态圆弧------(一级)-----
  73. ;;Modify by SLdesign V3.0 尘缘一生 QQ:15290049 2024年7月20号
  74. (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)
  75.   (command "_.undo" "be")
  76.   (setq s0
  77.     (slmsg
  78.       "\n->动态圆弧 [信息开关(TAB)/扑捉(F3)/正交弧(F8)/定位(Left-Right-Other keys)]"
  79.       "\n->笆篈蛾┓ [獺秨闽(TAB)/汲(F3)/タユ┓(F8)/﹚&#59284;(Left-Right-Other keys)]"
  80.       "\n->Dynamic Arc[Infor Switch(TAB)/Osnap(F3)/Orth Arc(F8)/Location(Left-Right-Other keys)]"
  81.     )
  82.   )
  83.   (setq p3 (polar (sl:mid p1 p2) (setq ang0 (+ (angle p1 p2) pi2)) 10.0) s1 "mm" s2 (slmsg "..开.." "..秨.." "..open..") s3 (slmsg "..关.." "..闽.." "..close.."))
  84.   (make-arc p1 p3 p2)
  85.   (setq nam (entlast))
  86.   (slmkwz (strcat "R=" (rtos (* (getvar "DIMLFAC") (dxf1 nam 40))) s1) p3 3.0 0 nil nil nil 6 "m")
  87.   (setq ent (entget (setq nam1 (entlast))) obj (en2obj nam1))
  88.   (slmkwz (strcat "L=" (rtos (* (getvar "DIMLFAC") (sllen nam))) s1) p3 3.0 0 nil nil nil 6 "m")
  89.   (setq ent1 (entget (setq nam2 (entlast))))
  90.   (setq loop t f3 (getvar "OSMODE") f8 (getvar "ORTHOMODE") s s2)
  91.   (princ (strcat s0 "(" s ")"))
  92.   (while loop
  93.     (setq bb (grread t 15 2))
  94.     (setq pt (cadr bb) d (p2uu 20))
  95.     (cond
  96.       ((equal bb '(2 6));F3切换捕捉开关
  97.         (cond
  98.           ((and (< f3 16384) (/= f3 0))
  99.             (setq f3 (+ f3 16384))
  100.             (prompt (slmsg "\n <对象捕捉 关>" "\n <癸禜 闽>" "\n <OSnap Off>"))
  101.           )
  102.           ((or (= f3 0) (>= f3 16384))
  103.             (setq f3 16383)
  104.             (prompt (slmsg "\n <对象捕捉 开>" "\n <癸禜 秨>" "\n <OSnap On>"))
  105.           )
  106.         )
  107.         (setvar "OSMODE" f3)(redraw)
  108.       )   
  109.       ((equal bb '(2 15))    ;F8切换正交开关
  110.         (if (= f8 0)
  111.           (progn (setq f8 1) (prompt (slmsg "\n <正交 开>" "\n <タユ 秨>" "\n <Orth open>")))
  112.           (progn (setq f8 0) (prompt (slmsg "\n <正交 关>" "\n <タユ 闽>" "\n <Orth off>")))
  113.         )
  114.         (setvar "ORTHOMODE" f8) (redraw)
  115.       )
  116.       ((= (car bb) 5)
  117.         (redraw)
  118.         (if (and (<= f3 16384) (> f3 0))
  119.           (setq pt (slosnappt nam pt) kk t)
  120.         )
  121.         (if (= f8 1)
  122.           (setq pt (pertolinecz pt p3 (polar p3 ang0 50)))
  123.         )
  124.         (grdraw (sl:mid p1 p2) pt 3 2)
  125.         (setq pt (trans pt 1 0))
  126.         (if (sl:pts-onLine (list p1 pt p2))
  127.           (setq pt p3)
  128.         )
  129.         (entdel nam)
  130.         (make-arc p1 pt p2)
  131.         (setq nam (entlast))
  132.         (if (= s s2)
  133.           (progn
  134.             (setq ang (angle-sharp (angle '(0.0 0.0 0.0) (vlax-curve-getFirstDeriv nam (vlax-curve-getparamatpoint nam pt)))))
  135.             (setq pt (polar pt (+ ang pi2) (* 0.7 d)))
  136.             (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))
  137.             (setq pt (polar pt (+ ang pi2) (* 1.3 d)))
  138.             (entmod (emod (emod (emod (emod (emod ent1 1 (strcat "L=" (rtos (* (getvar "DIMLFAC") (sllen nam))) s1)) 10 pt) 11 pt) 40 d) 50 ang))
  139.           )
  140.         )
  141.       )
  142.       ((member bb '((2 9))) ;;table 信息关
  143.         (entdel nam1) (entdel nam2)
  144.         (if (not (vlax-erased-p obj)) (setq s s2) (setq s s3))
  145.         (princ (strcat s0 "(" s ")"))
  146.       )
  147.       ((or t (equal (car bb) 3) (member (car bb) '(11 25)));;左、右、其余键
  148.         (setq loop nil)
  149.       )
  150.     )
  151.   )
  152.   (if kk (sl:erase (ssget "X" (list (cons 8 "f-i-n-d")))))
  153.   (command "_.undo" "e")
  154.   (redraw)
  155. )
  156. ;;两点+弧长+方向  画圆弧-------(一级)-----
  157. ;; s 弧长 ; aa 方向 aa=n nil 逆时针 aa=s 顺时针
  158. ;;Modify by SLdesign V3.0 尘缘一生 QQ:15290049 2024年7月20号
  159. (defun 2p-d-arc (p1 p2 s aa / a l x xx fx flx r c c1 c2)
  160.   (setq a (angle p1 p2))
  161.   (setq l (distance p1 p2))
  162.   (setq x 2)
  163.   (setq fx (- (/ (sin (* 0.5 x)) x) (/ (* 0.5 l) s)))
  164.   (setq flx (/ (- (* 0.5 x (cos (* 0.5 x))) (sin (* 0.5 x))) (* x x)))
  165.   (setq xx (- x (/ fx flx)))
  166.   (while (> (abs (- x xx)) 0.0000000001)
  167.     (setq x xx)
  168.     (setq fx (- (/ (sin (* 0.5 x)) x) (/ (* 0.5 l) s)))
  169.     (setq flx (/ (- (* 0.5 x (cos (* 0.5 x))) (sin (* 0.5 x))) (* x x)))
  170.     (setq xx (- x (/ fx flx)))
  171.   )
  172.   (setq r (/ s xx))
  173.   (if (= aa nil) (setq aa "N") (setq aa "S"))
  174.   (cond
  175.     ((= aa "N")
  176.       (setq c (- (+ a pi2) (* x 0.5)))
  177.       (setq cen (polar p1 c r))
  178.       (setq c1 (+ c pi))
  179.       (setq c2 (+ c1 x))
  180.       (vla-addarc *Model-Space* (vlax-3d-point cen) r c1 c2)
  181.     )
  182.     ((= aa "S")
  183.       (setq c (- (+ a (* 0.5 x)) pi2))
  184.       (setq cen (polar p1 c r))
  185.       (setq c1 (- (+ c pi) x))
  186.       (setq c2 (+ c pi))
  187.       (vla-addarc *Model-Space* (vlax-3d-point cen) r c1 c2)
  188.     )
  189.   )
  190.   (entlast)
  191. )


本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2024-7-26 11:40:54 | 显示全部楼层
moranyuyan 发表于 2024-7-22 06:36
命令: 2PARC
; 错误: no function definition: SLMSG

不明白
发表于 2024-7-25 11:34:53 | 显示全部楼层
Error: no function definition: SLMSG

找不到  MSG

试一下用不成啊


 楼主| 发表于 2024-7-20 21:02:48 | 显示全部楼层
tranque 发表于 2024-7-20 19:52
尘缘前辈最近很高产

最近主要是旧程序在改写,
发表于 2024-7-20 19:52:47 | 显示全部楼层
尘缘前辈最近很高产
发表于 2024-7-21 01:00:26 | 显示全部楼层
我感觉我画直线比较多
发表于 2024-7-21 08:39:22 | 显示全部楼层
多是画特定值相切弧,不画任意弧
发表于 2024-7-21 10:43:31 来自手机 | 显示全部楼层
老爷子好诗词,高技术。
发表于 2024-7-21 11:09:18 | 显示全部楼层
Bao_lai 发表于 2024-7-21 10:43
老爷子好诗词,高技术。

还老爷子,人家正青春
发表于 2024-7-21 12:15:43 | 显示全部楼层
厉害科啊。666
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-8 08:25 , Processed in 0.246569 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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