明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2201|回复: 9

这种长度测量的程序应该怎样编写?

[复制链接]
发表于 2005-9-14 15:39 | 显示全部楼层 |阅读模式

前两天找到一个测量多种元素的长度的小程序,因我要计算皮带的长度,能不能把这个程序改一下,见图形文件,图中的几个元素全部选中后,结果=直线长度+(180度拐角圆周长)/2+(90度拐角圆周长)/4   呢?

(defun CENOF (/ CURVE TLEN SS N SUMLEN)
  (vl-load-com)
  (setq SUMLEN 0)
  (setq SS (ssget '((0 . "CIRCLE,ELLIPSE,LINE,*POLYLINE,SPLINE,ARC"))))
  (setq N 0)
  (repeat (sslength SS)
    (setq CURVE (vlax-ename->vla-object (ssname SS N)))
    (setq TLEN (vlax-curve-getdistatparam
CURVE
(vlax-curve-getendparam CURVE)
       )
    )
    (setq SUMLEN (+ SUMLEN TLEN))
    (setq N (1+ N))
  )
  (print (strcat "总长度: " (rtos SUMLEN 2 5)))
  (princ)
)

本帖子中包含更多资源

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

x
发表于 2005-9-15 09:50 | 显示全部楼层

;用个传统的方法编制程序,如下,请试用:

(defun c:cc()
  (vl-load-com)
  (setq sum0 0  sum1 0 sum2 0)
  (if (setq ssa (ssget '((0 . "LINE,ARC"))))
     (progn
        (setq n (sslength ssa) i 0)
        (repeat n
           (setq ent (ssname ssa i)  db (entget ent)
   nam (cdr (assoc 0 db))
    )
    (command "_lengthen" ent "")
    (cond ((= nam "LINE")
     (setq sum0 (+ sum0 (getvar "perimeter")))
   )
   (t
                    (setq an (abs (- (cdr (assoc 50 db)) (cdr (assoc 51 db)))))
      (cond ((equal an pi 1e-3)
       (setq sum1 (+ sum1 (getvar "perimeter")))
     )
     ((equal an (* 0.5 pi) 1e-3)
       (setq sum2 (+ sum2 (getvar "perimeter")))
     )
      )
   )
    )
    (setq i (1+ i))
 )
        (setq zfc (strcat "结果:直线长度"  (rtos sum0 2 5)
     "+180度拐角圆弧长"  (rtos sum1 2 5)
     "+90度拐角圆弧长"  (rtos sum2 2 5)
     "\n总长度: " (rtos (+ sum0 sum1 sum2 ) 2 5)
     )
 )
        (princ (strcat "\n" zfc))
        (alert zfc)
     )
     (alert "未选取任何直线或圆弧!")
  )
  (princ)
)

本帖子中包含更多资源

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

x
 楼主| 发表于 2005-9-15 14:21 | 显示全部楼层
回复 yshf
 
 我想你是领会错了我的意思了,如果是圆弧的话,我列出的那个程序可以很轻松的
 
测量出来,因为我要用圆来表示皮带轮的存在及皮带轮的大小,因此不能用圆
 
弧来表示。
 
请各位dx帮帮忙,看看怎么才能达到这个目的啊
发表于 2005-9-15 17:29 | 显示全部楼层

哦,原来如此,从图中看出只有两种圆存在,半径大者即为180度拐角圆,半径小者即为90度拐角圆,那么请试用以下程序:

(defun c:cc()
  (vl-load-com)
  (setq sum0 0  sum1 nil)
  (if (setq ssa (ssget '((0 . "LINE,CIRCLE"))))
     (progn
        (setq n (sslength ssa) i 0)
        (repeat n
           (setq ent (ssname ssa i)  db (entget ent)
   nam (cdr (assoc 0 db))
    )
    (command "_lengthen" ent "")
    (cond ((= nam "LINE")
     (setq sum0 (+ sum0 (getvar "perimeter")))
   )
   (t
                    (setq r (cdr (assoc 40 db)))
      (if (setq zb (assoc r sum1))
          (setq sum1 (subst (list r (+ (cadr zb) (getvar "perimeter"))) zb sum1))
          (setq sum1 (append sum1 (list (list r (getvar "perimeter")))))
      )
   )
    )
    (setq i (1+ i))
 )
        (setq sum1 (vl-sort sum1 '(lambda(e1 e2)(> (car e1) (car e2))))
       zb   (/ (cadr (car sum1)) 2.0)
       r    (/ (cadr (cadr sum1)) 4.0)
       zfc (strcat "结果:直线长度"  (rtos sum0 2 5)
     "+180度拐角圆弧长"  (rtos zb 2 5)
     "+90度拐角圆弧长"  (rtos r 2 5)
     "\n总长度: " (rtos (+ sum0 zb r ) 2 5)
     )
 )
        (princ (strcat "\n" zfc))
        (alert zfc)
     )
     (alert "未选取任何直线或圆!")
  )
  (princ)
)

本帖子中包含更多资源

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

x
 楼主| 发表于 2005-9-15 18:36 | 显示全部楼层
回复 yshf
 
感谢你的回复,但还存在下面几个问题:
 
1、在实际工作中不只有两种圆,因此不应用圆的直径来判断,应以圆的两条切线的角度来判断
 
2、该程序的计算结果不正确  结果应为所有直线的长度+(所有180度拐角圆周长)/2+(所有90度拐角圆周长)/4
 
3、该程序在执行中出错(在只选直线和180度拐角圆的时候出现:错误: 参数类型错误: numberp: nil
 
请再看看怎么处理
 楼主| 发表于 2005-9-17 10:16 | 显示全部楼层

应该怎么办呀,dx们快帮帮我呀,贴子都快沉了,给个思路也行啊

 楼主| 发表于 2005-9-20 07:54 | 显示全部楼层

难道就没人会了吗?

 楼主| 发表于 2005-9-26 16:36 | 显示全部楼层
我再顶一下,请高手帮帮我
发表于 2005-9-26 18:19 | 显示全部楼层

1.不明白你“只选直线和180度拐角圆”,大概忘记了所给前提条件“图中的几个元素全部选中后”,不要自相矛盾地来验证在所给前提条件下编制的程序呀。

2.下面给你提供个思路吧:

(1).将所有的圆作为一选择集,直线段另作一个选择集;

(2).对圆选择集中的每一个圆,在直线段选择集中找出和它相切的两条直线段;

(3).根据两个切点、圆半径求出弧长及其相对应的圆心角,并将弧长加到具有相同半径、圆心角的长度中;

(4).求两条切线的长度,并判断其长度是否被统计过,如未统计过则加入到直线段长度中;

(5).根据你所提供的示例图形,判断直线段和圆切的条件是:如果直线段有一个端点到圆心的距离等于该圆的半径,直线段即与该圆相切。(注意:图中别提供有与圆有两个交点的直线段来验证这个思路!)

(6).最好将要量取长度的这些图元放到一个图层上,不要掺无关的图元。在作选择集]时,只选这一层上的“LINE”和“CIRCLE”。

发表于 2005-9-27 09:19 | 显示全部楼层

这种程序忒麻烦,而且使用范围太窄。

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-5-18 18:04 , Processed in 0.475120 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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