明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1847|回复: 2

[已解答] 如何用entmake 去实现 断点命令

[复制链接]
发表于 2015-3-26 15:11:28 | 显示全部楼层 |阅读模式
本帖最后由 Kye 于 2015-3-26 16:44 编辑

在线段或圆弧上选取任一点,将线段或圆弧打断,用下面这个在2012中好用在2007中又不好用
;_断点
;;;http://cadtips.cadalyst.com/2d-operations/break-a-selected-point
(defun breakpt ( pt1 )
;(setq pt1 (getpoint"Select Braking Point: "))
(command"break" pt1 "@" "")
(princ)
)

所以想改用entmake新建两个圆弧或直线,删除原来圆弧及直线,直线解决了,但圆弧遇到了困难,反正弦函数角度范围(- 0.5pi +0.5pi),下面程序中如果选取点与圆弧起始点的圆心角大于0.5pi 也不清楚如何处理,生成新圆弧的设定条件调试很长时间,没搞定,请哪位大侠出手帮忙指点迷津,或者帮忙提供个新的不用break的断点程序,谢谢了


;_顶角就是要求的圆心角θ,设弦长为h,则sin(θ/2)=(h/2)÷r=h/2r,θ=2arcsin(h/2r).

;_e=(car (entsel))
;_(setq e (car (entsel)))
(defun mkArc (e sa ea)
  (setq ed (entget e))
  (setq ed (subst (cons 50 sa) ;_ed (entget e)
    (assoc 50 ed)
    ed
    )
ed (subst (cons 51 ea)
    (assoc 51 ed)
    ed
    )
  )
  (entmake ed)
)

(defun c:TT   ()
;_取得组码值
(defun dxf (e i)
    (cdr (assoc i (entget e)))
)
;_反正弦函数
  ;;; Arcsin(x)
;;; x valid in [-1,1]
;;; Return: Radian
;;; Standard Mathematics defined Arcsin on
;;; [-pi/2, pi/2]
(defun arcsin (x)
  (cond
    ((= x 1.0) (/ pi 2.0))
    ((= x -1.0) (/ pi -2.0))
    ((and (> x -1.0) (< x 1.0))
     (atan (/ x (sqrt (- 1.0 (* x x)))))
    )
    (T nil)
  )
)


(setq ss (ssget '((0 . "arc"))))
(setq e  (ssname ss 0 )  ed (entget e) )
      
   (setq sa (dxf e 50)) ;_获取起始角度
   (setq Ea (dxf e 51)) ;_获取终止角度
   (setq r (dxf e 40 ));_获取圆弧半径
   (setq cenpt (dxf e 10)) ;_获取圆弧圆心 e=(car (entsel))
   (setq sp (polar cenpt sa r) ;_获取圆弧起始点
  ep (polar cenpt Ea r) ;_获取圆弧终止点
)
  (setq l   (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e)));_圆弧长度
   
  (setq sita (/ l r));_圆心角
   
  
  (setq getpt (getpoint "\n 选取点:"))
  (setq h (distance sp getpt))
  (setq x (/ h ( * 2 r)))
  (setq ArcAng (* 2 (arcsin x)));_选取点与圆弧起始点的圆心角
  (if ( < arcAng 0) (setq ArcAng (- (* pi 2) ArcAng)))
  
;(setq positionAng (- (angle ep sp) (angle cenpt sp)));_positionAng 方位角
  ;(if (< positionAng 0)
   (if  (equal (abs ( - sa ea)) sita 0.01)
    (progn (setq temp (+ sa ArcAng))
    (mkArc e sa temp)
    (mkArc e temp Ea)
    (entdel e)
    )
    (progn (setq temp (- sa ArcAng))
    (mkArc e sa temp)
    (mkArc e temp Ea)
    (entdel e)
    )
   
  )

)


"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2015-3-27 08:52:33 | 显示全部楼层
  1. (defun c:tt ()
  2. (while (and (setq s1 (entsel "选圆弧打断点: "))
  3.          (setq ent (entget(car s1)))
  4.          (= (cdr(assoc 0 ent)) "ARC"))
  5.   (setq r (cdr(assoc 40 ent)))
  6.   (setq pc (cdr(assoc 10 ent)))
  7.   (setq sa (cdr(assoc 50 ent)))
  8.   (setq ea (cdr(assoc 51 ent)))
  9.   (setq ps (polar pc sa r))
  10.   (setq pe (polar pc ea r))
  11.   (setq pb (osnap (cadr s1) "NEA"))
  12.   (setq ba (angle pc pb))
  13.   (entmod (subst (cons 51 ba) (assoc 51 ent) ent))
  14.   (entmake (subst (cons 50 ba) (assoc 50 ent) (cdr ent)))
  15. )
  16. (princ)
  17. )

评分

参与人数 1明经币 +1 收起 理由
Kye + 1 Z大思路很神奇, 最后三行简直就是神来之笔

查看全部评分

 楼主| 发表于 2015-3-27 11:54:02 | 显示全部楼层
本帖最后由 Kye 于 2015-3-27 11:55 编辑

再次谢谢Z版
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-26 23:45 , Processed in 0.180604 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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