明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 787|回复: 2

[已解答] 框选三角形边框生成面积公式

[复制链接]
发表于 2015-7-29 21:36 | 显示全部楼层 |阅读模式
用海龙公式写的三角形公式不够精简,请教框选三角形边框(短线段组成)以三角形最长边为底,最长边上的高为高的三角形面积公式的lisp写法,示例见附件

本帖子中包含更多资源

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

x
发表于 2015-7-29 23:14 | 显示全部楼层
  1. (defun c:tt(/ lst are)
  2.   (if &th&
  3.          (progn (setq th (getreal (strcat "\n输入文字高度<"  (rtos  &th& 2 2 ) ">: ")))
  4.           (if (null th) (setq th  &th&) (setq &th& th))
  5.    )
  6.                 (progn  (setq th (getreal "\n请输入文字高度:<1.0>"))
  7.           (if (null th) (setq th 1  &th& th) (setq &th& th))
  8. ))
  9. (setq DimZin-old (getvar "DIMZIN"))  (setvar "DIMZIN" 8)
  10. (foreach a (vl-remove-if 'listp (mapcar 'cadr (ssnamex (setq ss (ssget '((0 . "LWPOLYLINE") (90 . 3)))))))
  11.   (setq pts (mapcar 'cdr (vl-remove-if '(lambda (a) (/= (car a) 10)) (entget a))))
  12.   (setq pts1 (car (vl-sort (mapcar'(lambda (x y)(list (distance x y) x y)) pts (cons (last pts)pts)) (function (lambda (e1 e2) (> (car e1) (car e2))))))
  13.   p1 (cadr pts1)
  14.   p2 (caddr pts1))
  15.   (entmakex (list (cons 0 "TEXT")(cons 10 (mapcar (function (lambda ( a b ) (/ (+ a b) 2.0))) p1 p2))(cons 1  (rtos (/ (fix (distance p1 p2)) 1000.0) 2 3))(cons 50 (angle p1 p2))(cons 40 th)))
  16.   (foreach a pts  (if (or (equal (distance a p1) 0 1e-6)(equal (distance a p2) 0 1e-6)) nil (setq p3 a)))
  17.   (entmakex (list (cons 0 "LINE")(cons 10 p3)(cons 11 (setq p33 (polar p3 (- (angle p1 p2) (/ pi 2)) (car (trans (mapcar '- p3 p1) 0 (mapcar '- p2 p1))))))(cons 62 1)))
  18.   (entmakex (list (cons 0 "TEXT")(cons 10 (mapcar (function (lambda ( a b ) (/ (+ a b) 2.0))) p3 p33))(cons 1  (rtos (/ (fix (distance p3 p33)) 1000.0) 2 3))(cons 50 (angle p3 p33))(cons 40 th)))
  19.   (setq lst (cons (strcat "1/2*"(rtos (/ (fix (car pts1)) 1000.0) 2 3)"*" (rtos (/ (fix (distance p3 p33)) 1000.0) 2 3)) lst)
  20.   are (cons (/ (fix (* 0.5 (distance p1 p2) (distance p3 p33))) 1000000.0) are))
  21.   )
  22.   (entmakex (list (cons 0 "TEXT")(cons 10 (getpoint "\n计算公式插入点"))(cons 1  (apply 'strcat (append (reverse(cdr (apply 'append (mapcar'(lambda (a)(list "+" a)) lst)))) (list "=" (rtos (apply '+ are) 2 3)))))(cons 40 th)))
  23.   
  24. (setvar "DIMZIN" DimZin-old)      
  25.   (princ))

评分

参与人数 1明经币 +1 收起 理由
flytoday + 1 很给力!一个程序应该 让他完美。。。加入编.

查看全部评分

 楼主| 发表于 2015-7-30 18:38 | 显示全部楼层
谢谢cable2004老师的指导。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-20 03:17 , Processed in 0.343823 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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