找回密码
 注册会员

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 346|回复: 0

基于组件的三维CAD系统开发的关键技术研究(三)

[复制链接]
发表于 2010-9-13 22:00:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转磨削论坛

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

×

  2 .3沿曲线标注

2 q9 G6 X% V& b! H* V" s( k/ ]; M$ f3 D9 I M: E1 y

  在设计中会遇到沿给定曲线进行标注问题,如平面布置图中的开挖线符号沿开挖轮廓的标注,剖面图中岩石符号沿轮廓线标注、点筋标注、沿任意曲线进行汉字标注等。此类问题主要应用AutoCAD的Measure或divide命令来解决。两个命令的主要差别是前者按指定的长度在曲线上标注,后者按给定的分段数等分曲线并在等分点处进行标注。要标注的轮廓曲线最好用pline线,要标注的符号预先做成图块,图块采用单位块,执行measure或divide命令,选取要标注的曲线,指定标注符号,分段长度或分段数即可完成标注,当发现标注的符号太密或太疏时,可以执行erase命令选择P进行删除,比例不合适或符号方向不正确,可以利用特性编辑器,选中所有标注符号,对标注符号的比例和旋转角度进行调整,直到满意为止。对于更高级的应用,可以编制LSP程序,实现符号和文字沿任意曲线标注。

4 t4 w; O) E( p3 l4 T , g/ t7 n; F- r

  2 .4表格生成

3 `4 l) p' ^. a/ E5 ~# N1 R6 A9 y4 t5 Q

  AutoCAD本身没有表格处理功能,设计图纸中工程量表、钢筋表等涉及到表格生成的问题可以采用以下方法处理:

9 |4 T- [' O7 q0 P2 b1 e! L % G2 N# @8 J0 e i j- b1 a! ~

  (1)直接把Word或Excel文件中的表格直接粘贴到CAD图形中,修改时只要双击图中的表格即可进入Word或Excel中进行编辑修改,修改完成后退出即可返回到AutoCAD中继续进行设计,该法优点是方便,快捷,易于掌握,可以充分利用Excel的强大计算功能。缺点是表格在AutoCAD中并不是一个普通图元,无法利用CAD功能对表格的字高、颜色和线宽进行编辑。

6 R u; y# z5 b) }5 z; J% i/ s : d! S' Y* L' c

  (2)编制LSP程序,依次输入表格标题、表格行数、表格列数、表格行高和列宽以及表格插入点等参数,可以自动生成表格,表格中已经按仿Excel形式填入了文字,可以用字处理软件对表格中文字进行编辑修改。

& U1 T$ A2 `2 a/ P/ a/ ] " h; T% t/ d7 _1 u

  (defun C:mtab()

* z% y+ B$ K, J, p! w * P8 s3 w4 M' o" A9 I" Z

  (setq tb1 nil tb2 nil tb3 nil)

' E& P. q, N3 B2 I/ { R* y ! R: d* T9 |4 N; J9 K( D

  (setq rows (getint "表格行数"))

, ]% B1 E9 j7 c4 z q$ h" r K& E

  (setq cols (getint "表格列数"))

- L* m- ]) q9 O3 Y 5 R) u7 \8 |( S- L/ _8 M' v

  (setq rowh (getreal "行高"))

2 w" U1 k5 a5 c0 j- `4 H 0 }+ n: Y7 p: h1 b

  (setq colw (getreal "列宽"))

$ Y' m# m2 T8 z7 s9 _+ v " P6 J) t: C6 Y* a

  (setq p1 (getpoint "/n表格左上角点位置:"))

/ r$ u" d% q, l$ K2 Y 3 H5 E! k9 z3 q6 L9 q: R

  (command "pline" p1 "w" "0.5" "0.5"

/ U1 \, ^* L8 V) I7 A0 `" H ( ?0 u) i4 d2 t" p3 h" _5 U2 t

  (setq p2 (list (+ (car p1) (* cols colw)) (cadr p1)))

+ r" {4 t( O2 a; A; f0 l 6 k/ e2 @$ C8 Q' v! p

  (setq p4 (list (car p2) (- (cadr p2) (* rows rowh))))

9 i+ y+ ]& Z' r / z. {2 G3 W$ ]6 D2 e$ O: r

  (setq p3 (list (car p1) (- (cadr p2) (* rows rowh))))

. P4 e1 N$ O% ^ 6 L* T, s' G: @$ B% {! S1 Y7 S

  "C" )

6 Q; j+ h9 P2 w; A/ i4 [: `- F% D% z1 m; \

  (setq n 1)

6 c. g- E+ M4 j. z. T) c . u! o8 ^/ o$ v6 R1 v% w6 k5 e5 j

  (while (< n rows);绘水平线表格

# {7 _8 x+ }. {$ }$ G. O6 j 4 P( ~' d* r# j; w6 x

  (command "pline" (list (car p1) (- (cadr p1) (* n rowh))) "w" "0" "0"

. L/ E3 X6 i, |/ D 7 z |: T. ?$ Q* v8 }0 J6 @

  (list (car p2) (- (cadr p2) (* rowh n))) "")

6 T. q$ Q5 c: l( z* } . V2 n; n& m& W7 W3 y* P* t

  (setq n (+ n 1))

) \- K- n5 B( [! `, s u8 G & j L* F$ f* R, c

  )

5 j+ O1 R+ r6 ` G: d- V 9 e4 f9 Q% N! _6 X

  (setq n 1)

# \4 j! o" {, Y( L- [& a$ v) { ; q6 m: I3 M0 T8 H( z/ g

  (while (< n cols);绘垂直表格线

8 b, k( {3 X1 G% i5 w- V) j$ B3 q8 n+ d+ m+ q; y

  (command "pline" (list (+ (car p1) (* n colw)) (cadr p1)) "w" "0" "0" (list (+ (car p1) (* n colw)) (cadr p3))

- v: r8 x$ l' I0 C/ E! u - N9 {# j0 q o4 W

  "")

/ m' O2 {2 |0 {3 v* m$ y& t. g 3 v" g( ?) f; g2 j9 r" [

  (setq n (+ n 1))

+ B, O9 k# ]4 Z, B0 s6 N # a0 V- I. w0 V4 T9 ~/ b$ B

  )

+ _& s& k x: b h! y" _$ A 7 {2 f1 |& u( {" L

  (command "text" "m" (list (+ (car p1) (* 0.5 cols colw))

3 e) H$ {) a1 @% P. {" @0 ?3 r) O+ r* c- q8 g# w. Q

  (+ (cadr p1) 5)) "3" "0" "TITLE" )

* {! w/ b5 f% r" U % O7 q) W. |) h3 ]% c7 h) n

  (setq n 0)

4 h W2 ?, |! g, e : _1 Q0 ^6 a( p6 W& U/ P, i- a

  (while (< n rows)

3 t# g" D7 B7 @! h+ C k2 a% D' C) s! [3 m E

  (setq m 0)

' J. o. s) i, N; u) d% I" Z7 [3 Z + l$ k' X1 c7 P" S

  (while (< m cols)

. m4 X3 h0 `) t+ K# p & w1 t6 i! Y0 o' a5 d& B. y/ L. _- V

  (cond

9 u2 \' z: {! ?5 N- ]0 w $ {% d [# ?; d; }" }( f

  ((< m 26) (setq bzstr (chr (+ 65 m))))

- H% N: [$ ^* N- E) N , ~% }: q! G% Y8 D

  ((>= m 26) (setq bzstr (strcat (chr (+ 64 (/ m 26))) (chr (+ 65 (- m (* 26 (/ m 26))))))))

0 c2 p% L3 ]3 s1 V6 [* w1 Q3 @8 _ ! {3 w/ ?% l2 J. `0 P

  )

. k3 ]/ l5 B0 V& ` 9 b: \5 l1 O. p, T5 u/ X

  (command "text" "m" (list (+ (car p1) (* 0.5 colw) (* m colw));表格内容标注

- n6 d, n5 e; Y/ ?1 ]/ } + q& T; |2 ?1 n& O

  (- (cadr p1) (* 0.5 rowh) (* n rowh)))

. J H* [7 E# W, F2 h( O ( x/ C" f0 @! ^6 n

  (getvar"TEXTSIZE") "0" (strcat bzstr (itoa (+ n 1))))

* h: @, _' a+ x" [* ~ $ A7 f/ }5 r7 S1 c

  (setq m (+ m 1))

0 `$ s5 `# y: L" a$ l0 I z+ }0 S n- L / ?+ G. ]. v* x3 K2 @

  )

7 m- z, `' I2 N9 W 8 b# A; `- K: g- N

  (setq n (+ n 1))

* D2 s" R, P( z % |8 {4 P/ x A7 y- e; w* `4 b* F

  ))

% w- ^# d1 D( S. k# h* x, J' V* Z. n( Z9 _/ ^4 V) M

  2 .6高程小数位数处理

$ }, d$ y. X; D3 \ & c% ^8 Q- [+ C% f# [" t. p

  尺寸标注小数位数很容易调整,但诸如高程、表格中数字要调整则很困难,借助LSP程序的调整很方便,只要选取需要调整的数字,根据提示输入需要保留的小数位数,则程序自动对所有选种数字进行修改。

3 o* T) L" n* c8 e6 f9 b3 d 2 W: V9 g5 K- {8 i

  (defun entsgc()

5 v3 [. f: A( ~$ I - l5 Y( ~, {, c6 d( y

  (setq n 0)

; y/ ^9 k5 s2 L5 D$ p# S 0 }! H+ V$ u7 x" Z4 y) F l" w

  (setq sh (sslength e1))

- l3 J+ {) s8 T* Q) [ 6 w9 L5 O& n& K' X( Y y; x

  (while (< n sh) (setq x (entget (ssname e1 n)))

# y: l' S' d1 M0 C7 f; d- u$ G + B3 E" z5 v2 _& G8 A

  (if (= (fld 0 x) "TEXT")

& U! L3 r: H; m1 O# A 3 @0 @5 F' u% b4 C

  (progn

* c% y0 A' Y9 R : t/ d( j' C' R" j

  (setq agc (fld 1 x))

0 v H+ }: D& T2 x# f4 G" L 8 ]3 A+ w2 K1 z7 g# u. ^% G5 e

  (setq c (substr agc 1 1))

2 m- k2 ] e; S; D5 c# z ; Z# a1 G c2 q: k; b

  (if (or (= c "+") (= c "-") (and (>= c "0") (<= c "9")))

# }+ ~/ a6 ^! A1 G Z% M5 @9 y 2 X% y1 O' S) W9 w& ~; u r

  (progn

; i( R$ J/ {4 W T0 W7 a0 a& _; K! O) j3 s

  (if (or (= c "+") (= c "-"))

" `6 H }; C; p, @+ c& f + _( e, q+ w$ k9 q7 R# [; f4 z; F7 @

  (setq bgc (substr agc 2))

" u5 }; }( L. U$ V8 q5 y3 E! ^ 5 z* H! _0 d+ u6 N q8 n

  (setq bgc agc)

- @" }# c2 X% q- @ ) U) n0 t; u" U$ t7 q3 Q" w1 n

  )

/ @2 T: z- m+ m" y0 U+ q) |; ?% o' R) Z& R% y9 e

  (setq cgc (atof bgc))

+ E+ N# n2 i- V % c! r$ G+ t: w/ q3 N6 \

  (setq zh (rtos cgc 2 gcws))

4 t+ L5 q! F8 J + y+ _+ f* J2 h: \0 c6 T

  (if (or (= c "+") (= c "-"))

* J) ~( A9 @. [6 w1 r5 r. g( a8 g9 @ : j$ p9 S! d- z* d! [

  (setq zh (strcat c zh)))

: K9 I5 F! m! U$ ~ % w* ^: \& [+ ]

  (setq x (subst (cons 1 zh) (assoc 1 x) x))

& ?4 T7 R( I ^! N* v 9 i9 Y# j b( f, a5 ?" i

  (entmod x)

! T6 y* S4 A" g# M# z; I M3 \: m* E; K" N% v5 {

  )

5 g6 V, `" [$ o( O0 [" y8 \% L: G. I, h

  ))

* |+ A" G% _5 k3 }5 D1 K# ^ ! }- Z, @# K* i

  ))

2 u# L, B8 c# g" W Z& b3 g ! l8 \) x8 V. h: O" w! S; y

  (setq n (+ n 1)))

4 H8 j& _6 y5 l/ M3 M( |2 T / t3 G; y$ F- F p

  )

6 B4 m% ]" e; L9 s% @8 ` ~& g5 i+ n9 D" n2 X' ~' p

  (defun c:yxws()

I0 J; Q( m$ H 5 `$ X7 U# Z" u# H, P8 `+ O

  (setq e1 (ssget))

/ z. V C7 _2 L/ i- y 9 F }/ Y$ m1 z [% l( g

  (setvar "dimzin" 0)

# C7 ?* W v/ G) K. u0 D9 I , c" L% }( E! O+ Z

  (setq gcws (getint "保留小数位数:"))

7 w# R+ `! y& p* ~% w2 M- }4 T 8 k3 z1 A/ E/ m5 q& [2 E% O2 | V5 L

  (if e1 (entsgc) (print "/n not found"))

' w) g+ j5 X* J( ?( D6 t7 Y & R7 A0 [/ W1 U+ W

  (setq x nil)

9 \- p- X1 R: z$ V# C2 A ! @3 e) q4 P7 n: s

  )

9 }( ?" z- p* |/ ]9 w _ ! q/ G' G7 Z5 ~! d3 N $ @7 d# g( U# T- o' K2 h" I/ u h- m# Z* I6 v0 g( P( x Z$ M7 c6 u
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

中国磨床技术论坛
论 坛 声 明 郑重声明:本论坛属技术交流,非盈利性论坛。本论坛言论纯属发表者个人意见,与“中国磨削技术论坛”立场无关。 涉及政治言论一律删除,请所有会员注意.论坛资源由会员从网上收集整理所得,版权属于原作者. 论坛所有资源是进行学习和科研测试之用,请在下载后24小时删除, 本站出于学习和科研的目的进行交流和讨论,如有侵犯原作者的版权, 请来信告知,我们将立即做出整改,并给予相应的答复,谢谢合作!

中国磨削网

磨削论坛 微社区

QQ|Archiver|手机版|小黑屋|磨削技术网 ( 苏ICP备12056899号-1 )

GMT+8, 2025-4-14 07:03 , Processed in 0.152093 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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