saim 发表于 2022-7-5 15:34:43

区域交叉点

我正在寻找一个lisp例程,它可以为我提供截取两个区域的面积(值)。
lisp不需要绘制截取区域,我只需要值(事实上,如果它确实绘制了,我会在以后删除它)。
 
它用于计算给定区域的人口。我有一张所需地区的地图和一张人口密度的地图。正如你可能猜到的,它们只匹配很少。
所以我需要得到截取的面积,然后乘以密度,求所有值的和,结果就是我想要的。
我习惯于在截取点上断开多段线的副本,并连接生成的多段线,这会耗费大量时间(我有很多面积要计算)。
由于我必须(在excell上)显示计算所考虑的内容,lisp不必为我计算人口,只需计算面积。
 
如果有帮助的话,两条多段线总是闭合的(尽管对象的“闭合”属性可能为“false”-它只在开始的同一点结束),并且由线段组成(没有圆弧或任何东西)。两条多段线位于同一高程上。
 
你知道有Lisp程序的吗?如果没有,我应该如何开始发展自己的?
 
如果我的英语让你困惑,请告诉我。

ronjonp 发表于 2022-7-5 15:38:59

可能使用边界命令?

Lee Mac 发表于 2022-7-5 15:44:02

或者,将多段线的副本转换为面域(REGION命令),执行交点(INTERSECT命令),并查询结果面域的面积(特性选项板/面积命令)。
 
当然,这个过程可以使用LISP实现自动化。

saim 发表于 2022-7-5 15:46:26

“边界”工作得很好,直到我有2个结果区域(想想2个数字8形状的区域重叠)。然后,我必须对面积进行求和,但我找不到一种方法来检测是否需要这样做。
然后我尝试了“区域”,到目前为止效果很好。
我将花一些时间尝试为它制作一个lisp(并计算出一个很好的输出,可能我真的只需要打印出值)。如果我发现任何麻烦,我会呼救的。同时,非常感谢!

Lee Mac 发表于 2022-7-5 15:51:33

不客气-祝你节目顺利!

saim 发表于 2022-7-5 15:54:02

如何将上次创建的对象设置为变量?(因此我可以将其转换为区域并删除)
(setq cp1(car(entsel L)))和(setq cp1(car(entsel“L”))不工作。。。

Grrr 发表于 2022-7-5 15:57:59

在这里检查。

saim 发表于 2022-7-5 16:03:38

我喜欢这个论坛!你太快了,我没有机会用另一个问题编辑我的上一篇帖子。。。问题是:
而且我如何从一个地区获得信息?已尝试,用于测试
(entget car (entsel "\nSelect a region"))
并得到了一个“错误的参数类型”错误。。。
(当然,我确实选择了一个地区)

Grrr 发表于 2022-7-5 16:07:20

您缺少一组语法:
(entget (car (entsel "\nSelect a region")))

saim 发表于 2022-7-5 16:08:34

谢谢
 
但是一个区域的面积不是它的属性之一。。。
 
好的,我有“area”命令,它适用于区域。但当我将区域作为变量输入时,它不起作用。。。我做错了吗?
 
(defun c:arint() ;area na interseção entre duas polylinhas
(setq pl1 (car (entsel "\nSelecione o primeiro limite: "))); coloca o primeiro limite na variável pl1
(setq pl2 (car (entsel "\nSelecione o segundo limite: "))); coloca o segundo limite na variável pl2

(command "copy" pl1 "" (list 0 0 0) (list 100 0 0)); copia a pl
(setq cp1 (entlast)); joga a copia numa var
(command "region" cp1 ""); transforma em uma region
(setq r1 (entlast)); coloca a region numa var

(command "copy" pl2 "" (list 0 0 0) (list 100 0 0)); copia a pl
(setq cp2 (entlast)); joga a copia numa var
(command "region" cp2 ""); transforma em uma region
(setq r2 (entlast)); coloca a region numa var

(command "intersect" r1 r2 ""); cria uma intersecao das regions
(setq ainter (entlast)); coloca a nova region numa var

(command "area" "o" ainter)
)
 
而且
“area”命令为我提供了面积和周长。我怎样才能只获得面积,让用户更清楚地了解ir?
页: [1] 2
查看完整版本: 区域交叉点