设为首页收藏本站

晓东CAD家园-论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 145|回复: 1

[工具] 9套参数快速绘制圆弧(第二版)

[复制链接]

签到天数: 1194 天

连续签到: 53 天

[LV.10]以坛为家III

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-8-9 20:30:34 | 显示全部楼层 |阅读模式
  • 插件名称 : 快速圆弧
  • 作  者 : newer
  • 运行环境 :XDRX API OpenDCL 晓东工具箱 
  • 发布时间 :2018-08-09
  • 命令名称 :xdtb_fastarc
  • 插件介绍 :9套参数快速绘制圆弧
  • 备  注 : (点击图片可以放大)
(点击图片可以放大)

晓东温馨提示 1、运行环境为 晓东工具箱XDRX API 的插件,请下载最新版本的 晓东工具箱XDRX API开发环境 一键安装
2、在ACAD中如何加载插件,请看 论坛插件使用方法
3、如果您有要求需要定制插件,请到 编程申请 论坛发帖求助

插件详细内容

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
  1. (defun c:XDTB_FASTARC (/        #endpoint          #length  #midpoint
  2.                        #startpoint         an          an1           arclen
  3.                        box        c         cen          chordHeight
  4.                        chordlen        code         ean          endR           flx
  5.                        fx        g         h          ii           iii
  6.                        info        l         p1          p2           p3
  7.                        pts        r         ret          san           ss
  8.                        startR        TextButton2          UpperLeftY
  9.                        x        xx
  10.                       )
  11.   (setq        xd-fast-arc-odcl
  12.          '
  13.           ("YWt6A8QpAADRDw4hBuKTJLUxbT9igPQmWCRva2v99xGP3u+saPRZXbi6iX1sHapuztZWHJztDo+c"
  14.            "P915URTcYDLCBo7/9/H9T1jgihjClr9BvnrhaVFUhuVh28WNFdetEjdpzcXno4cIiElFRaEAobJq"
  15.            "1Pj5+O8wm/2TddD6CanL+X7C037YlnJrUvPcfTeg5W/ZA2ssFjp9xFZp2RVXSi9QN5lQCixQOBnD"
  16.            "2ZbgMEBZloCGtv34C/Njau/czARUE7p/9DcuIKHZFapLqS3Q7RQ0D1D3/cqVRdziCvVK1Do6SQxU"
  17.            "ikhhVPpM2kmJZddBdtlR+ZYEi3/SvxanlDIQd8jdaVMqC1FL13VDLsnyxgfID1Pq8J1am6tn3fgn"
  18.            "hxW2OotlLy69fAFqhtL/FYxDG13bEOLcqj+xlTjBAKALL6Eb/71fbYFsmwN8VQ+BFbJim1sz7qT7"
  19.            "DMZIC3Dfr4JZhDaqVTJItBlEm6FL4GpMneFHm/LhdoIqnrl8gQik3XWq7E9A20m4C9ZrMEN96lzE"
  20.            "q81mqLSRT8J/Wdap8S/xST6LGmC2a9bdfGG1KmKE10WaxlZBXA7wQFD9tMKhCNnjZUtwZTNVJaAA"
  21.            "kNTkXIQ+DK4VujrI3Gt1V2OY8cD5jJWXBraeFPXw5ZMeo17Lvb8JS6BXtOlHBtG4pWICK52z/MVT"
  22.            "fBFrBu2+dueRV0fTbYOenIZIrGKxG+bxnSZf4ipf5e1h42EQ8nlZDwadmmAyMKjdiuJqJTDvNwrm"
  23.            "vQbbmkasOOOlOWDEcNmXBvQixen42gTW9p/99Q2FjhTya5HyfaNK7GKb3y0zaCCELgaTA/9hdgIx"
  24.            "nhyFsFsvgekyIfOeX5kAWJDV9oHydH1Ra4+h4ogOx8PYCF41LZvlJLHJSZEHCS9z9o+Z776d3sVk"
  25.            "YwkzqpWsn0DmRBL9170U83n7UCLEwn4t6fkvJCPQOyQ5zWcYlxYUUGNKNWtTVDo7s//4Lipzq1wl"
  26.            "PQQihCFLinzY+ByO9/jUZ6QXVidy+MsthO8fGK67jlPmco1pTr9miBwHt76MjhG1nUeF9lqMs6fd"
  27.            "2yLpj+lSqH4LQCPpTwjXlm00wXge4eK/rrBZ5cKwWIvUp9Fd3ynhip0SrPUxSHtAd3XhqmTUHBLZ"
  28.            "3zgx2kp42ibuLP41oz/INZdPutHNx4NOI9Rr2DWX4SyNxyp82DVDOZcj9EtK49/j+Gy7HqbRne4g"
  29.            "gsVnwHftH4D7CfxPkruMbP+bvwxi1BoS2d8GX2SUP5DH4iEjrJXRZILAUHPjubqoLkKublJLSvPP"
  30.            "4/gc4Db3e9om7ix66ZzBdYSu28LQRoOWLNLfdj1Fc0tqvI41muC1h+sf0c2LB05nAPEPGQZS7LgP"
  31.            "ChR28m7o3S1zHUUbO0PvbHM2z17bdqC7gTeaPZGMxHBT/wmDrduKiGlskaem"
  32.           )
  33.   )
  34.   (defun c:快速圆弧/快速圆弧#OnInitialize (/)
  35.     (dcl-Control-SetEnabled TextButton2 nil) ; (dcl-Control-SetVisible
  36. ; TextButton2 nil)
  37.     (xdrx_sysvar_push '("orthomode" 0))
  38.     (princ)
  39.   )
  40.   ;|
  41.   (defun c:快速圆弧/快速圆弧#OnCancelClose (Reason /)
  42.     (dcl-form-close 快速圆弧/快速圆弧)
  43.     (xdrx_sysvar_pop)
  44.   )
  45.   (defun c:快速圆弧/快速圆弧#OnCancel (/)
  46.     (dcl-form-close 快速圆弧/快速圆弧)
  47.     (xdrx_sysvar_pop)
  48.   )
  49.   (defun c:快速圆弧/快速圆弧#OnClose (UpperLeftX UpperLeftY /)
  50.     (dcl-form-close 快速圆弧/快速圆弧)
  51.     (xdrx_sysvar_pop)
  52.   )
  53.   |;
  54.   (defun c:快速圆弧/快速圆弧/TextButton1#OnClicked (/)
  55.     (dcl-sendstring "(_drawarc 0)\n")
  56.     (princ)
  57.   )
  58.   (defun c:快速圆弧/快速圆弧/TextButton2#OnClicked (/)
  59.     (dcl-sendstring "(_drawarc 1)\n")
  60.     (princ)
  61.   )
  62.   (defun c:快速圆弧/快速圆弧/TextButton5#OnClicked (/)
  63.     (dcl-sendstring "(_drawarc 2)\n")
  64.     (princ)
  65.   )
  66.   (defun c:快速圆弧/快速圆弧/TextButton6#OnClicked (/)
  67.     (dcl-sendstring "(_drawarc 3)\n")
  68.     (princ)
  69.   )
  70.   (defun c:快速圆弧/快速圆弧/TextButton3#OnClicked (/)
  71.     (dcl-sendstring "(_drawarc 4)\n")
  72.     (princ)
  73.   )
  74.   (defun c:快速圆弧/快速圆弧/TextButton4#OnClicked (/)
  75.     (dcl-sendstring "(_drawarc 5)\n")
  76.     (princ)
  77.   )
  78.   (defun c:快速圆弧/快速圆弧/TextButton7#OnClicked (/)
  79.     (dcl-sendstring "(_drawarc 6)\n")
  80.     (princ)
  81.   )
  82.   (defun c:快速圆弧/快速圆弧/TextButton10#OnClicked (/)
  83.     (dcl-sendstring "(_drawarc 7)\n")
  84.     (princ)
  85.   )
  86.   (defun c:快速圆弧/快速圆弧/TextButton8#OnClicked (/)
  87.     (dcl-sendstring "(_drawarc 8)\n")
  88.     (princ)
  89.   )
  90.   (defun c:快速圆弧/快速圆弧/TextButton9#OnClicked (/)
  91.     (dcl-sendstring "(_drawarc 9)\n")
  92.     (princ)
  93.   )
  94.   (defun xd::geom:arc<-len&chord (arclen chordlen)
  95.     (if        (> arclen chordlen)
  96.       (progn
  97.         (setq x 2)
  98.         (setq fx (- (/ (sin (/ x 2)) x) (/ (* 0.5 chordlen) arclen)))
  99.         (setq flx (/ (- (* 0.5 x (cos (* 0.5 x))) (sin (* 0.5 x)))
  100.                      (* x x)
  101.                   )
  102.         )
  103.         (setq xx (- x (/ fx flx)))
  104.         (while (> (abs (- x xx)) 0.0000000001)
  105.           (setq x xx)
  106.           (setq fx (- (/ (sin (/ x 2)) x) (/ (* 0.5 chordlen) arclen)))
  107.           (setq        flx (/ (- (* 0.5 x (cos (* 0.5 x))) (sin (* 0.5 x)))
  108.                        (* x x)
  109.                     )
  110.           )
  111.           (setq xx (- x (/ fx flx)))
  112.         )
  113.         (setq r (/ arclen xx))
  114.         (list r x)
  115.       )
  116.     )
  117.   )
  118.   (defun xd::geom:arc<-ChordLen&ChordHeight (chordlen chordHeight)
  119.     (if        (> chordlen chordHeight)
  120.       (progn
  121.         (setq r         (/ (+ (* (/ chordlen 2.0) (/ chordlen 2.0))
  122.                        (* chordHeight
  123.                           chordHeight
  124.                        )
  125.                     )
  126.                     (* 2 chordHeight)
  127.                  )
  128.               an (xdrx_math_asin (/ (/ chordlen 2.0) r))
  129.               an (* 2 an)
  130.         )
  131.         (list r an)
  132.       )
  133.     )
  134.   )
  135.   (defun xd::geom:arc<-ArcLen&Radius (arcLen r)
  136.     (setq c  (* 2 pi r)
  137.           an (* (/ arclen c) 2 pi)
  138.     )
  139.     (list r an)
  140.   )
  141.   (defun xd::geom:arc<-ArcLen&Angle (arcLen an)
  142.     (setq an (* pi (/ an 180)))
  143.     (setq r (/ arclen an))
  144.     (list r an)
  145.   )
  146.   (defun xd::geom:arc<-ChordHeight&Angle (chordLen an)
  147.     (setq an (* pi (/ an 180)))
  148.     (setq r (/ chordlen (- 1 (cos (/ an 2.0)))))
  149.     (list r an)
  150.   )
  151.   (defun _getVal (g arcLen)
  152.     (setq iii (1+ iii))
  153.     (if        (> iii ii)
  154.       (exit)
  155.     )
  156.     (xdge::getpropertyvalue
  157.       g        "length" "startpoint" "midpoint" "endpoint")
  158.     (princ "\n")
  159.     (princ "lenght=")
  160.     (princ #length)
  161.     (princ "  arclen=")
  162.     (princ arclen)
  163.     (setq p2  #midpoint
  164.           cen (xdrx_midp #startpoint #endpoint)
  165.           l   (distance #startpoint #endpoint)
  166.           l   (/ l 2.0)
  167.     )
  168.     (princ "  l=")
  169.     (princ l)
  170.     (princ "  spt=")
  171.     (princ #startpoint)
  172.     (princ " mid=")
  173.     (princ #midpoint)
  174.     (princ " end=")
  175.     (princ #endpoint)
  176.     (if        (not (equal (abs (- arclen #length)) 0.0 1e-5))
  177.       (progn
  178.         (if (> #length arclen)
  179.           (progn
  180.             (princ "   ok!")
  181.             (setq p1 (polar '(0 0 0) 0.0 (* 0.5 l))
  182.                   p3 (polar '(0 0 0) pi (* 0.5 l))
  183.             )
  184.           )
  185.           (progn
  186.             (princ "   <<<!")
  187.             (setq p1 (polar '(0 0 0) 0.0 (* 2 l))
  188.                   p3 (polar '(0 0 0) pi (* 2 l))
  189.             )
  190.           )
  191.         )
  192.         (xdge::setpropertyvalue g "set" p1 p2 p3)
  193.         (_getval g arclen)
  194.       )
  195.     )
  196.   )
  197.   (setq ii 10)
  198.   (defun xd::geom:arc<-ArcLen&ChordHeight (arcLen chordHeight)
  199.     (setq cen         '(0 0 0)
  200.           startR 0.0
  201.           endR         chordHeight
  202.     )
  203.     (setq p1 (polar cen 0.0 endR)
  204.           p2 (polar cen (/ pi 2.0) endR)
  205.           p3 (polar cen pi endR)
  206.     )
  207.     (setq g (xdge::constructor "kCircArc3d" p1 p2 p3))
  208.     (setq iii 0)
  209.     (_getval g arclen)
  210.     (setq ret (xdge::getpropertyvalue g "radius" "startang" "endang"))
  211. ;
  212. ; (xdge::free g)
  213.     (list (car ret) (- (last ret) (cadr ret)))
  214.   )
  215.   (defun _get3p        (info)
  216.     (setq r  (car info)
  217.           an (last info)
  218.     )
  219.     (if        (> an PI)
  220.       (progn
  221.         (setq san (/ (- an pi) 2.0)
  222.               ean (+ pi san)
  223.               san (- san)
  224.         )
  225.       )
  226.       (progn
  227.         (setq san (/ (- pi an) 2.0)
  228.               ean (- pi san)
  229.         )
  230.       )
  231.     )
  232.     (setq p1 (polar cen san r)
  233.           p3 (polar cen ean r)
  234.           p2 (polar cen (+ san (/ an 2.0)) r)
  235.     )
  236.     (list p1 p2 p3)
  237.   )
  238.   (defun _drawarc (code / p1 p2 p3 info)
  239.     (setq cen '(0 0 0))
  240.     (cond
  241.       ((= code 0)
  242.        (and
  243.          (setq arclen (getreal "\n输入弧长<退出>:"))
  244.          (setq chordlen (getreal "\n输入弦长<退出>:"))
  245.          (setq info (xd::geom:arc<-len&chord arclen chordlen))
  246.        )
  247.       )
  248.       ((= code 1)
  249.        (and
  250.          (setq arclen (getreal "\n输入弧长<退出>:"))
  251.          (setq chordheight (getreal "\n输入弦高<退出>:"))
  252.          (setq
  253.            info        (xd::geom:arc<-ArcLen&chordHeight arclen chordheight)
  254.          )
  255.        )
  256.       )
  257.       ((= code 2)
  258.        (and
  259.          (setq arclen (getreal "\n输入弧长<退出>:"))
  260.          (setq an (getreal "\n输入夹角(度)<退出>:"))
  261.          (setq info (xd::geom:arc<-Arclen&Angle arclen an))
  262.        )
  263.       )
  264.       ((= code 3)
  265.        (and
  266.          (setq arclen (getreal "\n输入弧长<退出>:"))
  267.          (setq r (getreal "\n输入半径<退出>:"))
  268.          (setq info (xd::geom:arc<-Arclen&Radius arclen r))
  269.        )
  270.       )
  271.       ((= code 4)
  272.        (if (not (setq chordlen (getreal "\n输入弦长<取点>:")))
  273.          (progn
  274.            (if (and (setq p1 (getpoint "\n弦长第一点<退出>:"))
  275.                     (setq p2 (getpoint p1 "\n弦长第二点<退出>:"))
  276.                )
  277.              (setq chordlen (distance p1 p2))
  278.            )
  279.          )
  280.        )
  281.        (if (and        chordlen
  282.                 (setq chordheight (getreal "\n输入拱高<退出>:"))
  283.            )
  284.          (progn
  285.            (setq info (xd::geom:arc<-ChordLen&ChordHeight
  286.                         chordlen
  287.                         chordheight
  288.                       )
  289.            )
  290.          )
  291.        )
  292.       )
  293.       ((= code 5)
  294.        (if (not (setq chordlen (getreal "\n输入弦长<取点>:")))
  295.          (progn
  296.            (if (and (setq p1 (getpoint "\n弦长第一点<退出>:"))
  297.                     (setq p2 (getpoint p1 "\n弦长第二点<退出>:"))
  298.                )
  299.              (setq chordlen (distance p1 p2))
  300.            )
  301.          )
  302.        )
  303.        (if (and        chordlen
  304.                 (setq r (getreal "\n输入半径<退出>:"))
  305.                 (< chordlen (* 2 r))
  306.            )
  307.          (setq
  308.            info        (list r (* 2 (xdrx_math_asin (/ (/ chordlen 2.0) r))))
  309.          )
  310.        )
  311.       )
  312.       ((= code 6)
  313.        (if (not (setq chordlen (getreal "\n输入弦长<取点>:")))
  314.          (progn
  315.            (if (and (setq p1 (getpoint "\n弦长第一点<退出>:"))
  316.                     (setq p2 (getpoint p1 "\n弦长第二点<退出>:"))
  317.                )
  318.              (setq chordlen (distance p1 p2))
  319.            )
  320.          )
  321.        )
  322.        (if (and chordlen (setq an (getreal "\n输入夹角<退出>:")))
  323.          (progn
  324.            (setq an (* pi (/ an 180.0)))
  325.            (setq an1 (if (> an pi)
  326.                        (setq an1 (- (* 2 pi) an))
  327.                        an
  328.                      )
  329.            )
  330.            (setq info (list (/ chordlen (sin (/ an1 2.0))) an))
  331.          )
  332.        )
  333.       )
  334.       ((= code 7)
  335.        (and
  336.          (setq r (getreal "\n输入半径<退出>:"))
  337.          (setq an (getreal "\n输入夹角<退出>:"))
  338.          (setq an (* pi (/ an 180.0)))
  339.          (setq info (list r an))
  340.        )
  341.       )
  342.       ((= code 8)
  343.        (and
  344.          (setq h (getreal "\n输入拱高<退出>:"))
  345.          (setq r (getreal "\n输入半径<退出>:"))
  346.          (< h (* 2 r))
  347.          (setq info (list r (* 2 (xdrx_math_acos (/ (- r h) r)))))
  348.        )
  349.       )
  350.       ((= code 9)
  351.        (and
  352.          (setq h (getreal "\n输入拱高<退出>:"))
  353.          (setq an (getreal "\n输入夹角(度)<退出>:"))
  354.          (setq info (xd::geom:arc<-ChordHeight&Angle h an))
  355.        )
  356.       )
  357.     )
  358.     (if        (and
  359.           info
  360.           (setq pts (_get3p info))
  361.           (setq        g (xdge::constructor
  362.                     "kcircarc3d"
  363.                     (car pts)
  364.                     (cadr pts)
  365.                     (caddr pts)
  366.                   )
  367.           )
  368.         )
  369.       (progn
  370.         (xdrx_begin)
  371.         (xdge::entity:make g)
  372.         (setq ss   (ssadd)
  373.               #arc (entlast)
  374.               ss   (ssadd (entlast) ss)
  375.         )
  376. ;(XD::Pickset:Drag (entlast) '(0 0 0) (+ 1 2 4 8 16 32 128) 0 nil)
  377.         (xd::pickset:drag
  378.           ss
  379.           (xdge::getpropertyvalue g "center")
  380.           (+ 1 2 4 8 16 32 64 128)
  381.           0
  382.           nil
  383.         )
  384. ;(xd::drag:simplemove ss "\n插入点:" 5 t)
  385.         (xdge::free g)
  386.         (xdrx_end)
  387.       )
  388.       (xdrx_prompt "\n输入的数据不能生成圆弧,请检查数据.")
  389.     )
  390.     (princ)
  391.   )
  392.   (dcl-project-import xd-fast-arc-odcl)
  393.   (dcl-Form-Show 快速圆弧/快速圆弧)
  394.   (setq box (xdrx_drawing_pixelbox))
  395.   (dcl_Form_SetPos
  396.     快速圆弧/快速圆弧
  397.     (car (last box))
  398.     (cadr (last box))
  399.   )
  400.   (princ)
  401. )


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

签到天数: 104 天

连续签到: 1 天

[LV.6]常住居民II

已领礼包: 61个

财富等级: 招财进宝

发表于 2018-8-9 21:29:52 | 显示全部楼层
N版太给力了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|小黑屋|手机版|Archiver|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )  

GMT+8, 2018-12-13 21:09 , Processed in 0.126818 second(s), 20 queries , Gzip On, WinCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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