hay123 发表于 2022-7-6 09:43:32

向下取整多边形区域并添加

你好
我对lisp例程一无所知,一直在努力学习。我希望这里的人能乐意帮我写一篇。
首先,我为勘测员工作,必须计算地层平面图的单位面积。我们总是将面积向下舍入,因此内部面积为28.8的单元将被称为28+阳台7.2(称为7)+车位13.6(13),(因此28+7+13)
我使用多边形创建区域,并始终添加一个字段供测量员检查。
我想要的是一个lisp例程,在这里我可以为每个地块拾取和添加多边形,为我拾取的每个多边形向下舍入区域。
 
我在Acad讨论中找到了下面的代码,我认为这应该是一个很好的起点,但我从此迷失了方向
 
(定义C:AA()
(setq对象(car(entsel“\n选择区域多段线:”))
(if(equal(vlax curve getStartPoint AoObject)(vlax curve getEndPoint AoObject)1e-
(编程;然后
(命令“area”“e”A对象)
(setq Tarea(rtos(/(getvar“area”)1000000.0)2 0)
(setq总面积(strcat Tarea“sqm”))
(警报总面积)
); 结束程序
(警告“多段线未闭合。”);其他的
); 如果结束
(普林斯)
); 结束defun
{code}

alanjt 发表于 2022-7-6 10:01:14

只需使用fix将其转换为整数。
如。
(fix <Real>)
 
哦,是的,还有:代码张贴礼仪

Organic 发表于 2022-7-6 10:08:52

为什么你要把28.8的面积缩小到28???我理解土地管理不应该按话算四舍五入,尽管为什么不改为28.5?

VVA 发表于 2022-7-6 10:20:54

可能需要

;;Rounding By John W. Anstaett
;;use (rounding mynumber roundto offset)
;;mynumber this is the number you need to round off
;;Roundto is the number to roundto
;;offset set to 0 will roundto to next lower number
;;offset set to 1 will next higher number
;;offset set to 0.5 will be to nerest number
;;exp (rounding 12.1 5 1)return 15
;;exp (rounding 12.1 5 0) return 10
;;exp (rounding 12.49 5 0.5) reutne 10
;;exp (rounding 12.5 5 0.5) return 15
;; exp (rounding 0.68 0.25 0.5) return 0.75

(defun rounding(mynumber roundto offset)
(setq temp
(*(fix(+ (/ mynumber roundto) offset )) roundto)
)
)

使用

Lee Mac 发表于 2022-7-6 10:25:38

这些可能有助于:
 
http://lee-mac.com/totallengthandarea.html
 
关于舍入:
 
示例:
 

_$ (LM:Round 2.6)
3
_$ (LM:Round 2.4)
2
_$ (LM:Roundto 2.62571 1)
2.6
_$ (LM:Roundto 2.62571 2)
2.63
_$ (LM:Roundto 2.62571 3)
2.626
_$ (LM:Roundto 2.62571 4)
2.6257
_$ (LM:Roundto 2.62571 5)
2.62571
 
或者,要获得小于面积的最大整数,请按照Alan的建议使用fix。

alanjt 发表于 2022-7-6 10:35:04

此外,如果需要实数而不是整数,则可以浮动LM:Round例程的返回值。
 

 
4

hay123 发表于 2022-7-6 10:44:57

谢谢你的回复。将有一个发挥,并希望得到一些工作
 
至于取整,我们只使用整数。我们四舍五入,主要是因为人们使用我们的计划来出售公寓,最好告诉别人他们购买28平方米的内部公寓,让他们得到更多,然后说你购买了29平方米&实际上更少。
页: [1]
查看完整版本: 向下取整多边形区域并添加