明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1247|回复: 9

[已解答] 求赐教:这段作垂线程序问题出在哪?

[复制链接]
发表于 2013-7-8 20:50:11 | 显示全部楼层 |阅读模式
以下一段程序是读取文本文件,数据格式每行为“a1,2562.24,141542.55”,文件包括多行该类数据,其中每行第一个数为点号,后两个数为坐标。
本程序的目的为:遍历数据文件,以每一行的坐标数据向指定多义线作垂线,在未加“
    (command "line" p0 (setvar "osmode" 128)(setq p3(getpoint p4 "\N输入下一点:")) (setvar "osmode"0))

时,程序可遍历文本文件全部数据,加了该行之后,就只能读取第一行数据并对指定多义线作垂线,后面的各行数据就无法处理程序就终止了,求各位高手指点一二,如何才能实现遍历文本文件,根据文本文件数据逐一对已有多义线作垂线。不胜感谢。

;;;将实测管线坐标按“点号,X坐标,Y坐标”格式存为他txt文档
;;;在CAD中调用本函数,半自动求解各点的里程数及偏距,并绘制偏距线,
;;;同时将其存入指定的TXT文档
(defun C:gxts()
  (setvar "osmode" 0)
  (setvar "cmdecho" 0)
    (setq fle (getfiled "请选择要保存文件" " " "txt;*" 0))
  (setq f(open fle "r"))
;;;遍历每一行数据
  (while (setq data (read-line f))     
    (setq X_list (zhy_string_tok data ",") )
    (setq a (car x_list)
        x(atof(cadr x_list))
        Y(atof(caddr x_list))
   )
  (princ "\na=")
          (princ a)
    (princ "\ny=")
          (princ y)
    (princ)
    (command "zoom" "e")
    (setq p0 (list x y))
   
    (princ "\np0=")
    (princ p0)
    (command "line" p0 (setvar "osmode" 128)(setq p3(getpoint p4 "\N输入下一点:")) (setvar "osmode"0))
    )
    )
  ;;;;末尾括号
;;;数据读取函数代码,按指定格式读取文件数据
;;;将由某字符分隔的字串组成表
  (defun zhy_string_tok(sstring sstr)
    (setq string_list '())
    (setq n2 (strlen sstr))
    (while (setq m2 (vl-string-search sstr sstring))
      (setq str_1 (substr sstring 1 m2))
      (setq sstring (substr sstring (+ 1 m2 n2)))
      (if (/= str_1 "")
        (setq string_list (cons str_1 string_list))
       )
    )
    (if        (/= sstring "")
      (setq string_list (cons sstring string_list))
    )
   ( setq string_list(reverse string_list))
      
  )

 楼主| 发表于 2013-7-8 20:52:23 | 显示全部楼层
这段程序其他功能还没完善,现在卡在逐一点作垂线上料
 楼主| 发表于 2013-7-8 20:54:25 | 显示全部楼层
还有就是“vl-string-search ”此类函数在哪里可以找到用法,这个函数是我看别人程序学到的,可是还有很多函数我看不懂,又不知在哪可以查找相关的资料。求各位高手指点迷津,谢谢。

点评

搜索下论坛。有包含VL函数的函数说明。 另外VLA函数类的还是二代龙震的一本PDF书介绍的详细。 或许还有其他好的资料,我仅知道这些  发表于 2013-7-8 21:08
发表于 2013-7-9 09:40:21 | 显示全部楼层
糊涂医生 发表于 2013-7-8 20:52
这段程序其他功能还没完善,现在卡在逐一点作垂线上料

自己好好检查下程序,有p4这个点吗?
发表于 2013-7-9 15:17:33 | 显示全部楼层
(command "line" (getpoint  "输入一一点:") (setvar "osmode" 128)(setq p3(getpoint  "输入下一点:")) "")
程序错误,无法执行,需要点或选项关键字。
; 错误: 函数被取消。

(setvar "osmode" 128)
(command "line" (getpoint  "输入一一点:") (setq p3(getpoint (getvar "lastpoint") "输入下一点:")) "")
(setvar "osmode" 0)
可以执行。
 楼主| 发表于 2013-7-9 15:28:27 | 显示全部楼层
谢谢各位,我刚才想到了另外一种解决办法,就是把 (command "line" p0 (setvar "osmode" 128)(setq p3(getpoint p4 "\N输入下一点:")) (setvar "osmode"0))
拆分成
(setvar "osmode" 128)
(setq p1(getpoint p0 "\N输入下一点:")
(setvar "osmode"0))
(command "line" p0 p1 ""

其中原来getpoint 函数后面的p4 改为p0 当时在学习这个函数时没把这个函数的各项参数搞明白。
 楼主| 发表于 2013-7-9 15:29:45 | 显示全部楼层
哦输快了点,最后一行忘了加闭括号。(command "line" p0 p1 "")

 楼主| 发表于 2013-7-9 15:31:06 | 显示全部楼层
调试过了,没问题。
 楼主| 发表于 2013-7-9 15:32:52 | 显示全部楼层
zyhandw 发表于 2013-7-9 09:40
自己好好检查下程序,有p4这个点吗?

这个是我没搞清楚getpoint函数的参数意义,这个程序中应该改成p0
发表于 2013-7-9 16:48:49 | 显示全部楼层
糊涂医生 发表于 2013-7-9 15:32
这个是我没搞清楚getpoint函数的参数意义,这个程序中应该改成p0

对啊,本来没问题!结果就是因为没搞清楚这一点,才出了错
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-12-24 09:56 , Processed in 0.230127 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表