明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 8323|回复: 6

[求助]参数类型错误 :numberp: nil

[复制链接]
发表于 2007-4-1 16:19 | 显示全部楼层 |阅读模式

程序是读一个文件,文件格式是

01-R-居住用地,Continuous,50
01-R1-一类居住,Continuous,51
01-R11-住宅,Continuous,51
01-R12-公共服务设施,Continuous,51
【前面是 名字 ,中间是线型,最后是颜色

读完一个就画一个图层。

我想问的第一问题是画图层函数

(command "layer" "make" "01-R-居住用地" "c" 50 "" "") ,可是如何线性(continous)加进去啊,因为我其它的有不是continous的。

二是我的程序老是报错:参数类型错误 :numberp: nil

谢谢!代码附后:

(defun c:creatlayer()
  (if (not (member "objectdcl2005.arx" (arx)))
    (arxload "objectdcl2005.arx" "File objectdcl2005.arx was not find.")
  );2000及2002则加载objectdcl.arx
  (ODcl_LoadProject "C:\\Documents and Settings\\zhu xiaodong\\桌面\\DCLTEST\\creatlayer.odc")
  (Odcl_Form_Show creatlayer_DclForm1)
)


;新建图层的按钮事件,点按钮建立图层
(defun c:DclForm1_TextButton1_OnClicked ()
     ;打开数据文件
     (setq file1 (open "C:\\Documents and Settings\\zhu xiaodong\\桌面\\DCLTEST\\城市用地.lay" "r") )
      ;定义一个变量用作循环用
       (setq x "5")
      
       ( while (/= x "");最好不要用nil
         (setq x (read-line file1));读文件的一行,返回给变量x
         (setq layerName   (getname   x) );获取该行的第一部分(图层名字),通过后面的getname函数实现
         (setq layerStyle  (getstyle  x) );获取该行的第二部分(图层线型),通过后面的getstyle函数实现

        (setq layerColor  (getcolor  x) );获取该行的第三部分(图层颜色),通过后面的getcolor函数实现

  (setq layerColor2  (atoi layerColor)) ;将颜色由"50"这样的字符转换成整数
  (command "layer" "m" layerName "c" layerColor2 "" "") ;建图层,不知道如何设置线性
  (princ);
    )
 
 

)

;提取字符串中的第一部分(图层名字)

(defun  getname(s)
  (setq num1 (vl-string-search "," s))
  (setq num2 (vl-string-search "," s  (+ num1 1)))
  (setq strname  (substr s  1 num1))
)
;提取线型
(defun getstyle(s)
   (setq num1 (vl-string-search "," s))
   (setq num2 (vl-string-search "," s  (+ num1 1)))
   (setq strstyle (substr s  (+ num1 2) (- num2 num1 1)))
)
;提取颜色
(defun getcolor(s)
    (setq num1 (vl-string-search "," s))
    (setq num2 (vl-string-search "," s  (+ num1 1)))
    (setq strcolor (substr s  (+ num2 2) ))
)
我跟踪研究发现提取的都是结果都是正确的。

请指正,谢谢!
  
  
 
 

发表于 2007-4-1 16:40 | 显示全部楼层
本帖最后由 作者 于 2007-4-1 16:51:59 编辑

(command "layer" "new" "01-R-居住用地" "ltype" "Center" "01-R-居住用地" "")

 楼主| 发表于 2007-4-1 16:49 | 显示全部楼层

我改过,用50 和"50"效果一样,照样出错!

非常感谢你!

发表于 2007-4-1 17:08 | 显示全部楼层
我运行你的程序怎么没有错误
发表于 2007-4-1 17:17 | 显示全部楼层

(while (setq x (read-line file1));
   (setq layerName   (getname   x))

   (setq layerStyle  (getstyle  x))
   (setq layerColor  (getcolor  x))

.....

你的while为什么不这样,当read-line读到文件最后,自动中止

发表于 2007-4-2 08:09 | 显示全部楼层

你的出错是否在有的线型没有加载的情况下出现.最笨的办法是在CAD下用"-LAYER"命令逐个测试后面的参数

 楼主| 发表于 2007-4-3 21:59 | 显示全部楼层

问题已经解决:

 1.建立图层的时候,不能忘记中间的 ""

   (command "layer" "m" "layername" "c" "layerColor" "" "l" "center" """")

2. 总的原因是,循环到最后一步的时候,把nil当数字赋值给了函数
   谢谢大家!

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-19 07:52 , Processed in 0.255839 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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