QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 2130|回复: 8
收起左侧

[求助] 关于一个变量

[复制链接]
发表于 2009-3-27 13:11:16 | 显示全部楼层 |阅读模式 来自: 中国江苏苏州

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

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

x
我在画图时要一个变量点,命令循坏一次变量增加10请问各位该如做最好?不胜感谢!比如画圆,第一次半径是10,第二次就是10+10=20,第三次是20+10=30,依次类推,只到ESC退出.谢谢了!
发表于 2009-3-27 21:03:31 | 显示全部楼层 来自: 中国浙江宁波
VBA中插入模块,输入以下代码,运行sub addcircle;
. T2 U; L' `& U6 vOption Explicit
: G8 ]2 L- G  g" q# W2 G. Y& N$ RPublic Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
5 R3 m/ }8 B9 R) G2 M- `Public Const VK_ESCAPE = &H1B% m3 ?7 f9 k8 q+ O( i
Sub addcircle()9 q8 `2 Z7 m; `/ M; M
    Dim circleObj As AcadCircle5 {* |5 Y4 E% q; e
    Dim centerPoint(0 To 2) As Double* b7 [  ?% e1 Z0 b0 Z
    Dim radius As Double
- S+ A7 a" \3 d6 |     centerPoint(0) = 0#: centerPoint(1) = 0#: centerPoint(2) = 0#8 [8 I: Z/ M" t$ `) p7 v4 Y
    radius = 10#
8 M- J  ?& s9 q5 r4 q+ Y    Do While GetAsyncKeyState(VK_ESCAPE) <> -327676 Y" v8 e7 ]( \2 g+ r- s$ f
    DoEvents
+ D/ k5 D$ v3 K5 `$ N- f    Set circleObj = ThisDrawing.ModelSpace.addcircle(centerPoint, radius)
5 W! w, V- ?: R; R  B8 Q6 f+ Z    radius = radius + 108 X( n# ]( j! |# J" a
    ZoomAll# Z& J2 z% W0 j* n9 \
    Loop" q0 v7 `2 A$ C' \) _6 i
End Sub

评分

参与人数 1三维币 +5 收起 理由
2005llnn + 5 应助

查看全部评分

发表于 2009-3-28 11:06:20 | 显示全部楼层 来自: 中国北京
不错,学习一下!!
发表于 2009-3-28 12:58:55 | 显示全部楼层 来自: 中国江苏无锡
什么叫“变量点”?
 楼主| 发表于 2009-3-28 14:36:41 | 显示全部楼层 来自: 中国江苏苏州
原帖由 sealive_leafage 于 2009-3-27 21:03 发表 http://www.3dportal.cn/discuz/images/common/back.gif/ g' m3 i) G, p
VBA中插入模块,输入以下代码,运行sub addcircle;
) @0 A7 ?9 ?$ N9 D$ v! Q* {1 rOption Explicit! @: z* J+ t& C' g4 g% b
Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
' u7 s' `0 _1 DPublic Const VK_ESCAPE = &H1B
1 C! x& Z0 h. `8 ^! q0 z( WSub addcircle()
. ?1 S+ e7 f' [* B$ Q...

4 T6 y+ F; F: p# I& G谢谢这位
; K9 t& Z) G% Q) {5 q+ Z!可惜我不是太懂
 楼主| 发表于 2009-3-28 14:41:30 | 显示全部楼层 来自: 中国江苏苏州
原帖由 TALKE 于 2009-3-28 12:58 发表 http://www.3dportal.cn/discuz/images/common/back.gif+ C+ ?1 R# F; G0 v: f5 `
什么叫“变量点”?
, i0 w% d7 k" \  i, K- W
比如说我在画圆时,CAD要我输入半径值,当作R,我给CAD这个变量一个值比如R=10,而每操作一次,R的值增加10就是R=R+10的意思.
发表于 2009-3-28 15:14:16 | 显示全部楼层 来自: 中国江苏无锡
你说的这个,是变量,不是变量点。建议语言尽量规范,使用常规的习惯用语,不要随意杜撰,如果提出新的词汇那就要予以解释清楚。
. ]- y$ S+ R. z  l
  Y' R* R% `  J. c在lisp中变量可以是点,比如:
) a  V( @, R. j7 B(setq p1 (list 20 30))
+ y5 R' ?# G2 b2 o$ k5 l. ](setq p2 (list 120 100))* i" _/ j6 l3 T6 N& w6 b" q5 q
那么就可以认为p1,p2分别是点:* o/ J/ _& b, A7 U% Z+ s4 i
函数(command "line" p1 p2 "")可以产生正确结果即在绘图空间中产生(20,30)-(120,100)的一段直线。: k: Y% {3 D0 ~; x0 m' ?& A% [
所以你一旦提到点,人们就很容易想到这样的点变量,这样的变量无所谓增量的,所以容易引起误会。
- ], C" Q# V2 ]5 c  g+ f7 z! a$ H6 B- @, U! [  r
你的意思大概是在循环体中怎样使变量每循环一次增加一个常量吧?如果这个变量是r,增量是10,在lisp语言中赋值函数与+函数就可完成:
8 o3 a5 V# @. J$ Z9 e) O(setq r (+ r 10))
, B+ p4 }$ i8 G$ ?在C语言、VB中都是普通的赋值语句。
* v4 Y* w3 c. J+ E$ D  e1 M
0 a1 T0 U2 g3 Y2 ]1 D9 [[ 本帖最后由 TALKE 于 2009-3-28 16:25 编辑 ]

评分

参与人数 1三维币 +5 收起 理由
2005llnn + 5 应助

查看全部评分

 楼主| 发表于 2009-3-31 11:57:49 | 显示全部楼层 来自: 中国江苏苏州
原帖由 TALKE 于 2009-3-28 15:14 发表 http://www.3dportal.cn/discuz/images/common/back.gif6 z: J5 {5 A7 B& T
你说的这个,是变量,不是变量点。建议语言尽量规范,使用常规的习惯用语,不要随意杜撰,如果提出新的词汇那就要予以解释清楚。) ]; B0 I$ {' S2 @

. Y6 C3 ?9 w( p6 n, d' q在lisp中变量可以是点,比如:. Y, x; I4 \7 n% J% G' W
(setq p1 (list 20 30))7 n1 K0 q4 X9 T/ C8 q
(setq p2 (list 120 100 ...

9 {$ y4 O$ q' o$ ~1 B谢谢这位,其实关于LISP也好VB也好,我都不是太懂,我想能否在CAD COMMAND状态下直接输入R,命令每操作一次,实现R+10有无办法?
" H$ ?- f7 R. v* P, h" e/ G谢谢了。。
发表于 2009-3-31 12:53:58 | 显示全部楼层 来自: 中国江苏无锡
(setq r 10): b$ d/ k2 I; T  i( {' H, U" ]/ @" w
(defun c:c ()( v! m' z. {* i$ {, E0 x3 b3 \
(command "_circle" pause r)
+ S, K+ Y5 v0 L* `(setq r (+ r 10))
4 A6 X1 ?  G+ O; p3 G)1 R/ O/ a3 l& i4 e
上面的语句可以满足加十的要求,但不用输入R,只要点选中心点,其半径自动加10,完成圆。
9 G* Y) ]4 j) v* W% \在LISP里加载,然后在命令里输c即可
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

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