找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 787|回复: 7

[LISP程序]:申请一个LISP程序

[复制链接]
发表于 2004-2-9 15:55:23 | 显示全部楼层 |阅读模式

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

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

×
麻烦各位大师帮帮忙,面积的命令AREA只能一次性算一个封闭线段的面积,他只能点击选择。如果要算多个面积的话,可以在AREA命令输入后输入一个只命令S(subtract),然后再按只命令O(object)或则E。他就可以一次性算多个封闭的面积,而且可以自动计算面积的叠加,但是还是得点击选择,很麻烦,得一个一个面积快的点。能不能编辑一个程序可以让AREA命令的计算多个面积的时候有框选的命令?按了命令,然后对着多个小块块一框搞定,他还能自动计算出几个小块块总共的面积,我想这样会方便很多人的。虽然可能这个命令的利用率不是很大,但是还是很方便的。如果这个命令没有出现过的话,是个好意见哦。大家摆脱了!!为cad的将来都来贡献力量吧!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 2个

财富等级: 恭喜发财

发表于 2004-2-9 17:18:18 | 显示全部楼层
不知我的理解对否?

  1. (defun c:asas (/ a b c i ar z)
  2.   (setq z (getvar "cmdecho"))
  3.   (setvar "cmdecho" 0)
  4.   (setq a (ssget))
  5.   (setq b (sslength a))
  6.   (setq        c 0
  7.         i 0
  8.   )

  9.   (while (< i b)
  10.     (command "area" "o" (ssname a i))
  11.     (setq ar (getvar "area"))
  12.     (setq c (+ c ar))
  13.     (prompt (strcat "\n 第"
  14.                     (RTOS (1+ I))
  15.                     "个实体的面积为:"
  16.                     (rtos ar)
  17.             )
  18.     )

  19.     (setq i (1+ i))
  20.   )
  21.   (setvar "cmdecho" z)
  22.   (prompt (strcat "\n 总面积为:"
  23.                   (rtos c)
  24.           )
  25.   )
  26.   (princ)
  27. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-2-26 17:25:20 | 显示全部楼层
我真是孤陋寡闻了!还以为有点难度,谁知道……以后一定要好好努力,专门想一些对大家有点难度的问题才行!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-2-26 18:54:41 | 显示全部楼层
算面积的程序在论坛已经很多了:)你这个题目倒是可以作为lisp编程入门的练习。
另外,二楼程序没有用过滤会有些问题。比如line,text执行
(command "area" "o" (ssname a i))命令就不会自动结束。要么设置过滤,要么强行中断(command "area" "o" (ssname a i)  ^c)但还要做个命名是否正确执行的判断,要不得到的area是上一个成功执行的结果。因此,最好是加过滤:)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-4-21 15:48:29 | 显示全部楼层

对,我的确见过很多,但我认为都比较复杂

我是做建筑设计的,并不是做施工图,所以需要简单的命令,只要计算面积总和就够了,之前写的命令考虑的太多太复杂了,所以我需要一个针对性比较弱的简单的命令,这个就很适合我,至于您说的过滤什么的的确为大局着想是好,但是在这里,我不是很需要哦。呵呵所以我还是非常感谢楼上的啦
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-4-22 00:44:51 | 显示全部楼层
  1. (defun c:warea()
  2. (setvar "cmdecho" 0)
  3. (SETQ SS1 (SSGET))
  4. (setq n (SSlength ss1))
  5. (setq m 0)
  6. (setq nm 0)
  7. (SETQ nm0 0)
  8. (while (< m n )
  9.        (setq s1 (ssname ss1 m))
  10.        (SETQ SSL (ENTGET  S1))
  11.        (IF (/= (CDR (ASSOC 0 SSL)) "LWPOLYLINE")
  12.           (progn
  13.           (command "change" s1 "" "p" "la" "0" "")
  14.           (setq nm0 (+ 1 nm0))
  15.           )
  16.        )
  17.        (if (= (cdr (assoc 70  SSL)) 0)
  18.           (progn
  19.           (command "change" s1 "" "p" "la" "0" "")
  20.           (setq nm (+ 1 nm))
  21.           )
  22.       )
  23.      (setq m (+ 1 m))
  24.   )

  25. (if (or (/= nm 0) (/= nm0 0))
  26.       (progn
  27.       (princ "\n")
  28.       (princ nm0)
  29.       (princ "个物体不是POLYLINE,")
  30.       (PRINC nm)
  31.       (princ "个物体不是封闭的POLYLINE,已换至0层,请编辑后重新计算")
  32.       )
  33.      (PROGN
  34.      (setq m 0)
  35.      (setq total 0)
  36.       (while (< m n )
  37.         (setq s1 (ssname ss1 m))
  38.         (command "area" "e" s1)
  39.         (setq aaaa (getvar "area"))
  40.         (setq total ( + total aaaa))
  41.         (setq m (+ 1 m))
  42.       )
  43.      (princ "\n 总面积为")
  44.      (princ total)
  45.      )
  46. )
  47. (SETQ SS1 NiL)
  48. (setvar "cmdecho" 1)
  49. (princ)
  50. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-4-23 01:40:39 | 显示全部楼层
给个参考,还可自己加点东西

  1. (defun c:ssarea (/ ss e obj lst)
  2.   (setq ss (ssget))
  3.   (repeat (setq n (sslength ss))
  4.     (setq e  (ssname ss (setq n (1- n)))
  5.           obj(vlax-ename->vla-object e))
  6.     (if (vlax-property-available-P obj 'area);可加是否闭合的判断.
  7.         (setq lst (cons (list e (vlax-get obj 'area)) lst))
  8.     )
  9.   )(list (apply '+ (mapcar '(lambda(x) (cadr x)) lst)) lst)
  10. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2004-4-23 01:53:53 | 显示全部楼层
最初由 陌生人 发布
[B]给个参考,还可自己加点东西
(defun c:ssarea (/ ss e obj lst)
  (setq ss (ssget))
  (repeat (setq n (sslength ss))
    (setq e  (ssname ss (setq n (1- n)))
          obj(vlax-ename->vla-object e))... [/B]

  1. (defun c:test (/ ss n a aa)
  2.   (if (setq ss (ssget))
  3.     (progn
  4.       (setq n 0
  5.             a 0
  6.       )
  7.       (repeat (sslength ss)
  8.         (if (setq aa (vlax-curve-getarea (ssname ss n )))
  9.           (setq a (+ a aa))
  10.         )
  11.         (setq n (1+ n))
  12.       )
  13.     )
  14.   )
  15.   (princ "Area = ")
  16.   (princ a)
  17.   (princ)
  18. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 05:15 , Processed in 0.322580 second(s), 44 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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