明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1955|回复: 3

如何实现[原创]

[复制链接]
发表于 2003-4-18 16:09:00 | 显示全部楼层 |阅读模式
请问:如何把选择集的各点坐标存到文件中。实现展点和数据更新的 自动话。我用了。entget.entname.entsslength.entnext等函数。可每次都只能显示第一个点的坐标。用也不行。例如。如何把多线段的每个转点的坐标都存到文件中。谢谢macro2027@sina.com
发表于 2003-4-18 18:08:00 | 显示全部楼层

你应该把你的程序贴出来,看看有什么问题?

发表于 2003-4-20 12:03:00 | 显示全部楼层

这是版主书上的.

(Defun CWPL (/ pen pel pln ptp pan plp par wpl ct pn rl clk al pt gx bj np xc gg rr cp pa
                 ca cm nn)
(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 (last 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 "\n"
         (If (= "封闭" clk) ct "")
  )
)
(PrinC)
)
发表于 2003-4-27 18:44:00 | 显示全部楼层

还有更好的方法,遍历多段线各点坐标。而且更加可靠!

在这个程序中,使用了步长值作为确定点表位置的方法。在实际应用中,如果图元不是绘制在0层、颜色也被修改过,那么程序运行将会出错。而且在R2000和R14中,点表位置也不尽相同。考虑程序的通用性,我是这样做的,取出控制点数量,然后每取一个点(assoc 10 es),就修改一次多段线定义数据。将(10 . 100.0 100.0 0.0) 修改为 (500 . 100.0 100.0 0.0),然后循环用(assoc 10 es),依次取中下一个点表。
  我只是提供一个方法,具体程序应该比较简单。你自己试试看!
  欢迎到我的主页看看。http://luocl-cad.myrice.com
  或者给我留言:lcl2094_cn@sina.com
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-26 11:48 , Processed in 0.179643 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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