找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1660|回复: 4

[求助] [求助]:在LWPOLYLINE中弧线段中能够根据两端点的凸度计算出弧线段的中点吗?

[复制链接]
发表于 2002-2-21 12:58:46 | 显示全部楼层 |阅读模式

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

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

×
在LWPOLYLINE中弧线段中能够根据两端点的凸度计算出弧线段的中点吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2002-2-21 17:42:17 | 显示全部楼层

Re: [求助]:在LWPOLYLINE中弧线段中能够根据两端点的凸度计算出弧线段的中点吗?完全可以。

最初由 leemanzhuo 发布
[B]在LWPOLYLINE中弧线段中能够根据两端点的凸度计算出弧线段的中点吗? [/B]


有两种办法来实现:
1 当无VLISP时,可以通过凸度来完成。所谓凸度,实际上是弧线弦高与半弦长的比值,该值分正负,表示弧线的方向。知道了这些,不难编出程序来。先计算弦中点,按弦高用POLAR函数可计算出中点。
2 如果有VLISP,则很好解决:先用VLAX-CURVE-GETPARAMATPOINT 计算弧线的端点pt1、pt2的参数值,在计算平均值,用函数VLAX-CURVE-GETPOINTATPARAM计算该平均值所在的点,就是中点。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-2-24 09:58:54 | 显示全部楼层
下面是纯AutoLISP的,LWPolyLine的数据分析程序,包括您要的弧片段中点
摘自《Visual LISP for AutoCAD2000程序设计——从学会到用好》第四章...

; 0  实体类型      5 实体索引名        67                  8  层名
; 90 控制点数     70 0开口 1封闭       43                 38 高度
; 39 厚度         40 起点线宽          41 末点线宽        
; 10 点位
; 42 弧段弓弦比 = 弓高/(弦长/2)


(Defun C:LWPL ()
       (PrinC "\n这是对 LWPolyLine 进行资料分析的基本程序...")
       (While (Progn (SetQ pen (Car (EntSel "\n指定一条LWPolyline: ")))
                     (/= "LWPOLYLINE" (Cdr (Assoc 0 (EntGet pen))))
              )
              (Alert "所指对象不是 LWPolyLine,请重新指定...")
       )                                              ;指定LWPolyLine
       (SetQ pel (EntGet pen)                         ;取出对象资料表
             pel (Member '(100 . "AcDbPolyline") pel) ;取出其中的有关资料
             pln (Cdr (Assoc 90 pel))                 ;取出控制点数量
             ptp (Cdr (Assoc 70 pel))                 ;取出结束片段类型
       )
       (SetQ pan 6         ;资料读取序号初值
             wpl '()       ;自建的点位资料表
       )
       (Repeat pln
               (SetQ plp (Cdr (Nth pan pel))       ;取出控制点点位
                     par (Cdr (Nth (+ 3 pan) pel)) ;取出弓弦比
                     wpl (Cons (List plp par) wpl) ;将资料加到WPL表中
               )
               (SetQ pan (+ 4 pan))                ;序号步进
       )
       (SetQ ct (If (= 0 (Cadr (Car wpl))) "直线片段封闭" "弧片段封闭"));判断最后段类型
       (SetQ wpl (Cons (Last wpl) wpl) ;加入封闭点
             wpl (Reverse wpl)         ;整理WPL表
             pn 0
             rl (Length wpl)
       )            
       (SetQ clk (If (Or (= 0 ptp) (= 128 ptp)) "开口" "封闭")) ;判断封闭与开口
       (SetQ rl (If (= "开口" clk) (- rl 2) (- rl 1)))
       (Repeat rl                                                   ;逐点分析
               (SetQ al (Nth pn wpl)                                     ;取出点数据表
                     pt (Car al)                                         ;取出点位
               )
               (Command "point" pt)
               (PrinC "\n") (PrinC al)          
               (If (And (/= 0.0 (Cadr al)) (Nth pn wpl))            ;如果是弧片断
                   (Progn (SetQ gx (Cadr al)                             ;取出弓弦比
                                bj (* (ATAN (ABS gx)) 4)                 ;计算包角
                                np (Car (Nth (1+ pn) wpl))               ;取出下一点位
                                xc (* 0.5 (Distance pt np))              ;半弦长计算
                                gg (* gx xc)                             ;弓高计算
                                rr (/ (+ (* xc xc)(* gg gg)) (* 2 gg))   ;半径计算
                          )
                          (SetQ cp (Polar pt (SetQ pa (Angle pt np)) xc) ;圆心点计算
                                cp (Polar cp (+ pa (* 0.5 Pi)) (- rr gg))
                          )
                          (SetQ ca (Angle pt np)                         ;弦角度
                                cm (Polar cp (- ca 1.5707963268) rr)     ;弧片段中点
                          )
                          (Command "text" "m" cp 2 0 (StrCat "R" (RToS (Abs rr)))
                                   "text" "" (AngToS bj)
                                   "circle" cp 5
                                   "circle" cm 3
                          )
                   )
               )
               (SetQ pn (1+ pn)) ;搜索序号步进
       )
       (Alert (StrCat "结束段状态:\n"
                      clk
                      (If (= "封闭" clk) ct "")
              )
       )
       (PrinC)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-3-3 19:17:37 | 显示全部楼层
我编了一段vb代码,在网巴上网,现在没法帖,需要可与我联系。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2002-3-3 22:19:58 | 显示全部楼层
到精华区看看。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 08:47 , Processed in 0.296762 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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