我写的这个命令有点蹊跷,求测试
写了个根据四参数转换坐标并更新对象坐标列表的命令,现在碰到了个奇怪的问题:1、获取一条多段线的坐标列表,然后用坐标转换子函数得出的坐标
2、直接在坐标转换子函数中定义和多段线端点坐标一致的坐标计算得出的坐标
1和2得出的结果不一致 (defun zbzh (ppt_x ppt_y)
(setq d_x -15.0
d_y -3.0
k_k 1.0056046755
a_angle 0.0005081
)
(setq dd_x (+ d_x (* k_k (- (* (cos a_angle) ppt_x)(* (sin a_angle) ppt_y)))))
(setq dd_y (+ d_y (* k_k (+ (* (cos a_angle) ppt_y)(* (sin a_angle) ppt_x)))))
(setq ppt (list dd_x dd_y))
)
(defun c:zh (/ ss l_lengthdata new_list
last_list m_list en en_data b_list
pt pt_x pt_y pt_h new_pt_x
new_pt_ynew_pt pt_data data f_list
new_en_data
)
(setvar "nomutt" 1)
(setq ss (ssget '((0 . "LWPOLYLINE")))) ;选择多个对象
(setvar "nomutt" 0)
(setq l_length 0)
(repeat (sslength ss)
(setq i 0
j 0
n 0
z 0
m 0
mm 0
data (list '(0 0))
new_list(list '(0 0))
last_list (list '(0 0))
m_list (list '(0 0))
)
(setq en (ssname ss l_length)) ;获取第“l_length”个对象的对象名
(setq en_data (entget en)) ;获取对象列表
(setq b_list (list (car (reverse en_data))))
(while (/= (nth j en_data) nil)
(if (= (car (nth j en_data)) 10)
(progn
(setq pt (cdr (nth j en_data)))
(setq pt_x (car pt))
(setq pt_xx (distof (rtos pt_x 2 10)))
(setq pt_y (cadr pt))
(setq pt_yy (atof (rtos pt_y 2 10)))
(setq pt_h (caddr pt))
(if (= pt_h nil)
(setq pt_h 0)
)
(setq new_pt_x (car(zbzh pt_x pt_y)))
(setq new_pt_x (atof (rtos new_pt_x 2 12)))
(setq new_pt_y (cadr (zbzh pt_x pt_y)))
(setq new_pt_y (atof (rtos new_pt_y 2 12)))
(setq new_pt (list new_pt_x new_pt_y pt_h))
(setq pt_data (cons 10 new_pt))
(setq data (append (list (list pt_data
(nth (+ j 1) en_data)
(nth (+ j 2) en_data)
(nth (+ j 3) en_data)
)
)
data
)
)
(setq z (+ z 1))
(if (= z 1)
(setq f_list (carnth j en_data))
;获取对象数据中第一个节点坐标前的列表数据
) ;end if
) ;end progn
) ;end if
(setq j (+ j 1))
)
(setq data (cdr (reverse data)))
(while (/= (nth mm data) nil)
(setq nn 0)
(while (/= (nth nn (nth mm data)) nil)
(setq m_list
(append (list (nth nn (nth mm data))) m_list)
)
(setq nn (+ nn 1))
) ;end while
(setq mm (+ mm 1))
)
(setq m_list (cdr (reverse m_list)))
;;;对象更新
(setq new_en_data (append f_list m_list b_list))
(entmod new_en_data)
(setq l_length (+ l_length 1))
)
)
这是1中所用的命令 (defun c:test1()
(setq d_x -15.0
d_y -3.0
k_k 1.0056046755
a_angle 0.0005081
pt_x 2753748.277
pt_y 511748.461
)
(setq dd_x (+ d_x (* k_k (- (* (cos a_angle) pt_x)(* (sin a_angle) pt_y)))))
(setq dd_y (+ d_y (* k_k (+ (* (cos a_angle) pt_y)(* (sin a_angle) pt_x)))))
(setq dd_x (rtos dd_x 2 3))
(setq dd_y (rtos dd_y 2 3))
(princ dd_x )
(princ dd_y)
)
在这个函数中直接定义和多段线端点一致的坐标 pt_xpt_y,这两种计算得出的结果不一样。求解惑 xinxirong 发表于 2018-6-28 18:37
静下心来,一步一步调试。没有人比你更强大
谢谢鼓励,真心是调试了一整天了,都在获取节点坐标带到子函数内计算时就和直接定义坐标值带入计算出现差异。不然我也不会发帖求助的 自顶一下 静下心来,一步一步调试。没有人比你更强大 如此多的+-×,看得我入目三分,实在爱莫难助 evayleung 发表于 2018-6-28 19:20
如此多的+-×,看得我入目三分,实在爱莫难助
不好意思,水平有限,简单粗暴了 最后自顶一次 我来看MM的 发表于 2018-6-28 15:26
自顶一下
是不是因为,你定义的是三位小数,而实际坐标和你定义的有点差距啊
页:
[1]
2