明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3652|回复: 10

[offset函数] 圆弧自动按外圆弧方向偏移

  [复制链接]
发表于 2012-6-24 09:16:59 | 显示全部楼层 |阅读模式
请问高手,用offset命令可不可以实现自动偏移?
程序功能:
选择圆弧后,自动按设定方向进行偏移,而不是手动去指定偏移方向。

思路:
1. 用(cadr  (entsel))获取选点坐标;
2. 取得圆弧坐标;
3. 对比两个坐标的位置,确定偏移方向的点坐标

问题:
使用过程中会出现偏移方向不对的情况,与圆弧的角度与方向有关。


请问高手,有没有更好的思路或方法?






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2012-6-24 11:48:03 | 显示全部楼层
Offset 方法



创建由现有对象偏移指定距离的新对象

参阅 | 示例

语法

RetVal = object.Offset(Distance)

Object

Arc, Circle, Ellipse, Line, LightweightPolyline, Polyline, Spline, XLine
使用该方法的对象。

Distance

Double[双精度]; 仅用于输入
该方法中的“Distance”是用来指定偏移距离的。 偏移可以是正值或负值,但不能等于0。如果偏移为负值,这意味着将得到更“小”的曲线 (例如,一个圆以负值偏移后的得到的圆的半径将会比原对象半径小). 如果“小”没有意义,则AutoCAD将向小的X,Y,Z WCS坐标方向偏移。如果偏移距离无效,则返回错误。
[明经通道特别提示]对于的 LightweightPolyline 和 Polyline 对象,曲线有顺时针方向和逆时针方向,对于顺时针方向,距离值为正值时为向内偏移,距离值为负值时为向外偏移。对于逆时针时刚好相反。对于自相交的多段线的偏移方向需要自己慢慢实践了。

RetVal

Variant[变体] (对象数组)
可以以原始对象来偏移出一系列的新曲线对象。

说明

对于很多对象,该操作的结果形成单一的新曲线(它的类型可能与原始曲线不同)。 例如,椭圆偏移后的对象将会是样条曲线,这是因为结果不能与椭圆的方程式匹配。有时偏移结果可能形成多个曲线。
 楼主| 发表于 2012-6-24 15:28:20 | 显示全部楼层
本帖最后由 mj520plus 于 2012-6-24 15:57 编辑

谢谢你的解答!
但我希望用VLISP方法来解决!不知有没有设置偏移方向为正值的系统变量?

例如:   
  (command "offset" "0.15" (entsel)  pause "")
我的想法是不要用鼠标去点偏移方向,而是我选择对象后自动按比选择R要大的方向偏移。如下图:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

点评

没仔细想,不过我觉得你可以加个判断:如果偏移后的圆弧长度小于现有长度,则重新进行反向偏移。。。  发表于 2012-6-24 15:43
发表于 2012-6-24 15:52:07 | 显示全部楼层
测试红弧线的中点至心之间的选集能否验证 OK / No ?
 楼主| 发表于 2012-6-24 16:05:28 | 显示全部楼层
本帖最后由 mj520plus 于 2012-6-24 16:05 编辑

请Andyhon详解!谢谢!
发表于 2012-6-24 17:59:40 | 显示全部楼层
...使用过程中会...

两个样本示例不同?
也应是自实务中所提出
单此二例自有简单的解方
还有其他的佐例吗? 有可能会导致不同的思路...
发表于 2012-6-24 23:42:14 | 显示全部楼层
可以按两同心圆弧半径和的平均值画弧。
发表于 2012-6-25 00:27:49 | 显示全部楼层
本帖最后由 langjs 于 2012-6-25 00:29 编辑

这个试试

(defun c:qq (/ ent name obj pt)
  (vl-load-com)
  (setq name (car (entsel "\n选择偏移对象")))
  (if (= (cdr (assoc 0 (setq ent (entget name)))) "ARC")
    (progn
      (setq obj (vlax-ename->vla-object name)
            pt (vlax-curve-getpointatdist obj (* (vlax-curve-getdistatparam obj (vlax-curve-getendparam obj)) 0.5))
            pt (polar (cdr (assoc 10 ent)) (angle (cdr (assoc 10 ent)) pt) (+ (cdr (assoc 40 ent)) 0.5))
      )
      (command "offset" "0.15" name pt "")
    )
    (command "offset" "0.15" name pause "")
  )
  (princ)
)

发表于 2012-6-27 12:37:46 | 显示全部楼层
如果只是ARC,
entsel时取得圆心p0和弧上一点P1,求得半径R;以p0为基点放大p1,使P1在弧外,然后再用offset
发表于 2012-6-27 13:31:52 | 显示全部楼层
我是做法是選擇外弧
而偏移方向就是圓心的點
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-7-22 03:50 , Processed in 0.175493 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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