其实很简单,看里面的注释吧
![](source/plugin/imc_colorcode/images/loading.gif) - (defun c:tt (/ ss bCircle cCircle)
- (if (setq ss (ssget '((0 . "circle"))))
- (progn
- (setq bCircle (xdge::constructor "kCircArc3d");_默认圆1
- cCircle (xdge::constructor "kCircArc3d");_默认圆2
- cc3d (xdge::constructor "kCurveCurveInt3d" bCircle cCircle);_构造两个圆的相交体
- )
- (mapcar '(lambda (x / dCircle sa ea pc r)
- (mapcar 'set
- '(pc r)
- (xdrx_getpropertyvalue x "center" "radius")
- );_取圆实体的 圆心 半径
- (xdge::setpropertyvalue
- bCircle "set" pc '(0.0 0.0 1.0) r) ;_将默认圆1 构造到圆实体位置
- (xdge::setpropertyvalue
- cCircle
- "set"
- (polar pc (- (/ pi 4)) (* 0.3 r))
- '(0.0 0.0 1.0)
- r
- );_将默认圆2 构造到圆心向右下45度 0.3 倍半径处
- (setq dCircle (xdge::copy cCircle));_复制个 圆2, 临时圆
- (mapcar
- 'set
- '(sa ea)
- (vl-sort
- (list
- (cadr
- (xdge::getpropertyvalue cc3d "getIntParams" 0)
- );_相交体的第一个交点参数,cadr 是第二个默认圆上
- (cadr
- (xdge::getpropertyvalue
- cc3d
- "getIntParams"
- 1
- )
- );_相交体的第一个交点参数,cadr 是第二个默认圆上
- )
- '<
- );_圆上交点按由小到大排列,即逆时针
- )
- (xdge::entity:make
- (xdge::setpropertyvalue dCircle "setAngles" sa ea);_将复制圆设置起始角和终止角
- );_创建 ARC 实体
- (xdge::free dCircle);_释放临时圆, 这个也可以初始设置一个,然后用 set,减少内存占用
- )
- (xdrx_pickset->ents ss)
- )
- (xdge::free)
- )
- )
- (princ)
- )
|