我知道有时Autocad在顶级模式下的表现比3D好,但这没有任何区别。这是因为正如我所说,代码是正确的,但当输入值而不是osnap点时,模型似乎有一些不准确。
很难再现整个问题,因为它并非总是发生。
我注意到,复制的成员距离越远,错误可能越大。这意味着,当选择一条连接到节点的线,然后每5个单元复制一次时,就像一个单向阵列,每个单元的距离为5xn,它得到的最远可能是它所处的点不是完全预期的,例如不是15,5,10,而是15.0000000000000000001。我想这与Autocad的准确性有关,但我的lisp代码中的一些标准因此不能很好地工作。
有人遇到过Autocad精度问题吗?
就我的代码而言,它很长,我认为有人浏览它没有意义,但基本上我要做的是解析每个节点上的网络,在该节点上创建一个线的选择集,然后在选择中查找两条线之间的角度,如下所示:
- (setq A (distance (cdr (assoc 10 (entget (ssname s 0)))) (cdr (assoc 11 (entget (ssname s 0))))))
- (setq B (distance (cdr (assoc 10 (entget (ssname s 1)))) (cdr (assoc 11 (entget (ssname s 1))))))
- (setq C1 (distance (cdr (assoc 10 (entget (ssname s 0)))) (cdr (assoc 11 (entget (ssname s 1))))))
- (setq C2 (distance (cdr (assoc 10 (entget (ssname s 0)))) (cdr (assoc 10 (entget (ssname s 1))))))
- (setq C3 (distance (cdr (assoc 11 (entget (ssname s 0)))) (cdr (assoc 11 (entget (ssname s 1))))))
- (setq C4 (distance (cdr (assoc 11 (entget (ssname s 0)))) (cdr (assoc 10 (entget (ssname s 1))))))
- (setq C (max C1 C2 C3 C4))
- (setq ang (* (/ 180 pi) (acos (/ (- (+ (* A A) (* B B)) (* C C)) (* 2 (* A B))))))
|