找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: ljg516

[LISP程序]:计算任意封闭图形面积的LISP小程序

[复制链接]
发表于 2004-8-7 01:30:15 | 显示全部楼层
好好想想,追踪一下新生成的实体的规律,就可以解决孤岛问题了:)继续努力
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-7 09:51:03 | 显示全部楼层
最初由 xiaping 发布
[B]
你把这一行代码(... [/B]


谢谢了,我也发现了是我设置的问题,将设置更改就没有问题了,谢谢了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2004-10-9 16:05:17 | 显示全部楼层
回了几次头了,就试试我的这个程序吧。
可以去除孤岛面积。当时写这个程序是为了求出条形基础的净面积。
后面的程序是设定相关参数的。主要是出图比例、绘图比例及显示的单位。


  1. (defun C:jmj (/        ss sss sc os xzs pt n stm stmm mj_txt mjm_txt mjj_txt
  2.               test)

  3.   (princ (strcat "\n***基底面积自动计算软件040201  葛磊***"))
  4.   (princ (strcat "\n        [共享软件,版权所有]"))
  5.   (princ)

  6.   (command "undo" "be")
  7.   (setq        olderr        *error*                        ; Initialize variables
  8.         *error*        chgterr
  9.   )
  10.   (setvar "CMDECHO" 0)

  11.   (setq os (getvar "OSMODE"))
  12.   (setvar "OSMODE"
  13.           (if (> os 16383)
  14.             os
  15.             (+ 16384 os)
  16.           )
  17.   )
  18.   (setq lay (getvar "clayer"))
  19.   (if mj_sc
  20.     (setq mj_sc mj_sc)
  21.     (setq mj_sc 1000000)
  22.   )
  23.   (if xd
  24.     (setq xd xd)
  25.     (setq xd "m")
  26.   )

  27.   (if (or (= nil (tblsearch "layer" "文字__面积"))
  28.           (/= (cdr (assoc 8 (tblsearch "layer" "文字__面积"))) 0)
  29.       )
  30.     (command "layer" "m" "文字__面积" "c" "255" "文字__面积" "")
  31.     (command "layer" "s" "文字__面积" "" "")
  32.   )
  33. ;;; 如果图中原有面域则删除
  34.   (setq ss (ssget "X" '((0 . "REGION"))))
  35.   (if ss
  36.     (command "erase" ss "")
  37.   )

  38.   (setq pt (getpoint "\n请点取基底范围内一点<退出>:"))
  39.   (if pt
  40.     (progn
  41.       (setvar "HPBOUND" 0)
  42.       (command "boundary" pt "")
  43.       (setq ss (ssget "X" '((0 . "REGION"))))



  44.       (if ss                                ; 如果选取到了实体
  45.         (progn
  46.           (setq xzs (sslength ss))
  47.           (setq mjm_txt 0)                ;mj_txt---重叠面积

  48.           (setq n 1)                        ;n---实体数
  49.           (while (<= n xzs)                ;对选取的实体逐个进行处理
  50.             (setq stm (ssname ss (1- n))) ;stm---实体名称
  51.             (command "area" "o" stm)
  52.             (setq mjj_txt (getvar "AREA")) ;mj_txt---重叠面积
  53.             (if        (< mjm_txt Mjj_txt)
  54.               (setq stmm    stm
  55.                     Mjm_txt Mjj_txt
  56.               )
  57.             )
  58.             (setq n (+ 1 n))                ;下一个实体
  59.           )                                ;while


  60.           (setq sss (ssadd))                ;ss---获得生成的面域实体
  61.           (setq sss (ssadd stmm sss))        ;获得生成的面域实体
  62.           (setq ss (ssdel stmm ss))        ;获得生成的面域实体
  63.           (if (< 1 xzs)
  64.             (command "subtract" sss "" ss "")
  65.           )                                ;如果获得了一个以上的面域,则生成交集。
  66.           (command "area" "o" (entlast)) ;获得交集的面积
  67.           (setq mj_txt (getvar "AREA"))        ;mj_txt---交集面积
  68.           (setq mj_txt (rtos (/ mj_txt mj_sc) 2 2))
  69.           (setq mjm_txt (rtos (/ mjm_txt mj_sc) 2 2))
  70.           (cond        ((or (eq xd "mm") (eq xd "MM"))
  71.                  (alert        (strcat        "基底外包面积为: "
  72.                                 mjm_txt
  73.                                 " 平方毫米   基底净面积为: "
  74.                                 mj_txt
  75.                                 " 平方毫米"
  76.                                )
  77.                  )
  78.                 )
  79.                 ((or (eq xd "cm") (eq xd "CM"))
  80.                  (alert        (strcat        "基底外包面积为: "
  81.                                 mjm_txt
  82.                                 " 平方厘米   基底净面积为: "
  83.                                 mj_txt
  84.                                 " 平方厘米"
  85.                                )
  86.                  )
  87.                 )
  88.                 ((or (eq xd "m") (eq xd "M"))
  89.                  (alert        (strcat        "基底外包面积为: "
  90.                                 mjm_txt
  91.                                 " 平方米   基底净面积为: "
  92.                                 mj_txt
  93.                                 " 平方米"
  94.                                )
  95.                  )
  96.                 )
  97.           )


  98.         )                                ;progn ss
  99.         (alert (strcat "\n无法得到正确的基底边界"))

  100.       )                                        ;if ss
  101.     )                                        ;progn pt
  102.   )                                        ;if pt

  103.   (command "layer" "s" lay "")
  104.   (setvar "osmode" os)
  105.   (setq *error* olderr)                        ; Restore old *error* handler
  106.   (command "undo" "e")
  107.   (command "undo" "")

  108.   (princ (strcat "\n***基底面积自动计算软件040201  葛磊***"))
  109.   (princ (strcat "\n        [共享软件,版权所有]"))
  110.   (princ)
  111. )




  1. (defun C:mjs (/ ctscale htccale xdw xdws)
  2.   (setvar "CMDECHO" 0)

  3.   (if (= cts nil)
  4.     (setq cts 100)
  5.   )
  6.   (setq
  7.     ctscale (getreal (strcat "\n出图比例(1:?) <" (rtos cts 2 0) ">:"))
  8.   )
  9.   (if (= ctscale nil)
  10.     (setq ctscale cts)
  11.   )
  12.   (setq cts ctscale)

  13.   (if (= htc nil)
  14.     (setq htc 100)
  15.   )
  16.   (setq
  17.     htccale (getreal (strcat "\n绘图比例(1:?) <" (rtos htc 2 0) ">:"))
  18.   )
  19.   (if (= htccale nil)
  20.     (setq htccale htc)
  21.   )
  22.   (setq htc htccale)

  23.   (if (or (= xd nil) (= xd ""))
  24.     (setq xd "M")
  25.   )
  26.   (setq xdw (getstring (strcat "\n显示单位 <" xd ">:")))
  27.   (if (= xdw "")
  28.     (setq xdw xd)
  29.   )
  30.   (setq xd xdw)
  31.   (cond        ((or (eq xdw "mm") (eq xdw "MM")) (setq xdws 1))
  32.         ((or (eq xdw "cm") (eq xdw "CM")) (setq xdws 1000))
  33.         ((or (eq xdw "m") (eq xdw "M")) (setq xdws 1000000))
  34.   )
  35.   (setq mj_sc (* (* (/ ctscale htccale) (/ ctscale htccale)) xdws))
  36.   (princ)

  37. )


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

使用道具 举报

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

使用道具 举报

发表于 2004-11-23 13:37:15 | 显示全部楼层
晕,虽然我的版本比1楼楼主的新,但19楼楼主写得好全,似乎比我的版本还新,我去研究一下
----------------------------
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-10 15:36:46 | 显示全部楼层
19楼的东东不错,但是用BOUNDARY命令不是很保险,当实体高度不一致的时候会失败
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

发表于 2005-1-15 02:06:39 | 显示全部楼层
我正好想编一个这样的程序,受到很大启发。非常感谢!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 21:17 , Processed in 0.179552 second(s), 46 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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