明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2205|回复: 5

[求助]过样条曲线与一直线的交点做样条曲线的切线!

[复制链接]
发表于 2005-4-26 13:07 | 显示全部楼层 |阅读模式
[求助] 1、过样条曲线与一直线的交点做样条曲线的切线! 2、在样条曲线上绘制等分点,可以插入块,可不可以在指定点插入块,并且该块与样条曲线对齐?
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2005-4-26 13:35 | 显示全部楼层
1.如下:
  1. ;函数:GetInterPOint
  2. ;功能:返回两个对象的所有交点
  3. ;参数: ent1、ent2 均为ename对象
  4. (defun GetInterPoint (ent1 ent2 / ax_ent_1 ax_ent_2 intpoints points i)
  5.    (setq ax_ent_1 (vlax-ename->vla-object ent1)
  6.                ax_ent_2 (vlax-ename->vla-object ent2)
  7.    )
  8.    (setq intpoints (vla-intersectwith ax_ent_1 ax_ent_2 acextendnone))
  9.    (setq intpoints (vlax-variant-value intpoints))
  10.    (setq i 0)
  11.    (if (> (vlax-safearray-get-u-bound intpoints 1) 0)
  12.        (repeat (/ (+ 1
  13.                            (- (vlax-safearray-get-u-bound intpoints 1)
  14.                                  (vlax-safearray-get-l-bound intpoints 1)
  15.                            )
  16.                      )
  17.                      3
  18.                )
  19.            (setq points (append points (list (list
  20.                (vlax-safearray-get-element intpoints i)
  21.                (vlax-safearray-get-element intpoints (+ i 1))
  22.                (vlax-safearray-get-element intpoints (+ i 2))
  23.            )))
  24.            )
  25.            (setq i (+ 3 i))
  26.        )
  27.    )
  28.    points
  29. )
  30. ;主函数,命令:TEST
  31. (defun c:test( / ent1 ent2 pts i pt ang)
  32.    (setq ent1 (car (entsel "\n选择曲线...")))
  33.    (setq ent2 (car (entsel "\n选择直线...")))
  34.    (setq pts (GetInterPoint ent1 ent2))
  35.    (setq i 0)
  36.    (repeat (length pts)
  37.        (setq pt (nth i pts))
  38.        (setq ang (angle '(0 0 0) (vlax-curve-getFirstDeriv ent1 (vlax-curve-getParamAtPoint ent1 pt))))
  39.        (command "_.line" pt (polar pt ang 100) "")
  40.        (setq i (1+ i))
  41.    )
  42.    (princ)
  43. )
2.怎样算对齐?
 楼主| 发表于 2005-4-26 14:23 | 显示全部楼层
样条曲线,定数等分,插入块,对齐!



实际上和第一个问题是一样的,就是沿着插入点的切线方向排列插入的图形!


如下图!但我要的是任意点或确定点,比如说与其它对象的交点!这样的点不止一个!且没有排列的规则!


本帖子中包含更多资源

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

x
发表于 2005-4-26 14:43 | 显示全部楼层
到底是什么点?如果等分点,divide命令就可以办到
 楼主| 发表于 2005-4-26 15:50 | 显示全部楼层
我上面的就是用定数等分做的!


就因为不是等分点,而是与其它对象相交的点,这些交点当然是任意的,说不准在哪!而且点很多。每个点都要插入一个图形与样条曲线对齐!
发表于 2005-4-26 17:21 | 显示全部楼层
  1. ;函数:GetInterPOint
  2. ;功能:返回两个对象的所有交点
  3. ;参数: ent1、ent2 均为ename对象
  4. (defun GetInterPoint (ent1 ent2 / ax_ent_1 ax_ent_2 intpoints points i)
  5.    (setq ax_ent_1 (vlax-ename->vla-object ent1)
  6.                ax_ent_2 (vlax-ename->vla-object ent2)
  7.    )
  8.    (setq intpoints (vla-intersectwith ax_ent_1 ax_ent_2 acextendnone))
  9.    (setq intpoints (vlax-variant-value intpoints))
  10.    (setq i 0)
  11.    (if (> (vlax-safearray-get-u-bound intpoints 1) 0)
  12.        (repeat (/ (+ 1
  13.                            (- (vlax-safearray-get-u-bound intpoints 1)
  14.                                  (vlax-safearray-get-l-bound intpoints 1)
  15.                            )
  16.                      )
  17.                      3
  18.                )
  19.            (setq points (append points (list (list
  20.                (vlax-safearray-get-element intpoints i)
  21.                (vlax-safearray-get-element intpoints (+ i 1))
  22.                (vlax-safearray-get-element intpoints (+ i 2))
  23.            )))
  24.            )
  25.            (setq i (+ 3 i))
  26.        )
  27.    )
  28.    points
  29. )
  30. ;主函数,命令:TEST
  31. ;功能:交点画切线
  32. (defun c:test( / ent1 ent2 pts i pt ang)
  33.    (setq ent1 (car (entsel "\n选择曲线...")))
  34.    (setq ent2 (car (entsel "\n选择直线...")))
  35.    (setq pts (GetInterPoint ent1 ent2))
  36.    (setq i 0)
  37.    (repeat (length pts)
  38.        (setq pt (nth i pts))
  39.        (setq ang (angle '(0 0 0) (vlax-curve-getFirstDeriv ent1 (vlax-curve-getParamAtPoint ent1 pt))))
  40.        (command "_.line" pt (polar pt ang 100) "")
  41.        (setq i (1+ i))
  42.    )
  43.    (princ)
  44. )
  45. ;命令:test2
  46. ;功能:交点插入块
  47. (defun c:test2( / ent1 ent2 pts i pt ang blk)
  48.    (setq ent1 (car (entsel "\n选择曲线...")))
  49.    (setq ent2 (car (entsel "\n选择直线...")))
  50.    (setq blk (getstring "\n输入块名:"))
  51.    (setq pts (GetInterPoint ent1 ent2))
  52.    (setq i 0)
  53.    (repeat (length pts)
  54.        (setq pt (nth i pts))
  55.        (setq ang (angle '(0 0 0) (vlax-curve-getFirstDeriv ent1 (vlax-curve-getParamAtPoint ent1 pt))))
  56.        (command "insert" blk pt "" "" (angtos ang))
  57.        (setq i (1+ i))
  58.    )
  59.    (princ)
  60. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-17 19:07 , Processed in 0.214183 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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