明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 呆呆

[LISP]请问各位大侠我的程序有问题 不知道什么改正?

  [复制链接]
 楼主| 发表于 2003-12-9 11:46:00 | 显示全部楼层
飞哥 你的程序和我的意思有一点差别 不过我按照我的想法改了您的程序 现在*fhhao* 和 *i*都能传递过去  不知道是怎么搞的 怎么图层转换不过去了 我仔细检查了程序 没有关于图层的参数改动呀!就是不知道为什么?
defun wlayer (llay)
  (if (/= (tblobjname "layer" llay) nil)
    (setvar "clayer" llay)
  )
)
(defun c:ty (/ oce ofe  p0 m nn fh i)
  (setq oce (getvar "cmdecho"))
  (setvar "cmdecho" 0)
  (setq ofe (getvar "clayer"))
  (command ".undo" "be")
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  (if (not *fuhao*)
    (progn
      (initget 0)
      (setq *fuhao* (getstring "\nplease input fuhao:"))
      (setq fh *fuhao*)
    )
    (progn
      (setq fh (getstring (strcat "\nplease input fuhao<" *fuhao* ">:")))
      (if (/= fh "")
      (setq *fuhao* fh)
      (setq fh *fuhao*)
      )
    )
  )
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;注意此范围内的内容;;;;;;;;;;;;;;;;;;
  (if (not *i*)
    (progn
      (initget 3)
      (setq *i* (getint "\nplease input number:"))
    )
    (progn
      (setq i (getint (strcat "\nplease input number<" (itoa *i*) ">:")))
      (if (null i)
      (setq i *i*)
      )
    )
  )
   (cond
      ((= *fuhao* "w") (wlayer "0-w"))
      ((= *fuhao* "y") (wlayer "0-y"))
      ((= *fuhao* "j") (wlayer "0-j"))
      ((= *fuhao* "dl") (wlayer "2-电力"))
      ((= *fuhao* "ld") (wlayer "2-路灯"))
      ((= *fuhao* "dx") (wlayer "2-电信"))
    )
    (setq *fuhao* (strcase *fuhao*))
  (while
    (setq p0 (getpoint "\npick point:"))
    (setq m (rtos i))
    (setq nn (strcat *fuhao* m))
    (command ".text" "m" p0 (getvar "textsize") "0" nn)
    (setq i (+ 1 i))
  ) ;;end while
  (setq *i* i)
  (setvar "cmdecho" oce)
  (command ".undo" "e")
  (setvar "clayer" ofe)   
  (prin1)
)  ;;the end
发表于 2003-12-9 11:55:00 | 显示全部楼层
是这句 (setq *fuhao* (strcase *fuhao*)),已经没什么用了,
输入时注意大小写,你可以跟踪一下*fuhao*,看看是什么值,因为你的(cond...)中只判断了小写的。你原来的程序中在取值是就用了strcase函数,这样,如果你输入了空,就会导致出错,我去掉了
还有(setq *i* (getint "\nplease input number:"))
应改为(setq i (getint "\nplease input number:")),否则你第一次运行i始终为空,程序将出错。

好象你还不会用VL编辑器的跟踪功能,如果可以跟踪,这些问题都会很容易解决的。
 楼主| 发表于 2003-12-9 12:51:00 | 显示全部楼层
是的 飞哥 到底VL编辑器里面的功能我一个也不会  除了最简单的打开 保存 ,别的一概不知道怎么用的 我学lisp语言也就是从今年的十一才开始的 以前都没有接触过 ,也没有老师指导,就自己摸索,现在好了,有了这么好的一个网站,所以我有什么不会的,就来请教这里的老师们!!谢谢您们的帮助和指导!!
发表于 2003-12-9 15:36:00 | 显示全部楼层
用VL里的跟踪器很有用的,F9设断点,F8进入表达式,CTRL+W添加监视表达式,CTRL+SHIFT+W显示监视窗口,CTRL+ALT+E加载所有表达式,其它还有CTRL+F8等等,这些很有用,用跟踪的方法很容易看出变量是在哪里被改了,哪句语句不对~
 楼主| 发表于 2003-12-9 16:27:00 | 显示全部楼层
还有个问题想请问各位!就是LISP中的函数TRANS 的用法  我在做道路的时候要标出各个点的坐标 但是有的图已经被别人移动过 甚至陪被旋转过 ,这个时候我想在去标注坐标肯定是不对的了  把图移动到原来的地方太麻烦了 能不能利用TRANS函数把坐标系移动过去 我的这个想法行吗? (现在被移动过的图上 有两个点的坐标是已知的)请问我该怎么做?
发表于 2003-12-9 16:32:00 | 显示全部楼层
如果有移动过,有旋转过,你能通过移动坐标系恢复原状吗?

如果仅仅是移动过,你用MOVE移一下不就可以了
 楼主| 发表于 2003-12-9 16:37:00 | 显示全部楼层
那飞哥能介绍以下TRANS 的 用法吗? 好有它后面的参数类型 谢谢
发表于 2003-12-9 16:39:00 | 显示全部楼层
你的没有帮助文件吗?如果没有,本站下载中心有,可以去下载一个。
其实帮助文件是最好的参考书。。。用好它,你差不多就可以掌握编程了。。。
-----------------------------------------
(trans pt from to [disp])   

参数

pt

三维实数列表,既可以被解释成一个三维点,又可以被解释成一个三维位移(矢量)。

from

整数代码、图元名或三维拉伸矢量,指定 pt 的坐标系。整数代码可以为如下值:
0  世界坐标系(WCS)
1  用户坐标系(当前 UCS)
2  与代码 0 或代码 1 一起使用时,表示当前视口的显示坐标系 (DCS)。与代码 3 一起使用时,表示当前模型空间视口的 DCS。
3  图纸空间 DCS(仅用于代码 2)

to

整数代码、图元名或三维拉伸矢量,指定返回点的坐标系。有效的整数代码取值请参见 from 参数。

disp

如果存在且不为 nil,则将 pt 作为三维位移而不是三维点看待。

如果 from 或 to 参数是图元名,它必须是由 entnext、entlast、entsel、nentsel 和 ssname 等函数返回的图元名。这样就可以将某个特定对象的对象坐标系 (OCS) 中的点来回进行转换(对于某些对象,OCS 等价于 WCS,对这些对象,OCS 和 WCS 之间的转换是空操作)。使用三维拉伸矢量(三个实数组成的一个表)是来回转换对象 OCS 的另一种方法。但是,对于 OCS 等价于 WCS 的那些对象,这种转换也不做任何操作。

返回值

由参数 to 指定的坐标系表示的一个三维点(或位移)。

评分

参与人数 1明经币 +1 金钱 +50 收起 理由
ljcgq + 1 + 50 好内容 将的很透彻 深入 学习

查看全部评分

 楼主| 发表于 2003-12-10 12:38:00 | 显示全部楼层
谢谢飞哥
 楼主| 发表于 2003-12-11 10:51:00 | 显示全部楼层
请问各位怎么样才能使选中的目标根据自己设定的颜色来亮显? 谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-3 09:43 , Processed in 0.155835 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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