明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2406|回复: 11

[基础教程] lisp时而出错时而有效,求高手帮忙看下程序

  [复制链接]
发表于 2011-7-28 20:16 | 显示全部楼层 |阅读模式
各位高手,本人结构专业,初学lisp。 我们结构上画次梁要求起点和终点都是一个小圆圈,中间是一段有厚度的多义线(通常50
厚)。   如附图,要在A点为左边直线上任意一点,B为右边直线任意一点,要求程序实现直接点AB两点后,就出现中间的次梁(次梁可能为斜的)。
本人编的程序代码如下:
(DEFUN C:Ci(/ aaa bbb r w p0 p1 c0 c1 a l1 l2)

(vl-load-com)
(setq aaa (vlax-ldata-get "dict" "R"))
(setq bbb (vlax-ldata-get "dict" "W"))
(if (= nil aaa)(setq aaa 50))
(if (= nil bbb)(setq bbb 50))
(setq R aaa)
(setq W bbb)

(princ (strcat "\n当前铰接圆半径<" (RTOS R) ">,多段线线宽<" (RTOS W) ">"))

(SETVAR "CMDECHO" 0)
(GRAPHSCR)
(INITGET "R W")

(WHILE (ATOM(SETQ P0 (GETPOINT "\n输入次梁起点或[铰接圆半径(R)/线宽(W)]:")))
(IF (= P0 "R")
(SETQ R (GETREAL (STRCAT "\n输入铰接圆半径<" (RTOS R) ">")))
)
(IF (= R NIL)(SETQ R aaa)
(vlax-ldata-put "dict" "R" R)
)

(IF (= P0 "W")
(SETQ W (GETREAL (STRCAT "\n输入次梁多段线宽度<" (RTOS W) ">")))
)
(IF (= W NIL)(SETQ W bbb)
(vlax-ldata-put "dict" "W" W)
)

(INITGET "R W")
)

(SETQ P1 (GETPOINT "\n输入次梁终点:"))
(SETQ A (ANGLE P0 P1))
(SETQ C0 (POLAR P0 A R))
(SETQ C1 (POLAR P1 (+ A PI) R))
(SETQ L0 (POLAR C0 A R))
(SETQ L1 (POLAR C1 (+ A PI) R))
(COMMAND "CIRCLE" C0 R)
(COMMAND "CIRCLE" C1 R)
(COMMAND "PLINE" L0 L1 "")
(COMMAND "PEDIT" "L" "W" W "")
(SETVAR "CMDECHO" 1)
(PRINC)
)

我的程序编完之后,曾经调试没有什么问题,能达到我的要求。 但是现在不知道为什么,如果不开捕捉,画出来的东西满足要求,一旦开了捕捉,左右两边的小圆圈就总是有一个或两个不能和直线相切,圆心就直接在直线上,
跪求高手指导。

本帖子中包含更多资源

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

x
 楼主| 发表于 2011-7-29 08:31 | 显示全部楼层
明经的各位高手阿,求你们快快现身吧,我要画一个网架,里面上千跟杆件,全是次杆.没这个程序要完蛋了.  
发表于 2011-7-29 09:06 | 显示全部楼层
lisp 程序设计,发到 lisp板块 更合适有效吧
发表于 2011-7-29 15:28 | 显示全部楼层
内容自动屏蔽,看不到
 楼主| 发表于 2011-7-31 12:14 | 显示全部楼层
回复 longer1000 的帖子

现在已向版主申请解禁了,求高手帮忙看看程序的问题,无比感谢。
发表于 2011-7-31 12:48 | 显示全部楼层
发表于 2011-8-1 10:51 | 显示全部楼层
就是捕捉出的问题,如果你开捕捉,则你指定的点与你得到的点可能不是同一个点,所以你必须关闭他,保证你指定的点与你得到的点是同一点。
 楼主| 发表于 2011-8-1 12:32 | 显示全部楼层
回复 Andyhon 的帖子

长老您好,感谢您的指点。您的意思我明白,但是我这个程序在使用时是必须要开捕捉的,开了捕捉就出错。但如果不开捕捉,又找不到我想要的点,只能用鼠标描我想要的点才能达到我想要的效果,但这样是不现实的阿。
求长老百忙之中抽空给小弟指点一下,不甚感激。
 楼主| 发表于 2011-8-1 12:42 | 显示全部楼层
回复 winabcd 的帖子

谢谢您的指点,我是个非常业余的lisp初学者,没太明白您的意思。请问如果不开捕捉,我怎么精确找到我想要的点呢?
发表于 2011-8-1 13:31 | 显示全部楼层
(SETQ L1 (POLAR C1 (+ A PI) R))
(COMMAND "CIRCLE" C0 R)
==>
(SETQ L1 (POLAR C1 (+ A PI) R))
(setvar "OsMode" 0)         ; 本例在这儿关闭捕捉 只对其后的语句起作用
(COMMAND "CIRCLE" C0 R)

or ===========================>

(SETQ L1 (POLAR C1 (+ A PI) R))
(COMMAND "CIRCLE" C0 R)
==>
(SETQ L1 (POLAR C1 (+ A PI) R))
;; 也可以 直接屏蔽
(COMMAND "CIRCLE" "non" C0 R)
下同

程序相关最好转向 开发篇 的版块
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-12 22:41 , Processed in 0.174847 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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