明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1609|回复: 5

关于图层中线段统计

[复制链接]
发表于 2008-5-21 16:32 | 显示全部楼层 |阅读模式

各位好!

      我有一个小的问题需要大家帮忙:

有A B C D E F图层,如何选中A图层,关闭其余图层,显示出人眼看完,没有问题,按下 Y 后回车,统计出A图层上的线段(POLYLINE)长度总长与线段个数,打印在命令行,然后开放其余层。

      在此先谢了,不知哪位高手能够帮忙,当然,主要是如何只选中A层,关闭其余层,与统计长度及开放其它层。这主要的四个问题。

发表于 2008-5-21 21:29 | 显示全部楼层
本帖最后由 作者 于 2008-5-22 20:17:49 编辑

下面程序将顺序改了改,先选择一个实体,再将图层设到该实体所在层,……
  1. ;在龙版基础上改了改。
  2. (defun C:LENOF (/ CURVE TLEN SS N SUMLEN)
  3. (vl-load-com)
  4. (setvar "CMDECHO" 0)
  5. (if (and (setq s1 (entsel "\n选择一个实体 :"))
  6.           (setq ent (entget (car s1)))) (progn
  7.   (setq lnm (cdr (assoc 8 ent)))
  8.   (command "layer" "s" lnm "f" "*" "")
  9.   (setq yn (strcase (getstring "\n是否继续 ? Y/<N> :")))
  10.   (setq SUMLEN 0)
  11.   (if (and (= yn "Y") (setq ss (ssget "X" '((0 . "*POLYLINE"))))) (progn
  12.    (setq n 0)
  13.    (repeat (sslength SS)
  14.     (setq CURVE (vlax-ename->vla-object (ssname SS N)))
  15.     (setq TLEN (vlax-curve-getdistatparam
  16.      CURVE
  17.      (vlax-curve-getendparam CURVE)
  18.      )
  19.     )
  20.     (setq SUMLEN (+ SUMLEN TLEN))
  21.     (setq N (1+ N))
  22.    )
  23.    (print (strcat "总长度: " (rtos SUMLEN 2 5)))
  24.   ))
  25.   (command "layer" "T" "*" "")
  26. ))
  27. (setvar "CMDECHO" 1)
  28. (princ)
  29. )
 楼主| 发表于 2008-5-22 12:28 | 显示全部楼层

版主!

      非常感谢您的回复,我下了您的程序段,做了个试验,发现还有两个小问题。

1,计算出来的总长度度不对,比如我在一个层里画了20条10mm的线条,执行您的程序,总长度执行下来为327.36848,不知道问题在哪儿。

2,执行完后不能把其余层的画的东西自动解除而显现出来。

      万望版主能够继续给于帮助,

     不胜感激!!!

     在此先谢了。

发表于 2008-5-22 17:11 | 显示全部楼层
請提供測試圖
发表于 2008-5-23 08:02 | 显示全部楼层
  1. (defun C:LENOF (/ CURVE ENT LNM N S1 SS SUMLEN TLEN YN)
  2.   (vl-load-com)
  3.   (setvar "CMDECHO" 0)
  4.   (if (and (setq s1 (entsel "\n選擇一個實體 :"))
  5.     (setq ent (entget (car s1)))
  6.       )
  7.     (progn
  8.       (setq lnm (cdr (assoc 8 ent)))
  9.       (command "_.layer" "s" lnm "f" "*" "")
  10.       (setq yn (strcase (getstring "\n是否繼續 ? Y/<N> :")))
  11.       (setq SUMLEN 0)
  12.       (if
  13. (and (= yn "Y")
  14.       (setq ss (ssget "X" (list '(0 . "*polyline") (cons 8 lnm))))
  15. )
  16.   (progn
  17.     (setq n 0)
  18.     (repeat (sslength SS)
  19.       (setq CURVE (vlax-ename->vla-object (ssname SS N)))
  20.       (setq TLEN (vlax-curve-getdistatparam
  21.      CURVE
  22.      (vlax-curve-getendparam CURVE)
  23.    )
  24.       )
  25.       (setq SUMLEN (+ SUMLEN TLEN))
  26.       (setq N (1+ N))
  27.     )
  28.     (print (strcat "總長度: " (rtos SUMLEN 2 5)))
  29.   )
  30.       )
  31.     )
  32.   )
  33.   (command "_.undo" 1)
  34.   (setvar "CMDECHO" 1)
  35.   (princ)
  36. )
 楼主| 发表于 2008-5-23 08:33 | 显示全部楼层

超级版主:您好!

    非常感谢版主的指点,这次版主提供的程序非常好用,经过试验,已经满足要求了。

看来明经网英才辈出!

    我开发的几个程序在工作上有的已经用上,并且已经大大提高了效率,有的将要用上,从学习开始到程序的实用,花费了4个多月的时间,几个百思不得的问题,在明经网的帮助与指点下,一一化解,大大缩短了整个进程!

    从内心深深地、深深地感谢明经网!

    明经网将是我的铁杆网站!

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

本版积分规则

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

GMT+8, 2024-5-2 15:25 , Processed in 1.045185 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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