明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: changyiran

怎么求多段线与多段线相交部分的面积

  [复制链接]
发表于 2012-9-18 22:25:56 | 显示全部楼层
(defun chmj (en1 en2 /

代码的效用还是得自己实际去验证分析
 楼主| 发表于 2012-9-18 23:29:56 来自手机 | 显示全部楼层
Andyhon 发表于 2012-9-18 22:25  (defun chmj (en1 en2 /   代码的效用还是得自己实际去验证分析

首先感谢老师的帮助,我暂时用组码0的判断给解决了,改天我再研究那个函数的用法吧!还有个问题想请教下老师,运行程序时老提示已提取一个环,已创建一个面域之类的提示,我想把这些提示给屏蔽了,但是把cmdecho设为0不起作用,有什么方法能做到吗?
 楼主| 发表于 2012-9-18 23:39:43 来自手机 | 显示全部楼层
Andyhon 发表于 2012-9-18 22:25  (defun chmj (en1 en2 /   代码的效用还是得自己实际去验证分析

老师,我懂得那个函数的意思了,如果创建的不是空面域的话,property函数返回T,如果是空面域则将以前的面域删除了,因此函数返回值是错误,但又出现新问题了,如果返回值是ERROR的话,程序也会出错中断啊,这个该怎么解决呢?
发表于 2012-9-19 08:52:32 | 显示全部楼层
... 函数返回T...
==> 令为 Ok

(if (and  返回ok1 返回ok2) ....)
改用 cond 亦可
 楼主| 发表于 2012-9-19 09:00:35 来自手机 | 显示全部楼层
Andyhon 发表于 2012-9-19 08:52  ... 函数返回T...  ==> 令为 Ok  

en1已经被转换成面域了,不管是创建了面域也好,创建的是空面域也好,原面域(例如en1)都不复存在了,那么property函数测试的对象便为nil,都会返回错误,逻辑上行不通啊,不知老师测试了没有?
发表于 2012-9-19 09:14:56 | 显示全部楼层
先作验证
(vlax-property-available-p (vlax-ename->vla-object en1) 'area)
====================================
(defun chmj(en1 en2 / EN MJ VLA)
   (if (and (vlax-property-available-p (vlax-ename->vla-object en1) 'area)
            (vlax-property-available-p (vlax-ename->vla-object en2) 'area)
       )
     (progn  
       (command"region"en1"")
        ...
        ...
      )  
   )   
)
 楼主| 发表于 2012-9-19 09:35:31 来自手机 | 显示全部楼层
Andyhon 发表于 2012-9-19 09:14  先作验证  (vlax-property-available-p (vlax-ename->vla-object en1) 'area)  ========================== ...

老师估计我让你误会了,我的意思是:en1,en2肯定都是闭合多段线,即都有面积属性,而如果两个多段线之间没有重合部分的话,那么就会创建一个空面域,这个时候针对en1的property函数就会返回error,程序便会中断,而如果用组码0的值判断的话,当图元数据库中最后一个生成的对象恰好是面域的话,这样求出来的面积便是错误的,也就是说这种判断组码0的做法使程序不甚严谨,我已经验证了我的想法,因此很迷茫!
 楼主| 发表于 2012-9-19 10:07:12 来自手机 | 显示全部楼层
Andyhon 发表于 2012-9-19 09:14  先作验证  (vlax-property-available-p (vlax-ename->vla-object en1) 'area)  ========================== ...

已经解决,虽然创建面域或空面域后原有2个面域都被删除了,但是用entget函数查看,当创建出面域后返回原面域的图元表,而创建出空面域时返回nil,虽然不知道为什么会这样,但总算是解决了,再次感谢老师的无私帮助!
 楼主| 发表于 2012-9-19 10:16:47 来自手机 | 显示全部楼层
问题总是无穷无尽,当创建出面域后,en1的图元表不为nil,但en2的图元表为nil,于是我推测创建出的面域的图元名是和进行相交处理的第一个面域的图元名是一样的,经验证果然是正确的,总算真正把问题给解决了,真不容易啊!
发表于 2012-9-19 10:33:19 | 显示全部楼层
... 恰好是面域...
您再想想 与 (setq en(entlast)) 的 en 是同是异?
在 Intersect 之后 (entget en1) ?
那么 如在 Region 之前 验证有无交集呢? 或 被包含?
(就好像求两圆的切线...)
(此路不同另寻他道 / 无力打通隧道时的办法?)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-6 03:28 , Processed in 0.179394 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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