乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 91|回复: 3

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

[复制链接]

26

主题

50

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
154
发表于 2002-8-19 13:00:00 | 显示全部楼层 |阅读模式
1.怎样将一条pl线的长度赋予一个变量?
2.一条pl线的其中一段的长度呢?
3.从pl线(不是直线)其中一点(点选)到指点长度的点。如何得到。
问题多多。望各位高手不吝指导。
回复

使用道具 举报

4

主题

20

帖子

3

银币

初来乍到

Rank: 1

铜币
36
发表于 2002-8-19 13:34: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        (= &quotOLYLINE" 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 &quotERIMETER"))
      )
      (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)
)
回复

使用道具 举报

22

主题

248

帖子

10

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

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

使用道具 举报

26

主题

50

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
154
发表于 2002-8-19 18:18: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)) &quotOLYLINE")
    (progn
      (princ "\nThis entity is ")
      (princ (cdr (assoc 0 p:e02)))
      (princ ", I can't measure it.")
    )
    (l::pl)
  )
  (princ)
)
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-5-25 16:10 , Processed in 3.038345 second(s), 60 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表