明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1719|回复: 7

SOS:LISP程序请教(一次性获取两相交线节点坐标)

[复制链接]
发表于 2007-2-28 09:07 | 显示全部楼层 |阅读模式

各位大哥:

新年好!

图中红色为生成的线,黄色的为我画上去的线条,我想用LISP编一程序,可生成能"获取黄色线节点坐标"(纵横两线交点)程序,生成最好系TXT文本格式,有哪位兄弟能帮上这个忙吗?谢谢!

 

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2007-2-28 13:18 | 显示全部楼层
本帖最后由 作者 于 2007-3-1 17:51:32 编辑

我的理解是:你希望求出红线与所有白线的交点,生成黄线和坐标文本,
如果我的理解没有错,程序如下:
  1. (DEFUN c:tmp (/ ENT1 ENT2 N PT PTS SSG FILE)
  2.   (vl-load-com)
  3.   (SETQ ent1 (VLAX-ENAME->VLA-OBJECT (CAR (ENTSEL "\n选取一根红线:"))))
  4.   (PRINC "\n选取一组竖向坐标线:")
  5.   (SETQ ssg (SSGET '((0 . "LINE"))))
  6.   ;;获取交点集
  7.   (SETQ pts nil)
  8.   (REPEAT (SETQ n (SSLENGTH ssg))
  9.     (SETQ ent2 (VLAX-ENAME->VLA-OBJECT (SSNAME ssg (SETQ n (1- n)))))
  10.     (IF (SETQ pt (VLAX-INVOKE ent1 'IntersectWith ent2 ACEXTENDNONE))
  11.       (SETQ pts (CONS pt pts))
  12.     )
  13.   )
  14.   ;;沿红线对点集排序
  15.   (SETQ pts (VL-SORT pts
  16.        '(LAMBDA (p1 p2)
  17.    (> (VLAX-CURVE-GETPARAMATPOINT ent1 p1)
  18.       (VLAX-CURVE-GETPARAMATPOINT ent1 p2)
  19.    )
  20.         )
  21.      )
  22.   )
  23.   ;;画黄线并写入文件
  24.   (SETVAR "clayer" "图层1")
  25.   (COMMAND "_.PLINE")
  26.   (SETQ file (OPEN "c:/pts.txt" "w"))
  27.   (FOREACH item pts
  28.     (COMMAND item)
  29.     (WRITE-LINE (VL-PRINC-TO-STRING item) file)
  30.   )
  31.   (CLOSE file)
  32.   (COMMAND "")
  33.   (PRINC)
  34. )
复制代码
 楼主| 发表于 2007-3-1 14:52 | 显示全部楼层

大哥:

小弟在这里先谢谢你!

你的程序我调用过了,但加载tmp命令点选红线后,出现如下错误:

(选取一根红线:; 错误: no function definition: VLAX-ENAME->VLA-OBJECT)

我要的程序只是能提取"黄线"跟"纵向白色线"<交点坐标>就好了,最好生成的是TXT格式文本,我的图再上传一下,你下载后打开看看就明白我意思了,再一次谢谢你!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2007-3-1 15:57 | 显示全部楼层
对于出现错误:no function definition: VLAX-ENAME->VLA-OBJECT
如果你用的acad2000以后的版本,可在我的程序第一行前添加(vl-load-com),如果是r14就没有办法了
只选黄线,问题就简化为取黄线的节点坐标,不需要求交点,程序如下,可以运行在任何cad版本.
  1. (DEFUN c:tmp (/ EL FILE PTS)
  2.   (SETQ EL (ENTGET (CAR (ENTSEL "\n选取一根黄线:"))))
  3.   (WHILE (AND EL (ASSOC 10 EL))
  4.     (SETQ PTS (CONS (ASSOC 10 EL) PTS)
  5.    EL  (CDR (MEMBER (CAR PTS) EL))
  6.     )
  7.   )
  8.   ;;写入文件
  9.   (SETQ file (OPEN "c:/pts.txt" "w"))
  10.   (FOREACH item (MAPCAR 'CDR (REVERSE pts))
  11.     ;;下一行的","可改为其他的分隔符,比如" " "\t"
  12.     (WRITE-LINE
  13.       (STRCAT (RTOS (CAR item) 2 3) "," (RTOS (CADR item) 2 3))
  14.       file
  15.     )
  16.   )
  17.   (CLOSE file)
  18.   (PRINC)
  19. )
复制代码
 楼主| 发表于 2007-3-1 16:38 | 显示全部楼层

兄弟:

感谢你为我编的这程序,真的谢谢!

但程序还是用不了,我加载程序后,用TMP命令,然后选取黄色线条,但就没有了下文了,是否程序出现错乱,麻烦你看看,谢谢!

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

在线等侯你回复,你QQ号系几多?我加你为好友.

发表于 2007-3-1 17:41 | 显示全部楼层
本帖最后由 作者 于 2007-3-1 17:50:19 编辑

忘记告诉你了,到硬盘的c驱下找pts.txt文件,里面就是所有的点
新程序增加了一句,会自动打开pts.txt,方便你操作.
  1. (DEFUN c:tmp (/ EL FILE PTS)
  2.    (SETQ EL (ENTGET (CAR (ENTSEL "\n选取一根黄线:"))))
  3.    (WHILE (AND EL (ASSOC 10 EL))
  4.      (SETQ PTS (CONS (ASSOC 10 EL) PTS)
  5.     EL  (CDR (MEMBER (CAR PTS) EL))
  6.      )
  7.    )
  8.    ;;写入文件
  9.    (SETQ file (OPEN "c:/pts.txt" "w"))
  10.    (FOREACH item (MAPCAR 'CDR (REVERSE pts))
  11.      ;;下一行的","可改为其他的分隔符,比如" " "\t"
  12.      (WRITE-LINE
  13.        (STRCAT (RTOS (CAR item) 2 3) "," (RTOS (CADR item) 2 3))
  14.        file
  15.      )
  16.    )
  17.    (CLOSE file)
  18.    (startapp "notepad" "c:/pts.txt")
  19.    (PRINC)
  20. )
复制代码
不好意思,很少聊天,以前的qq号被盗,就没有再申请了
 楼主| 发表于 2007-3-2 09:06 | 显示全部楼层

兄弟:

你好!

真谢谢你了,程序可用了,而且你改正后挺好用的,谢谢你!

以前我用LISP命令提取坐标,再经文本编辑小软件编著它,现在工作量快多了,真的谢谢你!

你的编程技术太高了,有什么事再请教你,还望留下你的大名.谢谢!

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

本版积分规则

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

GMT+8, 2024-5-18 10:08 , Processed in 0.614195 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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