hzzhf的个人空间 https://blog.eetop.cn/1776678 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

计算面积

已有 653 次阅读| 2023-8-22 15:32 |个人分类:skill|系统分类:其他

https://bbs.eetop.cn/thread-378631-1-1.html的11楼

Synopsis    :   JW_Area()
Version     :   1.0
Create Date :   2006-03-28
Author      :   Justin Wang
E-Mail      :   justin727@gmail.com
*/
;hiSetBindKey("layout" "<Key>3" "JW_Area()")
procedure(JW_Area()
   prog((cvId selObj area number shape Box points point1 point2 length width )
cvId = getEditRep(hiGetCurrentWindow())
selObj = geGetSelSet(cvId)
number = length(selObj)
if(zerop(number) then
  JWMessage("Error!!" 'Close "Please select a layer." )
  return()
)
geDeselectAll(hiGetCurrentWindow())
foreach(shape selObj
  area = 0
  case( shape~>objType
   ("rect"
    Box = shape~>bBox
    area = (car(cadr(Box)) - car(car(Box))) * (cadr(cadr(Box)) - cadr(car(Box)))
   )
   ("polygon"
    number = length(shape~>points)
    points = shape~>points
    points = append(points list(car(points)))
    while(!zerop(number)
     point1 = car(points)
     points = cdr(points)
     point2  = car(points)
     area = area + ( car(point1) * cadr(point2) )
     area = area - ( car(point2) * cadr(point1) )
     number--
    );while
    area = abs(area/2)
   )
   ("path"
    number = shape~>nPoints
    points = shape~>path
    width = shape~>width
    while(!zerop(number-1)
     point1 = car(points)
     points = cdr(points)
     point2 = car(points)
     if(equal(car(point1) car(point2))
      length = abs(cadr(point1) - cadr(point2))
      length = abs( car(point1) -  car(point2))
     );if
     area = area + length * width
     number--
    );while
    case(shape~>pathStyle
       ("extendExtend" area = area + width*width )
       ("varExtendExtend" area = area + (shape~>beginExt+shape~>endExt)*width )
       ("roundRound" area = area +  4/9.0 * width * width ) ;(w/3^2) * 4
       (t    );truncateExtend
    );case
   )
   (t
    area = 0.0
   )
  );case
  
  geSelectObject(shape)
  if(zerop(area) then
   JWMessage("Error!!" 'Close "This is not a layer.")
   sprintf(area "Area = unknown")
  else
   sprintf(area "Area = %f" area)  将Area=xx填入后赋值给area,给后续的JWMessage作为message元素
  )
  JWMessage("Layer Area" 'Close area)
  geDeselectFig(shape)
);foreach
   );prog
);procedure
;-------------------------------------------------------
procedure(JWMessage(title button message)
    prog( ()
hiDisplayAppDBox(
  ?name  'JWDBox
  ?dboxBanner title
  ?buttonLayout button
  ?dboxText message
)
    );prog
);procedure


点赞

全部作者的其他最新日志

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 1

    关注
  • 1

    粉丝
  • 1

    好友
  • 3

    获赞
  • 3

    评论
  • 12

    访问数
关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-28 22:03 , Processed in 0.014588 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部