找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1452|回复: 7

[求助] [求助]:怎么给曲线画垂直线

[复制链接]
发表于 2007-2-9 15:34:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
比如有一条多义线(或直线)

我先选择这条多义线,再选择该线上的某一点,
基于该点、垂直于多义线的垂直线怎么画出来呢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 8121个

财富等级: 富甲天下

发表于 2007-2-9 18:10:38 | 显示全部楼层
http://www.mjtd.com/BBS/dispbbs. ... ID=57817&page=3
作曲线上某一点的法线.

命令: xl XLINE 指定点或 [水平(H)/垂直(V)/角度(A)/二等分(B)/偏移(O)]: per 到  ---输入per
指定通过点: nod 于  -----输入这一点的位置(不一定是NOD)
指定通过点:---------回车

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

使用道具 举报

 楼主| 发表于 2007-2-10 23:14:48 | 显示全部楼层
好像跟我说的不是一回事么

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

使用道具 举报

已领礼包: 8121个

财富等级: 富甲天下

发表于 2007-2-12 11:39:05 | 显示全部楼层
我不明白的是本来XL命令已经够好的了,为什么还要编程?
下面是两种方式实现的代码:
方式一:Command方式
[php]
(defun C:t1 (/ oldos p ss)
  (setq oldos (getvar "OSMODE"))                          ;取得捕捉模式
  (if (setq p (getpoint "\n请拾取曲线上的一点:"))         ;取得曲线上的点
    (if (setq ss (ssget p))
      (progn
        (setvar "OSMODE" 0)                               ;关闭捕捉
        (command ".XLINE" "PER"  P P "")                  ;画曲线上这点的垂直线
        (setvar "OSMODE" oldos)                           ;恢复原捕捉模式
      )
    )
  )
  (princ)                                                 ;静默退出,否则会在命令行显示最后一个变量的值
)
[/php]
方式二:ACtive方式
[php]
;|原代码见CAD大观园的一片文章
http://www.cadhelp.com.cn/bbs/di ... ;ID=1707&page=1
我作了一下修改
|;
(defun C:test (/ doc ms p ss obj cur vlp tan p1 XLObj)
  (vl-load-com)
  (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  (setq ms  (vla-get-modelspace doc))
  (if (setq p (getpoint "\n请拾取曲线上的一点:")
            p (osnap p "NEA"))                            ;取得曲线上的点
    (if (setq ss (ssget p '((-4 . "<OR")                  ;如果是下面物体之一:
                            (0 . "LINE")                  ;  直线
                            (0 . "ARC")                   ;  圆弧
                            (0 . "CIRCLE")                ;  圆
                            (0 . "POLYLINE")              ;  三维多段线
                            (0 . "LWPOLYLINE")            ;  轻多段线
                            (0 . "ELLIPSE")               ;  椭圆
                            (0 . "SPLINE")                ;  样条曲线
                            (0 . "XLINE")                 ;  射线
                            (-4 . "OR>"))))               ;取得选择集
      (setq cur (ssname ss 0)                             ;取得对象名cur
            obj (vlax-ename->vla-object cur)              ;对象名cur转换为VLA对象obj
            vlp (vlax-3d-point p)                         ;p点的值转化为Active的数据
            tan (vlax-Curve-GetFirstDeriv obj             ;根据参数对曲线求导,得到极度接近p点的点坐标
                  (vlax-Curve-GetParamatDist obj          ;由曲线段长度得到曲线p点的参数
                    (vlax-curve-getDistAtPoint obj p)))   ;得到曲线起点到p点的曲线段长度
            p1 (polar p (atan (/ (cadr tan) (car tan))) 1);根据tan的角度,求出p点切线方向上的一点p1
            XLObj (vla-addxline ms vlp (vlax-3d-point p1));根据p点和p1点创建一条构造线(曲线的切线)
            obj (vla-rotate XLObj vlp (/ pi 2))           ;旋转90度
      )                                                   ;setq
    )                                                     ;if
  )                                                       ;if
  (princ)                                                 ;静默退出,否则会在命令行显示最后一个变量的值
)
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-2-12 21:00:44 | 显示全部楼层
想来cad大观园的程序应该是比较早的程序.
写法太臃肿,满城尽是画蛇添足.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-2-15 13:00:19 | 显示全部楼层
是啊
用vlax-curve-getfirstderiv获得切线方向后,加个90度角就可以作垂直线了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-6-8 15:13:50 | 显示全部楼层
喜欢。。。。
不知道能否写出:
1.已知:曲线A偏移100,得到曲线B
2.两条曲线上定距画直线。就是曲线A在每隔300处的点1,和曲线A在每隔300处的点2。连接点1和点2......好像用要(vlax-curve-getParamAtDist curve-obj dist)

谁来回复一下:
在两条平行线间画等距并垂直平行线的程序?

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

使用道具 举报

发表于 2007-6-13 14:20:44 | 显示全部楼层
来个差不多的
(defun c:test()
(setq en (entsel "\n选择曲线"))
(setq ptt (cadr en))
(command "xline" "per" ptt)
(princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 09:32 , Processed in 0.406311 second(s), 45 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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