hbgsw 发表于 2015-11-12 09:50:36

样条曲线转圆的问题

本帖最后由 hbgsw 于 2015-11-12 15:28 编辑

问题介绍:目前工作中经常有Proe转CAD 的图纸,有些模型建模不标准,就存在有本应该为圆的图形,结果转换到CAD中后,就成了样条曲线,现需将样条曲线转换成为圆,先弄个简单的功能满足要求,我的思路如下:
1 获取样条曲线2个端点,(一个圆分成了2个样条曲线)
2 端点重复过滤
3 根据2个端点表,生成图层,中心点,半径 的表
4 entmake 重新生成圆。
目前卡壳在2和3处了,对于lambda和mapcar这2个函数运用实在不熟悉,请各位帮忙下,谢谢,附上图纸和截图。

   


hbgsw 发表于 2015-11-12 10:47:25

本帖最后由 hbgsw 于 2015-11-13 09:01 编辑

已经自己解决了,虽然写的很烂,。

(defun c:2t (/ entss n lay ent cen x1 lst r)
   ;样条曲线线转圆弧或者圆
(setvar "cmdecho" 0)
(while (not (setq entss (ssget '((0 . "SPLINE"))))))
(setq n   0
lay "0"
lst nil
)
(while (setq ent (ssname entss (setq n (1+ n))))
    (setq ent
       (mapcar
'cdr
(vl-remove-if-not '(lambda (x) (= 10 (car x))) (entget ent))
       )
   ent (list (car ent) (last ent));获得两个端点
    )
    (setq
      cen (mapcar '(lambda (x) (/ x 2))
    (apply '(lambda (x1 x2) (mapcar '+ x1 x2)) ent)
   )
    )
    (setq r (/ (distance (car ent) (cadr ent)) 2))
    (setq lst (cons (list cen ent r) lst));将中心点,两端点,半径形成表
)
(setq lst (delsame lst 0.001));重复过滤
(hbg_entmake_layer "MARK")
(command "CHPROP"entss""    "la"      "MARK"
      "c"       "bylayer"""
   )
(foreach x1 lst
    (setq cen (car x1)
   r   (caddr x1)
    )
    (hbg_entmake_circle lay cen r);生产新圆
)
(princ)
)
(defun delsame(l1 rcz / l2);;带容差去重(重复过的取第一次出现),有时处理坐标点需要考虑容差,函数作者:llsheng_73
(while l1
    (setq l2(cons(car l1)l2)l1(vl-remove-if'(lambda (x)(equal(car(car l1)) (car x) rcz))(cdr l1))))
(reverse l2))


gowww 发表于 2015-11-22 20:54:27

楼主,R角可以转吗?

hbgsw 发表于 2015-11-23 09:16:40

想办法是可以的。

baby绑定命运线 发表于 2022-10-12 23:48:07

支持个请问有完美的源码吗,,谢谢大佬;

qwsss31 发表于 2024-6-24 16:22:52

不能运行,是需要再家个运行参数吗?
页: [1]
查看完整版本: 样条曲线转圆的问题