找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

[求助] 修剪为什么只能剪二次

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2013-8-17 21:01:55 | 显示全部楼层
吃饭才能长胖 发表于 2013-8-17 20:51
没有的!我知道圆孤可以生成来更快,但是圆的话好像没有起点!VLISP我的函数我还不知道怎么用呢。大神用V ...

圆的起点是 三点 方向象限点,这个打断可以用 Break ,但是第一次断开后就没有Circle了,新生成了 Arc ,而且对 ARC 的 Break 要按逆时针来操作,下一次的实体用 entlast 获取

点评

为什么要逆时针,顺时针不行么?  详情 回复 发表于 2013-8-17 21:07
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2013-8-17 21:07:04 | 显示全部楼层
eachy 发表于 2013-8-17 21:01
圆的起点是 三点 方向象限点,这个打断可以用 Break ,但是第一次断开后就没有Circle了,新生成了 Arc , ...

为什么要逆时针,顺时针不行么?

点评

用xdapi 写了一个,都是简单函数,用V/Alisp 也可以写出来  详情 回复 发表于 2013-8-18 00:06
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2013-8-18 00:06:47 | 显示全部楼层
吃饭才能长胖 发表于 2013-8-17 21:07
为什么要逆时针,顺时针不行么?

用xdapi 写了一个,都是简单函数,用V/Alisp 也可以写出来
Break 算法很麻烦,Circle 第一次 Break 后 Entity ObjectID 是不变的,虽然变为圆弧但没有新实体生成,只有圆弧Break后才会生成新实体!
  1. (defun c:tt (/ getarcpts e n p r pcen an a an0 pl)
  2.   (defun getarcpts (p pcen / an an1)
  3.     (setq an  (angle pcen p)
  4.    an1 (atan 2. (sqrt (- (* r r) 4)))
  5.     )
  6.     (list (polar pcen (- an an1) r)
  7.    (polar pcen (+ an an1) r)
  8.     )
  9.   )
  10.   (xdrx_begin)
  11.   (while
  12.     (and (setq e (car (xdrx_entsel "\n拾取圆: " '((0 . "CIRCLE")))))
  13.   (setq n (getint "\n分段数: "))
  14.   (setq p (getpoint "\n起始点: "))
  15.     )
  16.      (setq r (xdrx_getentdxf 40)
  17.     p (vlax-curve-getclosestpointto e p)
  18.     pcen (xdrx_getentdxf 10)
  19.     an (angle pcen p)
  20.     a 1
  21.     an0 (/ (* pi 2) n)
  22.      )
  23.      (repeat n
  24.        (setq pl (cons (polar pcen (+ an (* a an0)) r) pl)
  25.       a (1+ a)
  26.        )
  27.      )
  28.      (setq pl (mapcar '(lambda (x)
  29.     (getarcpts x pcen)
  30.          )
  31.         pl
  32.        )
  33.      )
  34.      (mapcar '(lambda (x y)
  35.   (xdrx_arc_make
  36.     pcen
  37.     r
  38.     (angle pcen (cadr y))
  39.     (angle pcen (car x))
  40.   )
  41.        )
  42.       pl
  43.       (append (cdr pl) (list (car pl)))
  44.      )
  45.      (entdel e)
  46.   )
  47.   (xdrx_end)
  48.   (princ)
  49. )


点评

是把圆等分打断吗?如果是,API可以更简单的,一个主函数 xdrx_curve_getsplitcurves 就做到了  详情 回复 发表于 2013-8-18 01:06
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-8-18 01:06:54 | 显示全部楼层
eachy 发表于 2013-8-18 00:06
用xdapi 写了一个,都是简单函数,用V/Alisp 也可以写出来
Break 算法很麻烦,Circle 第一次 Break 后 E ...

是把圆等分打断吗?如果是,API可以更简单的,一个主函数 xdrx_curve_getsplitcurves 就做到了
  1. (defun XD::Geom:NumDiv (num div / i numl)
  2.   (setq i 1)
  3.   (repeat (- div 1)
  4.     (setq numl (cons (* i (/ num div)) numl)
  5.           i (1+ i)
  6.     )
  7.   )
  8.   (cons 0.0 (reverse (cons num numl)))
  9. )
  10. (defun c:tt()
  11.    (if (and (setq e (car (xdrx_entsel "\n选取圆<退出>:" '((0 . "circle")))))
  12.             (setq div (getint "\n等分数<退出>:"))
  13.             (setq pt (getpoint "\n起始点<退出>:"))
  14.        )
  15.      (progn
  16.         (setq pnear (xdrx_curve_getClosestPoint e pt)
  17.               ps (xdrx_curve_getparamatpoint e (car pnear))
  18.               numl (XD::Geom:NumDiv (* 2 pi) div)
  19.               numl1 (mapcar '(lambda(x)(+ x ps)) numl)
  20.         )
  21.         (apply 'xdrx_curve_getSplitCurves (cons e numl1))
  22.      )
  23.   )
  24.   (princ)
  25. )


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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-8-18 07:15:08 来自手机 | 显示全部楼层
本帖最后由 st788796 于 2013-8-18 08:08 编辑

楼主的本意是在圆上开缺口,不是等分,可以计算绘制一段孤,然后用阵列
来自: Android客户端

点评

好思路,我怎么就没有想到呢。!  详情 回复 发表于 2013-8-18 14:51
没跟帖,就看你那个程序了,如果打缺口,也可以先算出参数点,xdrx_curve_getSplitCurves 后,把断开的地方删除掉就是了。  详情 回复 发表于 2013-8-18 09:32
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-8-18 08:08:50 | 显示全部楼层
  1. (vl-load-com)
  2. (defun c:tt (/ getdivangle acdoc ms _2pi)
  3.   ;;获取半玄长对应角度
  4.   (defun getdivangle (r d)
  5.     (atan d (sqrt (- (* r r) (* d d))))
  6.   )
  7.   (setq        acdoc (vla-get-activedocument (vlax-get-acad-object))
  8.         ms    (vla-get-modelspace acdoc)
  9.         _2pi (* pi 2)
  10.   )
  11.   (vla-startundomark acdoc)
  12.   (vl-catch-all-apply
  13.     (function
  14.       (lambda (/ ss n sl i an el)
  15.         (while (and (progn (princ "\n选择圆....")
  16.                            (setq ss (ssget '((0 . "CIRCLE"))))
  17.                     )
  18.                     (setq n (getint "\n等分数: "))
  19.                )
  20.           (progn
  21.             (setq sl (sslength ss)
  22.                   i  -1
  23.                   an (/ _2pi n)
  24.             )
  25.             (repeat sl
  26.               (setq el (cons (ssname ss (setq i (1+ i))) el))
  27.             )
  28.             (mapcar '(lambda (x / r a1 p arc)
  29.                        (setq r        (vla-get-radius x)
  30.                              a1        (getdivangle r 2.)
  31.                              p        (vla-get-center x)
  32.                        )
  33.                        (setq
  34.                          arc (vla-addarc ms p r a1 (- an (* 2 a1)))
  35.                        )
  36.                        (vla-arraypolar arc n _2pi p)
  37.                      )
  38.                     (mapcar 'vlax-ename->vla-object el)
  39.             )
  40.             (vl-cmdf ".erase" ss "")
  41.           )
  42.         )
  43.       )
  44.     )
  45.   )
  46.   (vla-endundomark acdoc)
  47.   (princ)
  48. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2013-8-18 08:33:38 | 显示全部楼层
理解 API 方法
  1. ;;获取半弦长对应角度
  2. (defun XD::ARC:ChordAngle (r d)
  3.   (atan d (sqrt (- (* r r) (* d d))))
  4. )
  5. (defun c:tt (/ _2pi mat ss n a r p a1 arc)
  6.   (xdrx_begin)
  7.   (setq _2pi (* 2 pi)
  8. mat  (xdrx_matrix_identity 3)
  9.   )
  10.   (while (and
  11.     ;;(setq ss (xdrx_ssget "\n选择圆: " '((0 . "CIRCLE"))));_此处 2014 下出现Bug
  12.     (progn
  13.       (princ "\n选择圆....")
  14.       (setq ss (ssget '((0 . "CIRCLE"))))
  15.     )
  16.     (setq n (getint "\n等分数: "))
  17.   )
  18.     (xdrx_setsstodb ss 0)
  19.     (setq a (/ _2pi n))
  20.     (while (setq e (xdrx_getentdata 0))
  21.       (setq r  (xdrx_getentdxf 40)
  22.      p  (xdrx_getentdxf 10)
  23.      a1 (XD::ARC:ChordAngle r 2.)
  24.       )
  25.       (xdrx_arc_make p r a1 (- a (* 2 a1)))
  26.     )
  27.     (repeat (1- n)
  28.       (xdrx_entity_transformedcopy
  29. (entlast)
  30. (xdrx_matrix_setrotation mat a '(0. 0. 1.) p)
  31.       )
  32.     )
  33.     (xdrx_entity_delete ss)
  34.   )
  35.   (xdrx_end)
  36.   (princ)
  37. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 10249个

财富等级: 富甲天下

发表于 2013-8-18 08:37:36 | 显示全部楼层
  1. (defun BRKCIRCLE (DL N W / PC R ANG1 A LR WO5 PT1 P2 P1)
  2. (if (= (type DL) 'ENAME) (setq DL (entget DL)))
  3. (setq PC (cdr (assoc 10 DL))    R (cdr (assoc 40 DL))
  4.        ANG1 (/ (+ PI PI) N) A 0  LR (* 2 PI R)
  5.        W05 (* W 0.5) AL1 (/ PI 2))
  6. (if (> LR (* W N))
  7.   (repeat N
  8.    (setq PT1 (polar PC A R)
  9.          P2 (polar PT1 (- A AL1) W05) P1 (polar PT1 (+ A AL1) W05))
  10.    (if (= A 0)
  11.     (command "BREAK" PT1 "F" P2 P1)
  12.     (command "BREAK" PT1 "F" P1 P2)
  13.    )
  14.    (setq A (+ A ANG1))
  15.   )
  16.   (princ "\nCon't to break this circle! 本圆无法打桥断!")
  17. )
  18. )
  19. ;调用:(BRKCIRCLE (car(entsel)) 4 4)

点评

这个从 Startpoint 处起始可以,如果任意指定起点处开始就麻烦了  发表于 2013-8-18 08:41
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-8-18 09:32:45 | 显示全部楼层
st788796 发表于 2013-8-18 07:15
楼主的本意是在圆上开缺口,不是等分,可以计算绘制一段孤,然后用阵列

没跟帖,就看你那个程序了,如果打缺口,也可以先算出参数点,xdrx_curve_getSplitCurves 后,把断开的地方删除掉就是了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-18 14:51:40 | 显示全部楼层
st788796 发表于 2013-8-18 07:15
楼主的本意是在圆上开缺口,不是等分,可以计算绘制一段孤,然后用阵列

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

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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