lescad2008 发表于 2007-12-8 14:18:00

[求助]怎么提取圆心坐标?

<p>(defun c:ccord ()<br/>&nbsp; (setq ss (ssget))<br/>&nbsp; (setq n 0)<br/>&nbsp; (repeat (sslength ss)<br/>&nbsp;&nbsp;&nbsp; (setq en (ssname ss n ))<br/>&nbsp;&nbsp;&nbsp; (setq en_data (entget en))<br/>&nbsp;&nbsp;&nbsp; (setq cen_data (cdr (assoc 10 en_data)))<br/>&nbsp;&nbsp;&nbsp; (setq n (1+ n))<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp; (sub_write_data) <br/>&nbsp; (prin1)<br/>)</p><p>(defun sub_write_data ()<br/>&nbsp; (setq data_file (getfiled "写入坐标文件" "c:\\lsptools\\" "dat" 1))<br/>&nbsp; (setq ff (open data_file "w"))<br/>&nbsp; (write-line "对象名称&nbsp;&nbsp;&nbsp;&nbsp; 坐标尺寸" ff)<br/>&nbsp; (write-line "---------------------" ff)<br/>&nbsp; (write-line (itoa cen_data)&nbsp;&nbsp;&nbsp; ff)<br/>&nbsp; (close ff)<br/>&nbsp; (prin1)<br/>&nbsp; )<br/>(prompt "&lt;&lt;CCORD&gt;&gt;圆心提取程序")<br/>(prin1)</p><p>&nbsp; <br/>&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; </p>

lescad2008 发表于 2007-12-8 14:29:00

大家帮忙看一下!

sailorcwx 发表于 2007-12-8 15:20:00

<p>1.既然你的程序是提取圆心坐标,那么在选择的时候就应该把非圆图元过滤掉,这样可以减少运算量,提高程序的效率<br/>&nbsp; 所以建议把(setq ss (ssget))改成(setq ss (ssget '((0 . "CIRCLE"))))</p><p>2.你现在的程序最多也只是把最后一个圆的圆心坐标写入数据文件。如果你是想每得到一个圆心坐标就写一次的话,应该把write-line放进循环;这个时候文件的打开应该是"a"的方式,而不是"w";如果你想提取所有圆心坐标再一次写入的话,应该在循环前创建一个变量来存放圆心坐标。待循环完毕再一次写入,这个时候文件的打开方式可以是"a",也可以是"w".</p><p>3.你要知道cen_data得到的是什么类型的数据,是一个包含圆心XYZ数值的表,而write-line接受的是字符串.如果你不会转换或不想转换,可以考虑用princ写入</p>

ZZXXQQ 发表于 2007-12-9 08:06:00



(defun c:ccord ()
(if (setq data_file (getfiled "写入坐标文件" "c:\\lsptools\\" "dat" 1))
(if (setq ss (ssget '((0 . "CIRCLE")))) (progn
   (setq ff (open data_file "w"))
   (write-line "对象名称   坐标尺寸" ff)
   (write-line "---------------------" ff)
   (setq n 0)
   (repeat (sslength ss)
    (setq en (ssname ss n ))
    (setq en_data (entget en))
    (setq cen_data (cdr (assoc 10 en_data)))
    (setq n (1+ n))
(princ en ff) (princ " " ff) (princ cen_data ff) (princ "\n" ff)
   )
   (close f)
))
))
(prin1)
)
(prompt "<<CCORD>>圆心提取程序")
(prin1)

lescad2008 发表于 2007-12-9 12:16:00

谢谢指点!明天我试一下!

yangda0611 发表于 2007-12-30 00:36:00

<p>看看版主的!呵呵1</p>

wwwliuyu 发表于 2008-1-3 19:25:00

<p>学习了.</p><p></p>

cwjheihei 发表于 2008-1-5 22:21:00

<p>如何输出(12345678.21 45678941.25 0.00)而不是(1.23456e+007 &nbsp;4.56789e+007 0.00)</p>

ZZXXQQ 发表于 2008-1-5 23:41:00

<p>(princ (strcat "(" (rtos (car cen_data) 2 2) " "&nbsp;(rtos (cadr cen_data) 2 2) " "&nbsp;(rtos (last cen_data) 2 2) ")"))</p><p>注意:变量DIMZIN要事先设成零。不然有可能小数点后有可能无零。</p>

cwjheihei 发表于 2008-1-9 00:11:00

<p>图中实际坐标(12345678.21 45678941.25 0.00)</p><p>"rtos"后变为</p><p>(1.23456e+007 &nbsp;4.56789e+007 0.00)既有效为6位了原为10位的问题</p><p>能否输出字符为"12345678.21"为10位有效数</p>
页: [1] 2 3
查看完整版本: [求助]怎么提取圆心坐标?