明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4886|回复: 11

关于PL线长度的问题[求助]

  [复制链接]
发表于 2002-8-19 13:00:00 | 显示全部楼层 |阅读模式
1.怎样将一条pl线的长度赋予一个变量?
2.一条pl线的其中一段的长度呢?
3.从pl线(不是直线)其中一点(点选)到指点长度的点。如何得到。

问题多多。望各位高手不吝指导。
发表于 2002-8-19 13:34:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2002-8-19 15:00:00 | 显示全部楼层

只供参考计算线加总长度

;;;-----------------------------------------------------
;;;计算线加总长度
;;;BY LUCAS(龙龙仔)
;;;2002/8/14  AM 9:00
;;;初版
;;;2002/8/18  PM 1:00
;;;修正POLYLINE & SPLINE没有CLOSED
;;;但首尾点相连,长度不能计算问题
;;;-----------------------------------------------------
(defun CENOF (/ CURVE TLEN SS N SUMLEN ENT_N ENT_SS)
  (defun GETPLVTX (E / PL P10)
    (setq E (cdr (assoc -1 (entget E))))
    (while (setq E (entnext E))
      (if (setq P10 (cdr (assoc 10 (entget E))))
        (setq PL (cons P10 PL))
      )
    )
    (equal (nth 0 PL) (nth 0 (reverse PL)))
  )
  (vl-load-com)
  (setq SUMLEN 0)
  (setq
    SS (ssget
         '((0 . "CIRCLE,ELLIPSE,LINE,*POLYLINE,SPLINE,ARC"))
       )
  )
  (setq N 0)
  (repeat (sslength SS)
    (setq ENT_SS (entget (ssname SS N)))
    (setq ENT_N (cdr (assoc 0 ENT_SS)))
    (cond
      ((or (= "CIRCLE" ENT_N)
           (and        (= "LWPOLYLINE" ENT_N)
                (or (= 1 (cdr (assoc 70 ENT_SS)))
                    (equal (assoc 10 ENT_SS)
                           (assoc 10 (reverse ENT_SS))
                    )
                )
           )
           (and        (= "SPLINE" ENT_N)
                (or (= 1 (rem (cdr (assoc 70 ENT_SS)) 2))
                    (equal (assoc 10 ENT_SS)
                           (assoc 11 (reverse ENT_SS))
                    )
                )
           )
           (and        (= "OLYLINE" ENT_N)
                (or (= 1 (rem (cdr (assoc 70 ENT_SS)) 2))
                    (GETPLVTX (ssname SS N))
                )
           )
           (= "ELLIPSE" ENT_N)
       )
       (command "AREA" "O" (ssname SS N))
       (setq TLEN (getvar "ERIMETER"))
      )
      (t
       (setq CURVE (vlax-ename->vla-object (ssname SS N)))
       (setq TLEN (vlax-curve-getdistatpoint
                    CURVE
                    (vlax-curve-getendpoint CURVE)
                  )
       )
      )
    )
    (setq N (1+ N))
    (setq SUMLEN (+ SUMLEN TLEN))
  )
  (print (strcat "总长度: " (rtos SUMLEN 2 5)))
  (princ)
)
发表于 2002-8-19 16:15:00 | 显示全部楼层

做什么用?

发表于 2002-8-19 17:28:00 | 显示全部楼层

一点参考。

1.用 Area o 查看后的系统变量 PERIMETER 值。
2.没有直接方法,可以编程:在两点分别截断,然后求中段。
3.从指定点截断,然后 measure,第一点就是所求(注意删除其他点,使用函数entlast、entnext等。
 楼主| 发表于 2002-8-19 18:15:00 | 显示全部楼层

1、3 很有启发,2好像不好搞。多谢!

 楼主| 发表于 2002-8-19 18:16:00 | 显示全部楼层

道路长度输出。

 楼主| 发表于 2002-8-19 18:17:00 | 显示全部楼层

好东东,研究一下再说。多谢!

 楼主| 发表于 2002-8-19 18:18:00 | 显示全部楼层

那pl中弧线段如何得到点?

发表于 2002-8-19 18:30:00 | 显示全部楼层

供参考

这是早期写的测量R12多线的程序,后来没有更新,供参考:
(defun l::pl()
;  (redraw (car p:se1) 3)
  (setq p:e11 (entnext p:e01)
        p:e12 (entget p:e11)
        p:e13 (cdr (assoc 10 p:e12))
        p:e21 p:e01 p:e32 p:e12
  )
  (while (= (cdr (assoc 0 p:e32)) "VERTEX")       ;3DPL采用实体跟随
    (setq p:e23 p:e33
          p:e31 (entnext p:e21)
          p:e32 (entget p:e31)
          p:e33 (cdr (assoc 10 p:e32))
          p:e21 p:e31
    )
  )
  (setq p:pt1 (getpoint "\nStart point: ")
        p:pt2 (getpoint "\nEnd point: ")
        p:pt0 (osnap (cadr p:se1) "nea")
        p:num 3                          ;剪断后UNDO步数
  )
  (if (or (equal p:pt1 p:e13) (equal p:pt1 p:e23))    ;判断顶点
    (setq p:num (- num 1))
    (command "break" p:se1 "f" p:pt1 p:pt1))
  (if (or (equal p:pt2 p:e13) (equal p:pt2 p:e23))
    (setq p:num (- num 1))
    (command "break" p:pt0 "f" p:pt2 p:pt2))
  (command "area" "e" p:pt0)
  (command "undo" p:num)                       ;UNDO_Break
)
(defun c:MEP(/ p:se1 p:pt1 p:pt2 p:pt0 p:e01 p:e02 p:e11 p:e12 p:e13
               p:e21 p:e23 p:e31 p:e32 p:e33 p:num)
  (setq p:se1 (entsel "\nSelect pline: "))      ;注意选择点
  (setq p:e01 (car p:se1)
        p:e02 (entget p:e01)
  )
  (if (/= (cdr (assoc 0 p:e02)) "OLYLINE")
    (progn
      (princ "\nThis entity is ")
      (princ (cdr (assoc 0 p:e02)))
      (princ ", I can't measure it.")
    )
    (l::pl)
  )
  (princ)
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 17:44 , Processed in 0.208876 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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