surveyman 发表于 2022-7-6 07:38:13

你好,
 
我是一个全新的论坛,所以希望我已经张贴了这个OK。
 
这里编写的代码非常棒,几乎可以实现我想要的功能,只是它没有导出Z(高度,3D值)。这可能吗?文本文件中有第三列数据,但它是“0”,即使我尝试使用的数据是3D的。见下文
 
1,298768.523,696689.666,0
2,298788.225,696710.462,0
 
我注意到,导出的文件实际上就是我想要的,它是用“filename.dxf.xyz”或“filename.dwg.xyz”创建的。这只是一件小事,但可以编辑为“filename.xyz”吗
 
非常感谢大家迄今为止所做的工作。
 
测量员

ASMI 发表于 2022-7-6 07:40:29

+Z坐标(仅在文件中)和名称,不带。图纸。
 
(defun c:oxy3(/ fPt oldEcho oldNum dFlc dDec fVar cX cY cZ cNum *error*)

(defun *error*(msg)
   (setvar "CMDECHO" 1)
   (if fVar(close fVar))
   (princ)
   ); end of *error*

(princ(strcat "DIMSCALE="(rtos(getvar "DIMSCALE"))" "
        "DIMLFAC="(rtos(setq dFlc(getvar "DIMLFAC")))" "
        "DIMDEC="(rtos(setq dDec(getvar "DIMDEC")))" "
); end strcat
); end princ       
(setvar "CMDECHO" 0)
(if(= 0(getvar "USERI3"))(setvar "USERI3" 1)
   ); end if
(setq cNum(getint(strcat "\nSpecify first point number <"
                        (itoa(getvar "USERI3")) ">: ")))
(if cNum (setvar "USERI3" cNum))
(setq fVar(open(strcase(strcat(getvar "DWGPREFIX")
                       (vl-filename-base
                           (getvar "DWGNAME")) ".xyz")) "a"))
(while
   (setq fPt
   (getpoint
            (strcat "\nSpecify point or Right-Click to Quit <"(itoa(getvar "USERI3"))">: ")))
   (if(vl-cmdf "_.dimordinate" fPt "_t"
         (strcat
"["(itoa(getvar "USERI3"))"]" "\\P"
      (setq cX(rtos(* dFlc(car fPt))2 dDec)) "mE"
      "\\X"
      (setq cY(rtos(* dFlc(cadr fPt))2 dDec)) "mN"
      ); end strcat
         pause
         ); end vl-cmdf
(progn
(setq cZ(rtos(* dFlc(last fPt))2 dDec))
(write-line (strcat(itoa(getvar "USERI3")) "," cX "," cY "," cZ)fVar)
(setvar "USERI3"(1+(getvar "USERI3")))
); end progn
); end if
   ); end while
   (close fVar)
   (setvar "CMDECHO" 1)
(princ)
); end of c:oxy

(princ "\nType OXY3 to tag 3D coordinates ")

surveyman 发表于 2022-7-6 07:42:59

ASMI公司
 
太棒了,非常感谢!然而,现在得到了我需要的xyz列表,我失去了点数。可以添加吗?
 
文件名运行良好。
 
再次感谢
 
测量员

ASMI 发表于 2022-7-6 07:46:39

好啊我只是在文件中添加点编号。

surveyman 发表于 2022-7-6 07:50:33

ASMI公司
 
很抱歉耽搁了,但我没有意识到你在上一条消息中编辑了脚本。
 
除了将文件导出到小数点后2位之外,这是完美的。我看了看能不能把这件事简单化?编辑,但由于我是新的lisp无法看到该做什么。
 
你有没有可能帮我做最后的改变?
 
我非常感激。非常感谢
 
测量员

eldon 发表于 2022-7-6 07:52:29

不必更改Lisp,因为它采用维度设置(DIMDEC)中的小数位数。如果将标注样式设置为小数点后三位,则此Lisp将以小数点后三位导出。

ASMI 发表于 2022-7-6 07:55:02

 
您可以更改DIMDEC系统变量以更改小数位数。
 
或查找行:
 
(setq cX(rtos(* dFlc(car fPt))2 dDec))

(setq cY(rtos(* dFlc(cadr fPt))2 dDec))

(setq cZ(rtos(* dFlc(last fPt))2 dDec))
 
并将dDec变量更改为所需的小数位数,例如0表示无。

surveyman 发表于 2022-7-6 07:59:29

ASMI公司
 
谢谢使用DIMDEC可以正常工作,但不如编辑lisp方便。当我尝试对你建议的3行进行编辑时,我得到了如下数据
 
1,24905'-6.07",58066'-3.06",7'-5.5"
2,24907'-0.31",58068'-0.01",7'-6.67"
3,24908'-8.41",58069'-8.46",7'-7.21"
4,24910'-4.02",58071'-5.33",7'-8.24"
 
有什么问题吗?
 
非常感谢。

ASMI 发表于 2022-7-6 08:02:10

我认为您将RTOS函数的模式参数更改为3。这是RTOS(实到字符串)函数帮助:
 

agilia 发表于 2022-7-6 08:05:57

有人知道如何更改lisp例程来更改坐标吗
从毫米到米
页: 1 [2]
查看完整版本: 如何使用导出坐标数据