明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: lohas1118

有木有能计算重量的LISP.材质与密度需可修改。有木有啊!

  [复制链接]
 楼主| 发表于 2012-8-13 15:43 | 显示全部楼层
已经上传副件,有劳各位
回复

使用道具 举报

 楼主| 发表于 2012-8-13 15:56 | 显示全部楼层
preone 发表于 2012-8-9 18:26
重量=面积x长度x密度
分别赋值,然后列个公式,就出来了~~
赋值用     setq 函数

你好,我上传图档,你看这个样子可以编个程序吗
回复

使用道具 举报

发表于 2012-8-13 19:30 | 显示全部楼层
lohas1118 发表于 2012-8-13 15:56
你好,我上传图档,你看这个样子可以编个程序吗

我上传了一张图片,你参考一下,另外,因为是计算价格,对于计算结果的正确与否,你也需要校核一下再用~~

本帖子中包含更多资源

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

x

点评

麻烦你了,多谢!  发表于 2012-8-14 16:39
回复

使用道具 举报

 楼主| 发表于 2012-8-14 16:38 | 显示全部楼层
preone 发表于 2012-8-13 19:30
我上传了一张图片,你参考一下,另外,因为是计算价格,对于计算结果的正确与否,你也需要校核一下再用~~ ...

你好,我用的是2004版的CAD,输入的参数都是反着的。
第一个数值会跑到最后面,7.85变成.857,20变成了02

命令: tts 输入材料密度(kg/m^3):.857 输入计算长度或厚度(mm):02
输入计算面积(mm^2): 选择外框面域或多段线:
选择对象: 找到 1 个

选择对象: 找到 1 个,总计 2 个

选择对象:
逐一选择内部面域或多段线:
选择对象: 找到 1 个

选择对象:

选择对象:
指定输出字高:1
指定插入点:
回复

使用道具 举报

发表于 2012-8-14 18:12 | 显示全部楼层
本帖最后由 preone 于 2012-8-14 18:20 编辑
lohas1118 发表于 2012-8-14 16:38
你好,我用的是2004版的CAD,输入的参数都是反着的。
第一个数值会跑到最后面,7.85变成.857,20变成了02 ...


这个  应该不是程序的问题,你以前输入参数时 反着不?还是键盘坏了?
回复

使用道具 举报

发表于 2012-8-14 18:48 | 显示全部楼层
lohas1118 发表于 2012-8-14 16:38
你好,我用的是2004版的CAD,输入的参数都是反着的。
第一个数值会跑到最后面,7.85变成.857,20变成了02 ...

在网上找了半天 也没有找到 和你类似的问题 呵呵 看来你只能重新装cad了
还是你加载了什么 反向输出的 插件?
对了 ,上面那个程序有点小bug,我已经在上面的程序里改过来了,你更新一下就好了~~

点评

请教下那个是更新后的?  发表于 2012-8-15 16:24
这个真没有,不过我用2006版的就没有问题。多谢了  发表于 2012-8-15 16:22
回复

使用道具 举报

发表于 2012-8-14 22:00 | 显示全部楼层
本帖最后由 chlh_jd 于 2012-8-14 22:18 编辑
  1. (defun c:test  (/ ss ssen wk a0  l0 a1 l1 str del l p h z en ent  is ptl c
  2.     pt)
  3.   ;;by GSLS(SS) 2012-8-14
  4.   ;;图形面积相减并设置密度和厚度,输出文字
  5.   (if (and (setq ss (ssget '((0 . "LWPOLYLINE,ELLIPSE,CIRCLE,SPLINE"))))
  6.      (setq ssen (ss2lst ss nil))) ;_选择对象
  7.     (if  (setq
  8.     ssen (vl-remove-if-not
  9.      (function
  10.        (lambda (x)
  11.          (or (vlax-curve-isclosed x)
  12.        (equal  (vlax-curve-getstartpoint x)
  13.         (vlax-curve-getendpoint x)
  14.         1e-8))))
  15.      ssen)) ;_过滤非封闭曲线
  16.       (progn
  17.   (setq ssen
  18.          (mapcar
  19.      (function (lambda (x / l)
  20.            (setq l (SS:ClosedCurve:GetPoints x 10))
  21.            (if (equal (car l) (last l) 1e-8)
  22.              (setq l (cdr l)))
  23.            (list (vlax-curve-getarea x) l)))
  24.      ssen)) ;_计算曲线面积和坐标表
  25.   (setq ssen (vl-sort ssen
  26.           (function (lambda (e1 e2)
  27.           (> (car e1) (car e2)))))) ;_排序
  28.   (setq wk   (car ssen)
  29.         ssen (cdr ssen)
  30.         a0   (car wk)
  31.         l0   (cadr wk))
  32. ;_减法计算
  33.   (if ssen
  34.     (foreach a  ssen
  35.       (setq a1 (car a)
  36.       l1 (cadr a))
  37.       (if
  38.         (not (vl-some (function (lambda (x)
  39.           (< (pipl? x l0 1e-8) 0)))
  40.           l1))
  41.          (setq a0 (- a0 a1)))))
  42.   (if
  43.     (and
  44.       a0
  45.       (not (minusp a0))
  46.       (not (prompt
  47.        "\n输入密度kg/m^3和厚度mm(空格或分号逗号隔开):"))
  48.       (setq str (lm:getstring "7850 20"))
  49.       (cond ((wcmatch str "* *")
  50.        (setq del " "))
  51.       ((wcmatch str "*;*")
  52.        (setq del ";"))
  53.       ((wcmatch str ",")
  54.        )
  55.       ((setq del "-")))
  56.       (setq l (mapcar 'atof (string->strlst str del)))
  57.       (setq p (car l))
  58.       (setq h (cadr l))
  59.       ) ;_条件输入
  60.      (progn
  61.        (setq z (* a0 h p 1e-9))
  62.        (setq str (strcat (rtos z 2 3) " kg"))
  63.        (setq en (my_entsel "\n选择要修改的文字对象或点:"
  64.          (list (cons 0 "TEXT"))
  65.          nil))
  66.        (setq p (car en))
  67.        (if (cadr en)
  68.          (entmod (setq ent (entget (cadr en))
  69.            ent (subst (cons 1 str) (assoc 1 ent) ent)))
  70.          (if (and  (setq en
  71.              (entmakex (list (cons 0 "TEXT")
  72.                  (cons 1 str) ;_文字内容
  73.                  (cons 10 (trans p 1 0)) ;_插入点
  74.                  (cons 72 0) ;_
  75.                  (cons 73 1) ;_72 73对正样式,左对齐
  76.                  (cons 62 256) ;_文字颜色,随层
  77.                  (cons 40 300.) ;_文字高度
  78.                  (cons 41 0.7) ;_文字宽度
  79.                  (cons 50 0.0) ;_文字旋转角度
  80.                  (cons 7 "STANDARD") ;_文字样式
  81.                  )))
  82.       (setq ent (entget en))
  83.       (setq is t))
  84.      (while  is
  85.        (setq ptl (grread t 15 0))
  86.        (setq c (car ptl))
  87.        (cond
  88.          ((= c 5)
  89.           (setq pt (cadr ptl))
  90.           (setq ent  (subst (cons 11 pt)
  91.                (assoc 11 ent)
  92.                ent))
  93.           (entmod ent)
  94.           (entupd en)
  95.           )
  96.          ((= c 3)
  97.           (setq is nil)
  98.           )
  99.          ) ;_cond
  100.        ) ;_while
  101.      ) ;_if
  102.          ) ;_if
  103.        (princ (strcat "\n面积与密度换算重量为" str "。"))
  104.        ) ;_progn
  105.      (princ "\n未输入密度和厚度。")
  106.      ) ;_if
  107.   ) ;_progn
  108.       (princ "\n选择对象类型错误,未包含封闭曲线。")
  109.       ) ;_if
  110.     (princ "\n未选择对象,请重新执行命令。")
  111.     ) ;_if
  112.   (princ)
  113.   ) ;_defun
  114. ;;;配套函数
  115. ;;;转换选择集为表
  116. (defun ss2lst  (ss vla / a e i)
  117.   (if (= (type ss) (quote PICKSET))
  118.     (progn
  119.       (setq i -1)
  120.       (while (setq e (ssname ss (setq i (1+ i))))
  121.   (if vla
  122.     (setq e (vlax-ename->vla-object e))
  123.     nil)
  124.   (setq a (cons e a))))
  125.     nil))
  126. ;;;判断点是否在封闭多边形内 .
  127. ;;;Function : judge a point location with polygon
  128. ;;;Arg : pt -- a point
  129. ;;;      pts -- points of polygon
  130. ;;;      eps -- allowance
  131. ;;;return :
  132. ;;;     -1 -- out of polygon , 0 -- at , 1 -- in
  133. (defun pipl?  (pt pts eps / is at a)
  134.   ;; by 狂刀  
  135.   ;; Edit by GSLS(SS) 2011.03.28
  136.   ;; Solved the problem : if a point at the given polygon , it perhap return T or NIL .  
  137.   (if (vl-some (function (lambda (x) (equal x pt eps))) pts)
  138.     0
  139.     (progn (setq is
  140.       (equal
  141.         PI
  142.         (abs
  143.           (apply
  144.       (function +)
  145.       (mapcar
  146.         (function (lambda (x y / a)
  147.               (setq a
  148.                (rem (- (angle pt x) (angle pt y))
  149.               PI))
  150.               (if (equal (+ (distance pt x)
  151.                 (distance pt y))
  152.              (distance x y)
  153.              Eps)
  154.           (setq at T))
  155.               a))
  156.         (cons (last pts) pts)
  157.         pts)))
  158.         eps))
  159.      (cond (at 0)
  160.      (is 1)
  161.      (T -1)))))
  162. ;;字符串转为表
  163. (defun string->strlst  (str del / lst a s1 cha pos i)
  164.   (setq  s1 ""
  165.   i  0
  166.   a  (ascii del))
  167.   (while (setq pos (vl-string-position a str i))
  168.     (setq s1 (substr str (1+ i) (- pos i)))
  169.     (if  (/= s1 "")
  170.       (setq lst (cons s1 lst)))
  171.     (setq i (1+ pos)))
  172.   (setq s1 (substr str (1+ i)))
  173.   (if (/= s1 "")
  174.     (setq lst (cons s1 lst)))
  175.   (reverse lst))
  176. ;;封闭曲线取点函数
  177. (defun SS:ClosedCurve:GetPoints   (en acc / ent et)
  178.   ;;by GSLS(SS)
  179.   (setq
  180.     ent  (entget en)
  181.     et  (cdr (assoc 0 ent)))
  182.   (cond
  183.     ((= et "LWPOLYLINE")
  184.      ((lambda (/ a b vetex bu p1 p2 l r ang an1 N)
  185.   (while (setq ent (member (assoc 10 ent) ent))
  186.     (setq  b     (cons (cdar ent) b)
  187.     ent   (member (assoc 42 ent) ent)
  188.     b     (cons (cdar ent) b)
  189.     ent   (cdr ent)
  190.     vetex (cons b vetex)
  191.     b     nil))
  192.   (while vetex
  193.     (setq  a     (car vetex)
  194.     vetex (cdr vetex)
  195.     bu    (car a)
  196.     p1    (cadr a))
  197.     (if l
  198.       (setq p2 (car l))
  199.       (setq p2 (cadr (last vetex))))
  200.     (if (equal bu 0 1e-6)
  201.       (setq l (cons p1 l))
  202.       (progn
  203.         (setq ang  (* 2 (atan bu))
  204.         r  (/ (distance p1 p2)
  205.          (* 2 (sin ang))
  206.          )
  207.         c  (polar p1
  208.              (+ (angle p1 p2) (- (/ pi 2) ang))
  209.              r
  210.              )
  211.         r  (abs r)
  212.         ang  (abs (* ang 2.0))
  213.         N  (abs (fix (/ ang 0.0174532925199433)))
  214.         N  (min N (1+ Acc)))
  215.         (if (= N 0)
  216.     (setq l (cons p1 l))
  217.     (progn
  218.       (setq  an1 (/ ang N)
  219.       ang (angle c p2)
  220.       )
  221.       (if (not (minusp bu))
  222.         (setq an1 (- an1))
  223.         )
  224.       (repeat (1- N)
  225.         (setq ang (+ ang an1)
  226.         l   (cons (polar c ang r) l)
  227.         )
  228.         )
  229.       (setq l (cons p1 l)))))))
  230.   l)))
  231.     ((= et "CIRCLE")
  232.      ((lambda (c R / sa l)
  233.   (setq sa 0.0)
  234.   (repeat  180
  235.     (setq  l  (cons (polar c sa R) l)
  236.     sa (+ sa 0.0174532925199433)))
  237.   (setq l (reverse l))
  238.   (append
  239.     l
  240.     (mapcar
  241.       (function
  242.         (lambda (p)
  243.     (mapcar (function +) c (mapcar (function -) c p))))
  244.       l
  245.       )))
  246.        (cdr (assoc 10 ent))
  247.        (cdr (assoc 40 ent))))
  248.     ((= et "SPLINE")
  249.      ((lambda (/ r _oce)
  250.   (setq _oce (getvar "CMDECHO"))
  251.   (setvar "CMDECHO" 0)
  252.   (if (vl-catch-all-apply
  253.         (function vl-cmdf)
  254.         (list "_PEDIT"
  255.         (vlax-vla-object->ename
  256.           (vla-copy (vlax-ename->vla-object en))
  257.           )
  258.         ""
  259.         acc
  260.         ""))
  261.     (progn
  262.       (setq l (ss-assoc 10 (entget (setq r (entlast)))))
  263.       (if  (vlax-curve-isClosed r)
  264.         (setq l (append l (list (car l)))))
  265.       (entdel r)))
  266.   (setvar "CMDECHO" _oce)
  267.   l)))
  268.     ((= et "ELLIPSE")
  269.      ((lambda (/ e l _os)
  270.   (setq _os (getvar "OSMODE"))
  271.   (setvar "OSMODE" 0)
  272.   (vl-catch-all-apply
  273.     (function vla-offset)
  274.     (list (vlax-ename->vla-object en) 0.1))
  275.   (setq e (entlast))
  276.   (vl-catch-all-apply
  277.     (function vla-offset)
  278.     (list (vlax-ename->vla-object (entlast)) -0.1))
  279.   (entdel e)
  280.   (setq e (entlast))
  281.   (setq l (ss-assoc 10 (entget e)))
  282.   (entdel e)
  283.   (setvar "OSMODE" _os)
  284.   l)))))
  285. ;;
  286. ;;;by Lee Mac
  287. (defun LM:GetString  (#Default / dcTag result)
  288.   (cond  ((<= (setq dcTag (load_dialog "ACAD")) 0))
  289.   ((not (new_dialog "acad_txtedit" dcTag)))
  290.   (t
  291.    (set_tile "text_edit" #Default)
  292.    (action_tile
  293.      "accept"
  294.      "(setq result (get_tile "text_edit")) (done_dialog)")
  295.    (action_tile "cancel" "(done_dialog)")
  296.    (start_dialog)
  297.    (unload_dialog dcTag)))
  298.   result)
  299. ;; 【索引表查找】全部
  300. ;;;获取表中索引码相同的所有元素
  301. ;;;ss-assoc 最快
  302. (defun ss-assoc   (a lst / b res)
  303.   (while (setq b (assoc a lst))
  304.     (setq lst (cdr (member b lst))
  305.     res (cons (cdr b) res)
  306.     ))
  307.   (reverse res))
  308. ;;
  309. (defun my_entsel
  310.       (STR FILTER PRO / PT SS_NAME SS old_modemacro)
  311.   (setq old_modemacro (getvar "MODEMACRO"))
  312.   (if (/= (type STR) (quote STR))
  313.     (progn
  314.       (princ "\n变量类型不对,STR应为字符串。\n")
  315.       (eval NIL))
  316.     (progn
  317.       (if (/= (type FILTER) (quote list))
  318.   (progn
  319.     (princ "\n变量类型不对,FILTER应为表。\n")
  320.     (eval NIL))
  321.   (progn
  322.     (princ STR)
  323.     (setvar "MODEMACRO" STR) ;_这里添加选择修改
  324.     (setq  PT   (grread t 4 2)
  325.     is_go_on t)
  326.     (while (and (/= 3 (car PT))
  327.           (/= 11 (car PT))
  328.           (/= 25 (car pt))
  329.           is_go_on)
  330.       (cond
  331.         ((and (= 2 (car pt))
  332.         (or (= 13 (cadr pt)) (= 32 (cadr pt)))) ;_Enter,Space.
  333.          (setq is_go_on nil))
  334.         ((and (= 2 (car pt))
  335.         (or (= 115 (cadr pt)) (= 83 (cadr pt)))) ;_S set arg.
  336.          (eval pro)
  337.          (princ STR))
  338.         ((and (= 5 (car PT)) (vl-consp (cadr PT)))
  339.          (setq SS (ssget (cadr PT) FILTER))
  340.          (if SS_NAME
  341.      (redraw SS_NAME 4))
  342.          (setq SS_NAME NIL)
  343.          (if SS
  344.      (progn
  345.        (setq SS_NAME (ssname SS 0))
  346.        (redraw SS_NAME 3))
  347.      (setvar "MODEMACRO" old_modemacro)))
  348.         ) ;_cond
  349.       (setq PT (grread t 4 2))
  350.       ) ;_while
  351.     (setvar "MODEMACRO" old_modemacro)
  352.     (if (and (/= 11 (car pt)) (/= 25 (car pt)))
  353.       (progn
  354.         (setq PT (cadr PT))
  355.         (setq SS (ssget PT FILTER))
  356.         (setvar "LASTPOINT" PT)
  357.         (if SS_NAME
  358.     (redraw SS_NAME 4)
  359.     )
  360.         (setq SS_NAME NIL)
  361.         (if SS
  362.     (progn
  363.       (setq SS_NAME (ssname SS 0))
  364.       (list (trans PT 1 0) SS_NAME))
  365.     (list (trans PT 1 0))))
  366.       (if  ss_name
  367.         (redraw ss_name 4))))))))

本帖子中包含更多资源

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

x

点评

完美,如果能指定字高就更完美了!  发表于 2012-8-15 16:27

评分

参与人数 1明经币 +1 金钱 +10 收起 理由
lohas1118 + 1 + 10 很给力!

查看全部评分

回复

使用道具 举报

发表于 2012-8-15 09:14 | 显示全部楼层
狂刀厉害的
回复

使用道具 举报

 楼主| 发表于 2012-8-15 16:57 | 显示全部楼层
完美,如果能指定字高就更完美了!
回复

使用道具 举报

 楼主| 发表于 2012-8-15 17:17 | 显示全部楼层
chlh_jd 发表于 2012-8-14 22:00

请教下像这种图形,用这个怎么算不出来。

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 22:22 , Processed in 0.373124 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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