QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 2148|回复: 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;
( y. m$ P) o/ I& T1 V/ G6 OOption Explicit
1 x! P2 `. }. Y$ D! @6 vPublic Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer2 ?9 L8 Y; `' i& g' T; T
Public Const VK_ESCAPE = &H1B
, h8 P( L. p. z& v0 f; E+ o  NSub addcircle()2 y0 m4 [+ B. E0 u2 _
    Dim circleObj As AcadCircle& {/ o, L+ C/ K1 j8 {9 ?0 P* k6 _
    Dim centerPoint(0 To 2) As Double
- c8 C% A. K2 E# M/ c: w    Dim radius As Double0 X) t. V* P7 ^! p( f, j8 G6 e
     centerPoint(0) = 0#: centerPoint(1) = 0#: centerPoint(2) = 0#! ~# t# U; P3 x* Q7 F! q
    radius = 10#( ~7 I- N3 |$ z! n1 J
    Do While GetAsyncKeyState(VK_ESCAPE) <> -327678 U) q% i# N2 x4 ]( \1 [
    DoEvents
: j; h; n, P. T# M3 \$ z# }    Set circleObj = ThisDrawing.ModelSpace.addcircle(centerPoint, radius)4 V( a" b* z6 C' I& h0 X5 o
    radius = radius + 104 Y, F! l& d( s" I
    ZoomAll7 X3 Y4 F1 h1 d# y. ^) ~! O% J
    Loop; m; {' G6 x/ x/ Y8 T2 p+ z# q! Y" d7 c
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
; R- k0 ?+ M3 T8 A$ pVBA中插入模块,输入以下代码,运行sub addcircle;
9 M0 S9 B. Q# x: WOption Explicit
& l; b" n" @; g) r0 X- N/ QPublic Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer' v$ t2 f, I5 k7 v
Public Const VK_ESCAPE = &H1B
/ e4 U0 d4 m. X/ ]' BSub addcircle()
! k% i3 v% s8 k+ t" @, U...
. q7 `6 _2 _7 [! Y" g3 x
谢谢这位
5 y8 I$ i7 \0 {1 O# E!可惜我不是太懂
 楼主| 发表于 2009-3-28 14:41:30 | 显示全部楼层 来自: 中国江苏苏州
原帖由 TALKE 于 2009-3-28 12:58 发表 http://www.3dportal.cn/discuz/images/common/back.gif
6 t2 C- d2 Z9 [2 Z, w8 j/ O什么叫“变量点”?

) {- d8 H) p; N& X  f0 G$ L) b比如说我在画圆时,CAD要我输入半径值,当作R,我给CAD这个变量一个值比如R=10,而每操作一次,R的值增加10就是R=R+10的意思.
发表于 2009-3-28 15:14:16 | 显示全部楼层 来自: 中国江苏无锡
你说的这个,是变量,不是变量点。建议语言尽量规范,使用常规的习惯用语,不要随意杜撰,如果提出新的词汇那就要予以解释清楚。
! K; v* P' [# F- v: |# d. J' a6 C  b# L' }6 F. g
在lisp中变量可以是点,比如:
: A2 x9 ]8 J! e2 `(setq p1 (list 20 30))
7 {2 m- B. p! T# {(setq p2 (list 120 100)); }7 d7 ^/ p) b+ H) _, O3 ~
那么就可以认为p1,p2分别是点:+ W& o0 E) K! Z& Q* g* ~
函数(command "line" p1 p2 "")可以产生正确结果即在绘图空间中产生(20,30)-(120,100)的一段直线。
* @5 i. ]/ T+ g0 s所以你一旦提到点,人们就很容易想到这样的点变量,这样的变量无所谓增量的,所以容易引起误会。
9 s: n) ~. z# W
/ l8 Q- u3 D8 ^你的意思大概是在循环体中怎样使变量每循环一次增加一个常量吧?如果这个变量是r,增量是10,在lisp语言中赋值函数与+函数就可完成:; Z! [2 \# I9 V0 K
(setq r (+ r 10))! S! o  d3 o* B, U6 l; v
在C语言、VB中都是普通的赋值语句。1 P0 W! v' S. [. y
' Z# d7 y1 f4 ]6 {* }- z
[ 本帖最后由 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.gif4 P0 F7 {% r" V9 u
你说的这个,是变量,不是变量点。建议语言尽量规范,使用常规的习惯用语,不要随意杜撰,如果提出新的词汇那就要予以解释清楚。
+ _* K8 C+ T" p9 D9 ]1 R. h" M3 k  m/ p& K* s
在lisp中变量可以是点,比如:) F* K4 C2 h. f) \: F
(setq p1 (list 20 30))  W3 k: `; G/ A. y" g# w, _
(setq p2 (list 120 100 ...

% ~; G3 f. w- Z0 G0 L7 ~& k谢谢这位,其实关于LISP也好VB也好,我都不是太懂,我想能否在CAD COMMAND状态下直接输入R,命令每操作一次,实现R+10有无办法?
) n% s# O7 _; N/ m, k谢谢了。。
发表于 2009-3-31 12:53:58 | 显示全部楼层 来自: 中国江苏无锡
(setq r 10)8 c9 R6 k/ m1 E. B0 B* H
(defun c:c ()/ i, D! X9 ?! f. n+ |" |2 c% F/ t
(command "_circle" pause r)
% L, ]3 [  e1 \6 Z0 ^8 H(setq r (+ r 10))( V$ h" B' N9 P; p
)
+ B# \7 X+ n9 X0 P) R上面的语句可以满足加十的要求,但不用输入R,只要点选中心点,其半径自动加10,完成圆。( E! v0 Y" ?$ ~6 F8 }: [( \, Z) ~
在LISP里加载,然后在命令里输c即可
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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