乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
楼主: LEsq

[编程交流] 我的一些lisp编码。。。

[复制链接]

2

主题

47

帖子

45

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 12:57:15 | 显示全部楼层
圆到多边形
将圆图元转换为多段线的方法。
 
  1. (vl-load-com)
  2. (defun circ2poly
  3.       (obj / ctr radio a b c d pts vla_poly color_use space)
  4. (if (wcmatch (getvar "acadver") "16*,17*,18*")
  5.    (setq color_use (vla-get-colorindex (vla-get-truecolor obj))))
  6. (if (wcmatch (getvar "acadver") "15*")
  7.    (setq color_use (vla-get-color obj)))
  8. (setq ctr (vlax-get obj 'center))
  9. (setq radio (vlax-get obj 'radius))
  10. (setq a (polar ctr pi radio))
  11. (setq b (polar ctr 0.0 radio))
  12. (setq c (polar ctr (* pi 0.5) radio))
  13. (setq d (polar ctr (* pi 1.5) radio))
  14. (setq pts (mapcar '2dpt (list a b)))
  15. (setq
  16.    space (vla-objectidtoobject
  17.     (vla-get-database obj)
  18.     (vla-get-ownerid obj)))
  19. (if (not (vl-catch-all-error-p
  20.      (setq vla_poly
  21.      (vl-catch-all-apply
  22.        'vla-addlightweightpolyline
  23.        (list space
  24.       (lstVariantarray (apply 'append pts)))))))
  25.    (vla-put-closed vla_poly t))
  26. (vla-setbulge
  27.    vla_poly
  28.    0
  29.    (getBulge a c b))
  30. (vla-setbulge
  31.    vla_poly
  32.    1
  33.    (getBulge b d a))
  34. (putColor vla_poly color_use)
  35. vla_poly)
  36. (defun 2dpt  (pt)
  37. (if (caddr pt)
  38.    (list (car pt) (cadr pt))
  39.    pt))
  40. (defun putColor  (obj color_use)
  41. (if (wcmatch (getvar "acadver") "16*,17*,18*")
  42.    (setq vla_truecolor
  43.    (vla-getinterfaceobject
  44.      (vlax-get-acad-object)
  45.      (cond
  46.        ((wcmatch (getvar "acadver") "16*")
  47. "AutoCAD.AcCmColor.16")
  48.        ((wcmatch (getvar "acadver") "17*")
  49. "AutoCAD.AcCmColor.17")
  50.        ((wcmatch (getvar "acadver") "18*")
  51. "AutoCAD.AcCmColor.18")))))
  52. (if (wcmatch (getvar "acadver") "16*,17*,18*")
  53.    (progn
  54.      (vla-put-colorindex
  55. vla_truecolor
  56. color_use)
  57.      (if obj
  58. (vla-put-truecolor obj vla_truecolor)))
  59.    (if (wcmatch (getvar "acadver") "15*")
  60.      (vla-put-color obj color_use)))
  61. (vlax-release-object vla_truecolor)
  62. (setq vla_truecolor nil))
  63. (defun lstVariantarray  (ptslist / arrayspace sarray)
  64. (setq arrayspace
  65. (vlax-make-safearray
  66.    vlax-vbdouble
  67.    (cons 0
  68.   (- (length ptslist) 1))))
  69. (setq sarray (vlax-safearray-fill arrayspace ptslist))
  70. (vlax-make-variant sarray))
  71. (defun getBulge  (fromvertex midp p2 / ang chord midc alt)
  72. (setq ang   (angle fromvertex p2)
  73. chord (distance fromvertex p2)
  74. midc  (polar fromvertex ang (* chord 0.5))
  75. alt   (distance midp midc))
  76. (cond
  77.    ((zerop chord) 0.0)
  78.    ((equal (angle midp midc)
  79.     (rem (+ ang (* pi 0.5)) (* pi 2))
  80.     1e-4)
  81.     (/ alt chord 0.5))
  82.    (t (/ alt chord -0.5))))
  83. (defun ss2lst  (ss / i lst)
  84. (setq i (if ss
  85.     (1- (sslength ss))
  86.     -1))
  87. (while (>= i 0)
  88.    (setq lst (cons
  89. (vlax-ename->vla-object
  90.    (ssname ss i))
  91. lst)
  92.   i   (1- i)))
  93. lst)
  94. ;; single
  95. (defun C:SCIRC2POLY  (/ obj)
  96. (setq
  97.    obj (vlax-ename->vla-object (car (entsel "\nSelect Circle: "))))
  98. (circ2poly obj))
  99. ;; multiple
  100. (defun C:MCIRC2POLY  (/ ss lst)
  101. (if (setq ss (ssget '((0 . "CIRCLE"))))
  102.    (progn
  103.      (setq lst (ss2lst ss))
  104.      (foreach obj lst (circ2poly obj))))
  105. (princ))
  106. (princ)
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-5 10:11 , Processed in 0.673162 second(s), 63 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表