找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 946|回复: 2

[求助] [求助]:谁帮我解决这个难题

[复制链接]
发表于 2008-4-30 15:35:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
我编的这个程序有时执行正确,有时错误

如果是矩形,就返回长和宽(我不会判断角度)
如果不是矩形,则返回周长和面积

;;;功能:输出面积长度或矩形长宽
(defun c:CS()
(vl-load-com)
(setq modelspace (vla-get-Modelspace
   (vla-get-activeDocument (vlax-get-acad-object))
  )
)
;; 选择多边形
(setq
  ent (ssname (ssget) 0)
  n (vlax-curve-getendParam ent)
)
;; 如果是矩形
(if (= n 4)
;; 计算长宽
  (setq
   di (vlax-curve-getDistAtParam ent 1)
   dj (- (vlax-curve-getDistAtParam ent 2) di)
   text (strcat "L= " (rtos di 2 0) " B= " (rtos dj 2 0))

;; 计算插入点
   p1 (vlax-curve-getstartpoint ent)
   p3 (vlax-curve-getPointAtParam ent 2)
   x1 (car p1)
   y1 (cadr p1)
   x3 (car p3)
   y3 (cadr p3)
   x0 (-
    (/ (+ x1 x3) 2)
    (* (abs(- x1 x3)) 0.3)
   )
   y0 (/ (+ y1 y3) 2)
  )
;; 插入文字
  (if (setq insertpt (list x0 y0 0))
   (if (setq height (/ (+ di dj) 15))
    (vla-addtext modelspace text (vlax-3D-point insertpt) height)
   )
  )
)
;; 如果不是矩形
;;计算周长和面积
(if (> n 4)
  
  (setq
   SL (vlax-curve-getDistAtParam ent n)
   SS (vlax-curve-getarea ent)
   text (strcat "SL= " (rtos (/ SL 1000) 2 2) "M SS= " (rtos (/ SS 1000000) 2 1) "M2")

;; 计算插入点
   p1 (vlax-curve-getstartpoint ent)
   p3 (vlax-curve-getPointAtParam ent 2)
   x1 (car p1)
   y1 (cadr p1)
   x3 (car p3)
   y3 (cadr p3)
   x0 (-
    (/ (+ x1 x3) 2)
    (* (abs(- x1 x3)) 0.3)
   )
   y0 (/ (+ y1 y3) 2)
  )
;; 插入文字
  (if (setq insertpt (list x0 y0 0))
   (if (setq height (/ SL 30))
    (vla-addtext modelspace text (vlax-3D-point insertpt) height)
   )
  )
)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 7229个

财富等级: 富甲天下

发表于 2008-4-30 15:52:24 | 显示全部楼层
有调试用文件否?

  1. (defun c:CS ()
  2.     (vl-load-com)
  3.     (setq modelspace
  4.            (vla-get-Modelspace
  5.              (vla-get-activeDocument (vlax-get-acad-object))
  6.            )
  7.     )
  8.     (setq ent (ssname (ssget) 0)
  9.           n   (vlax-curve-getendParam ent)
  10.     )
  11.     ;; 如果是矩形
  12.     (if (= n 4)
  13.       ;; 计算长宽
  14.       (progn         ; 加入 progn
  15.        (setq di   (vlax-curve-getDistAtParam ent 1)
  16.              dj   (- (vlax-curve-getDistAtParam ent 2) di)
  17.              text (strcat "L= " (rtos di 2 0) " B= " (rtos dj 2 0))
  18.   
  19.              ;; 计算插入点
  20.              p1   (vlax-curve-getstartpoint ent)
  21.              p3   (vlax-curve-getPointAtParam ent 2)
  22.              x1   (car p1)
  23.              y1   (cadr p1)
  24.              x3   (car p3)
  25.              y3   (cadr p3)
  26.              x0   (-
  27.                     (/ (+ x1 x3) 2)
  28.                     (* (abs (- x1 x3)) 0.3)
  29.                   )
  30.              y0   (/ (+ y1 y3) 2)
  31.        )
  32.         ;; 插入文字
  33.         (if (setq insertpt (list x0 y0 0))
  34.           (if (setq height (/ (min di dj) 15))
  35.             (vla-addtext
  36.               modelspace
  37.               text
  38.               (vlax-3D-point insertpt)
  39.               height
  40.             )
  41.           )
  42.         )
  43.       )
  44.       ;; 如果不是矩形
  45.       ;;计算周长和面积
  46.       (progn         ; 加入 progn
  47.        (setq SL   (vlax-curve-getDistAtParam ent (vlax-curve-getendParam ent))
  48.              SS   (vlax-curve-getarea ent)
  49.              text (strcat "SL= "
  50.                           (rtos (/ SL 1000) 2 2)
  51.                           "M SS= "
  52.                           (rtos (/ SS 1000000) 2 1)
  53.                           "M2"
  54.                   )
  55.   
  56.              ;; 计算插入点
  57.              p1   (vlax-curve-getstartpoint ent)
  58.              p3   (vlax-curve-getPointAtParam ent 2)
  59.              x1   (car p1)
  60.              y1   (cadr p1)
  61.              x3   (car p3)
  62.              y3   (cadr p3)
  63.              x0   (-
  64.                     (/ (+ x1 x3) 2)
  65.                     (* (abs (- x1 x3)) 0.3)
  66.                   )
  67.              y0   (/ (+ y1 y3) 2)
  68.        )
  69.         ;; 插入文字
  70.         (if (setq insertpt (list x0 y0 0))
  71.           (if (setq height (/ SL 50))
  72.             (vla-addtext
  73.               modelspace
  74.               text
  75.               (vlax-3D-point insertpt)
  76.               height
  77.             )
  78.           )
  79.         )
  80.       )
  81.     )
  82. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-4-30 16:16:48 | 显示全部楼层
好用了 谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-16 19:25 , Processed in 0.186727 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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