QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
8天前
查看: 2104|回复: 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;$ Q$ C8 _& r# N* Z# t) }8 Q; e
Option Explicit0 b8 ?0 o/ A; z8 {2 f2 ]! B/ [6 {
Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
& a, T8 C2 d8 m$ X9 yPublic Const VK_ESCAPE = &H1B
/ Y! I4 e; j. M- LSub addcircle()( g: G4 l* X8 t; j& h, s
    Dim circleObj As AcadCircle
1 f% g* {. o! @# w    Dim centerPoint(0 To 2) As Double
" G" A3 I  k6 c* O* Y. T; q8 m2 w6 m    Dim radius As Double* X- [/ n5 I4 b- {1 U+ Z* s
     centerPoint(0) = 0#: centerPoint(1) = 0#: centerPoint(2) = 0#
5 E# r, D9 S1 _+ U: l" v    radius = 10#0 a% \( z( Y- \. E; @  X
    Do While GetAsyncKeyState(VK_ESCAPE) <> -327679 r8 C& F) G) y* l, \  n3 R, v* ~
    DoEvents7 K: w% A" Q) G4 m6 G! x
    Set circleObj = ThisDrawing.ModelSpace.addcircle(centerPoint, radius)
' O/ I2 M3 ~9 x& p" l, V" v    radius = radius + 105 `% L  C. l6 I
    ZoomAll
. @3 O& k- q% A4 e0 d' b4 ~0 \/ ]    Loop9 N2 s/ e9 U1 A2 p( L
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.gif8 @3 P2 n. {& ~
VBA中插入模块,输入以下代码,运行sub addcircle;( ~' e0 G* W, x
Option Explicit
+ L9 m7 H: o2 p4 z9 C* c! \, zPublic Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
2 ~7 ?! d  x& M$ v$ nPublic Const VK_ESCAPE = &H1B1 j6 M3 o% Q5 _) x, y2 H5 u, N" g$ [
Sub addcircle()
$ {  Y0 J5 ~/ P6 ^2 G' ~/ X  x...
8 K$ D& G, A. L0 I6 N, V( [
谢谢这位
# t' E: ], d- z( [!可惜我不是太懂
 楼主| 发表于 2009-3-28 14:41:30 | 显示全部楼层 来自: 中国江苏苏州
原帖由 TALKE 于 2009-3-28 12:58 发表 http://www.3dportal.cn/discuz/images/common/back.gif& ~+ I5 A  y4 ]
什么叫“变量点”?
. z2 ~% o" A. V
比如说我在画圆时,CAD要我输入半径值,当作R,我给CAD这个变量一个值比如R=10,而每操作一次,R的值增加10就是R=R+10的意思.
发表于 2009-3-28 15:14:16 | 显示全部楼层 来自: 中国江苏无锡
你说的这个,是变量,不是变量点。建议语言尽量规范,使用常规的习惯用语,不要随意杜撰,如果提出新的词汇那就要予以解释清楚。
7 m$ I. \! l7 O7 {. v3 ^# A9 }* @0 p. S+ l( Z' s3 e  a  I
在lisp中变量可以是点,比如:' U/ m- z- A5 T' T" E+ l; f. G# S
(setq p1 (list 20 30))
5 P! h' \: ^0 b$ i& W(setq p2 (list 120 100))3 s- F* H! m2 X# R% y8 p6 F; u7 g
那么就可以认为p1,p2分别是点:$ s/ d, c( ~) @8 O" c& c9 T* D. n
函数(command "line" p1 p2 "")可以产生正确结果即在绘图空间中产生(20,30)-(120,100)的一段直线。
) m' [5 {0 I+ Z0 v0 p4 }$ g所以你一旦提到点,人们就很容易想到这样的点变量,这样的变量无所谓增量的,所以容易引起误会。. r, p2 O* A! U
9 ~- I+ ^# j2 D& `+ W
你的意思大概是在循环体中怎样使变量每循环一次增加一个常量吧?如果这个变量是r,增量是10,在lisp语言中赋值函数与+函数就可完成:
. \, W6 ?. `0 z(setq r (+ r 10))! {2 {+ [  }. D
在C语言、VB中都是普通的赋值语句。% t6 y2 ~6 n) U) H+ n7 k0 r3 |$ l: L
( O. P2 `: t  q
[ 本帖最后由 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.gif
3 ?3 K7 z0 u) V3 R  S你说的这个,是变量,不是变量点。建议语言尽量规范,使用常规的习惯用语,不要随意杜撰,如果提出新的词汇那就要予以解释清楚。
( a3 ?. l& N( J2 @% U% C) r7 t
$ |' P" U  ]3 F% @在lisp中变量可以是点,比如:
  ~2 b& l4 s+ G8 B8 H(setq p1 (list 20 30))0 @( }: j7 ~" W
(setq p2 (list 120 100 ...
/ R0 v) f- U- K. J" \. w
谢谢这位,其实关于LISP也好VB也好,我都不是太懂,我想能否在CAD COMMAND状态下直接输入R,命令每操作一次,实现R+10有无办法?
* m( q3 v, Z' H0 _, y, y! h) D谢谢了。。
发表于 2009-3-31 12:53:58 | 显示全部楼层 来自: 中国江苏无锡
(setq r 10)6 W: ]# S8 B6 \3 r) o
(defun c:c ()
1 q# B+ {0 _0 v9 E4 t4 W* l1 F(command "_circle" pause r); B9 [4 _% B# b/ @0 m4 C9 ~- B6 q
(setq r (+ r 10))
6 v2 _& @0 j# z)
8 D/ b/ z& Q' H4 {6 j- J& \上面的语句可以满足加十的要求,但不用输入R,只要点选中心点,其半径自动加10,完成圆。
9 D2 e- P3 g  v8 y% X0 ]在LISP里加载,然后在命令里输c即可
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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