QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
8天前
查看: 2106|回复: 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;
0 l% R+ i0 X$ C) r0 c2 eOption Explicit9 x  {+ D# j4 V; B1 k3 ?
Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer  n3 a% q" N6 o7 s
Public Const VK_ESCAPE = &H1B. g: G* m7 R& H
Sub addcircle()0 u* H1 Y. ~' r
    Dim circleObj As AcadCircle
. f2 i& a0 w7 k1 R( s4 O    Dim centerPoint(0 To 2) As Double
8 z, E( D: ^7 o    Dim radius As Double
6 e3 W- \! k% d& P% G3 C; M     centerPoint(0) = 0#: centerPoint(1) = 0#: centerPoint(2) = 0#! a& F  l, W9 d
    radius = 10#" ~+ U- G6 J* c! m
    Do While GetAsyncKeyState(VK_ESCAPE) <> -327671 W2 J; z* \, ?/ v) ^: p
    DoEvents: b, U& o( s# {3 a% L& ~" B5 V) l
    Set circleObj = ThisDrawing.ModelSpace.addcircle(centerPoint, radius); ^( ]/ ?& {- e; B9 a# D
    radius = radius + 10/ @  ~+ H7 t( W) N$ p3 [9 I
    ZoomAll4 }3 P' Z; h9 ?2 q% ^
    Loop
& @  k+ i. Y; S; D3 g$ t 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.gif0 V/ `" x2 [" s( y' _; f1 D
VBA中插入模块,输入以下代码,运行sub addcircle;+ x+ A/ R& |4 H5 g$ c$ n  {  V- y; J
Option Explicit0 w/ l8 @9 V# j/ @6 i8 i
Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
9 n5 y) i7 r# \Public Const VK_ESCAPE = &H1B
" G# u( O, C8 R) d% ySub addcircle(), C5 y& _! |, `. m4 `% \
...
; A" O0 `& E% ?# A0 Z$ f5 j) ~
谢谢这位* q6 K$ V" l- m$ Y4 D9 u% v
!可惜我不是太懂
 楼主| 发表于 2009-3-28 14:41:30 | 显示全部楼层 来自: 中国江苏苏州
原帖由 TALKE 于 2009-3-28 12:58 发表 http://www.3dportal.cn/discuz/images/common/back.gif
( |2 z; q% t  E* j; ~. _, R什么叫“变量点”?
2 Z2 d8 t7 ]) R# X
比如说我在画圆时,CAD要我输入半径值,当作R,我给CAD这个变量一个值比如R=10,而每操作一次,R的值增加10就是R=R+10的意思.
发表于 2009-3-28 15:14:16 | 显示全部楼层 来自: 中国江苏无锡
你说的这个,是变量,不是变量点。建议语言尽量规范,使用常规的习惯用语,不要随意杜撰,如果提出新的词汇那就要予以解释清楚。+ I: `  i; U# l* v. h

4 ~6 T& C# v( e+ w  T6 l5 D: w% U- q在lisp中变量可以是点,比如:
* F+ k, H# v' j(setq p1 (list 20 30))# c# A1 V3 p  k1 P: Z. U
(setq p2 (list 120 100))
, q6 k" k0 A9 Z& y1 r那么就可以认为p1,p2分别是点:& `, ]3 o% V/ V& m1 I* N
函数(command "line" p1 p2 "")可以产生正确结果即在绘图空间中产生(20,30)-(120,100)的一段直线。4 R* p4 w* u: p' X' Z* O  j
所以你一旦提到点,人们就很容易想到这样的点变量,这样的变量无所谓增量的,所以容易引起误会。
3 j, u/ t* w$ K6 m/ z4 o9 o) u" z( L6 Q4 b5 q% a" _# I: I; Y, e
你的意思大概是在循环体中怎样使变量每循环一次增加一个常量吧?如果这个变量是r,增量是10,在lisp语言中赋值函数与+函数就可完成:0 l3 f) m6 i- Z+ _3 K; h+ s
(setq r (+ r 10))3 C( o% e1 [5 C
在C语言、VB中都是普通的赋值语句。# Z' v0 g; _( s, Y5 P, ^/ q, N

# H4 n9 N7 E' [" D9 g+ m) q) V' [, b4 s[ 本帖最后由 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
. \! Z! y  y# h2 F. p你说的这个,是变量,不是变量点。建议语言尽量规范,使用常规的习惯用语,不要随意杜撰,如果提出新的词汇那就要予以解释清楚。
0 l5 o- h6 Z3 o+ S" A: w3 {; m  h+ ^! |; l
在lisp中变量可以是点,比如:1 G; N- s9 t& [& n
(setq p1 (list 20 30))6 S+ h# F& f$ n1 H% ?- h( P
(setq p2 (list 120 100 ...

8 w8 G4 s; B  V/ h8 m  A; b3 Q6 l& E谢谢这位,其实关于LISP也好VB也好,我都不是太懂,我想能否在CAD COMMAND状态下直接输入R,命令每操作一次,实现R+10有无办法?8 I" F5 L) V5 I, p" V# X3 [' t
谢谢了。。
发表于 2009-3-31 12:53:58 | 显示全部楼层 来自: 中国江苏无锡
(setq r 10)6 j; C! E# m  E2 B1 }! ~+ [  T0 a
(defun c:c ()6 y" H0 x( h7 _
(command "_circle" pause r)! S) f4 A" U; _% }. F
(setq r (+ r 10))
4 b% C" B& O* z5 S)
: A* ]5 f: W7 _" e上面的语句可以满足加十的要求,但不用输入R,只要点选中心点,其半径自动加10,完成圆。
) h& W' \! m& E9 F2 y( Z  f$ V在LISP里加载,然后在命令里输c即可
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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