马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 st788796 于 2014-11-1 08:03 编辑
在编程过程中有时会遇到一系列的点要进行偏移一个距离,在 A/VLisp 中通常要构造一个 Pline,通过这个 Pline 线 Offset 后获取新线的节点,然后删除这个线,直接计算这些点是没有办法做到的(可以看演示图片,中间有点的退化)
通过 Ge 库,我们可以这样完成
getTrimmedOffset 类型
enum OffsetCrvExtType {
kFillet,
kChamfer,
kExtend
};
 - (defun Pnts:Offset (pts dis / gel gpl ngp ngpl gcl)
- (setq gel (mapcar '(lambda (x y)
- (xdge::constructor "kLineSeg3d" x y)
- )
- pts
- (cdr pts)
- );_构造线段表,首尾相接
- gpl (xdge::constructor "kCompositeCrv3d" gel);_构造一个连续线
- ngpl (xdge::getpropertyvalue
- gpl "getTrimmedOffset" dis '(0. 0. 1.) 2);_extend模式
- )
- (xdge::entity:make ngpl)
- (xdrx_entity_setcolor (entlast) 1)
- (setq gcl (xdge::getpropertyvalue ngpl "getCurveList"));_获取offset 后的曲线列表
- (reverse
- (cons (xdge::getpropertyvalue (last gcl) "endPoint");_端点单独取出
- (reverse (mapcar '(lambda (x)
- (xdge::getpropertyvalue x "startPoint")
- )
- gcl
- );_只取每段的起点
- )
- )
- ) ;_取出顶点
- )
- (defun c:tt (/ e d i pts)
- (if (and (setq e (entsel))
- (setq d (getdist (cadr e) "\nDist: "))
- )
- (progn
- (princ
- (pnts:offset (xdrx_getpropertyvalue (car e) "vertices") d)
- )
- )
- )
- (princ)
- )
|