找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1023|回复: 3

[分享]:给大家贴一个获得POLYLINE在拾取点处的段的起点、终点等信息的函数...

[复制链接]

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-9-25 20:14:39 | 显示全部楼层 |阅读模式

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

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

×

  1. [FONT=courier new]
  2. ;|
  3.    用法:($XDLSP_PolyLine_getSegAt <多义线实体名> <测试点>)
  4.    获得一个*POLYLINE线上指定一点处的“段”的信息。
  5.    对于直线段返回:(顶点索引 "kLine" 起点 终点)
  6.    对于弧线段返回:(顶点索引 "kArc" 圆心 半径 起始角 终止角)
  7.    所有返回点在UCS下。
  8. |;
  9. (defun $XDLSP_PolyLine_getSegAt (e pt / cNa tf i nNums eTyl eSegData el tf1
  10.                                    tf2
  11.                                 )
  12.   (setq cNa (car (xdrx_Object_ClassName e)))
  13.   (if (wcmatch cNa "*POLYLINE")
  14.     (progn
  15.       (setq tf t)
  16.       (if (setq tf (= cNa "POLYLINE"))
  17.         (setq tf (xdrx_polyline_ConvertFrom e)
  18.               tf2 tf
  19.         )
  20.         (setq tf t)
  21.       )
  22.       (if tf
  23.         (progn
  24.           (setq nNums (xdrx_polyline_numVerts e)
  25.                 i -1
  26.           )
  27.           (setq tf1 t)
  28.           (while (and
  29.                    tf1
  30.                    (< i nNums)
  31.                  )
  32.             (if (xdrx_polyline_onSegAt e (setq i (1+ i))
  33.                                        pt
  34.                 )
  35.               (progn
  36.                 (setq eTyl (xdrx_polyline_segtype e i)
  37.                       eSegData (cond
  38.                                  ((= "kLine" eTyl)
  39.                                    (xdrx_polyline_getLineSegAt e i)
  40.                                  )
  41.                                  ((= "kArc")
  42.                                    (xdrx_polyline_getArcSegAt e i)
  43.                                  )
  44.                                )
  45.                       el (cons i (cons eTyl eSegData))
  46.                       tf1 nil
  47.                 )
  48.               )
  49.             )
  50.           )
  51.         )
  52.       )
  53.       (if tf2
  54.         (xdrx_polyline->2dpolyline e)
  55.       )
  56.     )
  57.   )
  58.   el
  59. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2002-9-25 20:35:07 | 显示全部楼层
没有多大用
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-9-27 11:29:12 | 显示全部楼层
我看到一段代码,功能好像差不多
这个功能对编程还是有用的

code

对 PolyLine 进行数据分析的基本程序
返回目录
来源:  明经CAD社区  作(译)者:  陈伯雄  
上传者:  mccad  上传时间:2002年9月3日  
(Defun C:PLL ()
       (PrinC "\n这是对 PolyLine 进行数据分析的基本程序...")
       (While (Progn (SetQ pen (Car (EntSel "\n指定一条 PolyLine: ")))
                        (/= "POLYLINE" (Cdr (Assoc 0 (EntGet pen))))
                )
                (Alert "所指对象不是 PolyLine,请重新指定...")
       )                                              ;指定PolyLine
       (SetQ pel (EntGet pen)           ;取出对象表
              ptp (Cdr (Assoc 70 pel))   ;取出结束片段型
              wpl '()                       ;自建的点位数表
           pen (EntNext pen)
       )
       (While (/= "SEQEND" (Cdr (Assoc 0 (EntGet pen)))) ;如果没结束
               (SetQ pel (EntGet pen)           ;取得顶点对象数据表
               plp (Cdr (Assoc 10 pel))    ;取出控制点点位
                      par (Cdr (Assoc 42 pel))     ;取出弓弦比
                      wpl (Cons (List plp par) wpl)    ;将数据加到WPL表中
               )
               (SetQ pen (EntNext pen))                ;搜索下一个对象
       )
       (SetQ ct (If (= 0 (Cadr (Car wpl))) "直线片段封闭" "弧片段封闭"))
       (SetQ wpl (Cons (Last wpl) wpl) ;加入封闭点
       wpl (Reverse wpl)           ;整理WPL表
       rl (Length wpl)
              pn 0
       )            
       (SetQ clk (If (Or (= 0 ptp) (= 128 ptp)) "开口" "封闭"))  
       (SetVar “pdmode” 3)
       (Repeat (1- 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))
                           )
                           (Command "text" "m" cp 2 0  
(StrCat "R" (RToS (Abs rr)))
                       "text" "" (AngToS bj)
                       "circle" cp 5
                           )
                    )
               )
               (SetQ pn (1+ pn)) ;搜索序号步进
       )
       (Alert (StrCat "结束段状态:\n"
                  clk
                        (If (= "封闭" clk) ct "")
              )
       )
       (PrinC)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

 楼主| 发表于 2002-9-28 05:52:13 | 显示全部楼层
最初由 千寻 发布
[B]没有多大用 [/B]


这仅仅是个函数,对你画图肯定是没有太大用了。去看看下面的帖子,是这个函数的一个应用,一个朋友建模时候提出的申请:

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-26 02:26 , Processed in 0.204397 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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