找回密码
 注册会员

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 334|回复: 0

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

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

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

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

×

  2 .3沿曲线标注

% V2 ^- \. d# `# n3 S: ? 2 G/ @0 U8 o) r! v9 M/ G

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

" U2 W; @( K# B# U* a - q3 k2 C8 [& y( I

  2 .4表格生成

3 N/ [' J, K+ s) e & p" v: ~" o; f0 J

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

6 G4 O0 c0 ]7 }3 M8 v 1 T) N5 y& J4 G9 Y: t: A. c; {

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

1 ~. [. m, k3 f: W- L. F- P % f3 d6 |6 S% Q2 q; M/ w

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

# V+ E0 k- n# q3 ^ : z$ l8 r/ h8 B! T; r' D: G

  (defun C:mtab()

2 p& _6 P2 q1 l : C3 i, {! m( m6 w" n

  (setq tb1 nil tb2 nil tb3 nil)

* E) U/ V1 _! N: L0 E4 k6 \ a% L7 s! b0 |' B4 t

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

7 v4 V, Y8 F9 q8 e' ~; ~' Q4 l ! h" }3 S F) p9 N

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

$ g/ E) y7 h9 i8 @. _% l ) d1 d, W8 \' i, `5 @

  (setq rowh (getreal "行高"))

1 e2 `" w; ~: r5 L3 I3 D' }5 M 9 ^& I! f2 }, B; u1 D$ Y. r

  (setq colw (getreal "列宽"))

$ e8 y& C, p) [9 r, | ! ^# h0 n- [4 R/ G4 o" \; @4 b0 h; t

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

$ v% {4 G; P$ w4 l4 @ ) V- y W% C& \# Z' C

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

# V: I) H1 x, _' g- i0 c4 _: S- p* s; X, F6 E

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

' U, u3 Y8 C/ d% [9 E ' A! S) c; ?3 I# y9 ]% h

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

. t: \; r% B4 @/ M; _, B8 J/ F3 ]/ `# l6 F1 B" V# N

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

- z* ~& d( N6 C- E 3 @' i* m, a5 ]: y Q

  "C" )

' e3 h: g6 c2 K) [ g- d8 d$ F5 @7 {5 a! }! z( J

  (setq n 1)

( D- {! g, v8 F* y9 w; T , v' S/ k# i9 p

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

! w, q# u X" C3 o3 B. ^+ L! H % P$ p$ z& a) C4 c5 X1 A# r

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

& ~9 C8 l( l3 i+ X 4 z8 X. x, g" ?: B2 V# g6 \

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

% o& l7 D2 O( d4 M* e 0 i" r8 |% u" G, W7 }1 L

  (setq n (+ n 1))

; c; M7 ^' `% L, S- {: V4 R' d6 l

  )

1 {6 n/ z5 i% S& E3 E& ? ) t6 p2 r/ v% L. o: i0 Q6 A) ^

  (setq n 1)

& W# k* g4 h/ ]* ^/ X5 a; G3 i4 n: s/ x7 Q4 d3 l* p6 R7 z3 ]

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

8 s2 a' c5 f a8 F% V( ~5 X9 i# A1 ?; C8 i9 ]6 \6 L

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

v/ ~. m& a/ _% ?" F J: } $ ]5 f1 n) K ^( r

  "")

& k* h' m: J$ W4 m6 c ( I; W9 F' {4 l, m% m" g* h) |' o

  (setq n (+ n 1))

. j9 E( g$ _5 N+ f& g& R 1 s3 v |( x* P1 P8 Q9 Q

  )

6 g* X3 H9 ?& b, { ! |, k! \' L# S% y

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

( y" O% t9 ]! U% a1 x/ B+ E8 ^ ( y" h, u: [# y4 r7 H9 G

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

3 [# n1 Y' }5 y& } @ $ c! K! D8 l8 u

  (setq n 0)

1 n/ e& V2 u* {4 }6 l0 ?0 C& C2 v3 Q8 o' u+ ~4 Y q

  (while (< n rows)

O0 t9 p% ?) r% D" c, |' h , }& p% l# A; t# G) v! E! X

  (setq m 0)

- @' b8 G: s: R @+ }% r, \. R - y# ~( {* ~7 n& I% S4 q* v4 Y

  (while (< m cols)

3 q: o' p% A7 Z! B- z 4 L% O( q4 B( C2 M4 s4 A

  (cond

, \9 S% H+ o& L, R e; L2 S7 E6 S/ E3 y5 f. ^* e

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

; a' p: D) i3 i: p. o' L& S3 G9 ]: o9 R5 H, y& ?

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

5 G C" g8 Q Q4 D$ i1 c . U+ Z0 I5 N' n

  )

0 S, o% ?3 }: o7 L* I+ X& S2 H 5 g, H# Z4 ~9 X" I8 L- p

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

+ |, O! S2 p8 t! G$ l4 q% ? + k( f4 e- K# ~' e" Y( g

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

r% G% |2 C( J / Q _# i2 v w) `/ J$ Z3 B3 o

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

}9 C" Y# h& H7 c% Y7 p- c ; o! f' m+ f: M

  (setq m (+ m 1))

! C, ~% Z8 d' d( E9 k : s( W2 y0 z% [" [: K$ l7 j

  )

/ s0 E' H4 _( A) Q7 n3 ~) G# ^. t. r# f2 C: X- c

  (setq n (+ n 1))

+ K# K$ b, S$ i0 R. q , I3 x$ m( C0 _

  ))

$ k3 Q. n* \. y, X ! U: w- _) x0 R! C Y" ^+ `1 X

  2 .6高程小数位数处理

. K' r4 G6 p) ~2 X3 ? % {8 y3 l* K6 t. w

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

; f6 k% J8 R6 T9 |1 r% V + n8 r2 T3 |0 }* N3 i8 `7 D

  (defun entsgc()

: T$ Y% p" C# W p4 S+ j) D % B5 [. d( K+ ~- u

  (setq n 0)

' A, c4 O" v; ^$ s, l2 w% U % D# R V$ G2 `0 \0 T

  (setq sh (sslength e1))

' U. E( U. \9 e; m3 K5 N$ n- g7 K2 q3 _

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

( ~; m2 j1 g9 ^4 S2 y - ]" l: t/ y! z8 e; b0 A

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

% Q1 ]0 }$ v& [0 ]) p* O3 ^ . _7 u I. n3 s; n# L+ ^

  (progn

- k- A- _' u" T& L) e5 D$ `3 }7 d* C! A. G2 T( j% t

  (setq agc (fld 1 x))

Z5 l4 y8 n V( {' q; u8 P ! T H7 R T) ~$ r# u/ [

  (setq c (substr agc 1 1))

' K$ I1 d: i4 ?5 i6 r 2 J7 x8 S5 \ U1 l. F- X

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

' l! e R+ g: a. M 8 v% t% P4 x `9 y5 ^0 M& J C

  (progn

2 j( e( b$ O/ V4 j, ?- t& C, ^5 X/ b6 w2 n- t

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

" k: M; c) d/ \ " r' V- R% ?) S

  (setq bgc (substr agc 2))

5 L I! \) G* n- |! X8 O 6 v. {4 P0 Y) K, y v* H4 A9 j& G

  (setq bgc agc)

0 I; D( E W( U8 n9 g % s0 W2 x1 ?6 D U

  )

: ]; a2 E; A4 F, M9 R! b+ Z1 T G0 D8 v K9 }$ }8 S1 _3 ?/ D8 o$ Z

  (setq cgc (atof bgc))

r Z* Z3 Y h! f p. b0 t: ~0 |7 J/ F( Q

  (setq zh (rtos cgc 2 gcws))

* |" M; o% {; |; O* u+ D* Y7 r9 T5 `

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

8 k0 O1 N5 Z% Y' R7 \1 U u. E7 C , \ Q# B4 U) B' G& x, N

  (setq zh (strcat c zh)))

V# J5 i# o% K8 k$ i2 @- H * s n' z( X2 `$ n. ]" I0 x9 Q- _! N

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

9 y; B6 u, j& ~% M8 L& a / C$ u9 W# }9 {; z9 e

  (entmod x)

# n. C$ T! ^" H0 v! U' v; D4 O3 I $ s" \; j0 ~0 j, d1 J* _7 _

  )

, C- ?# f v; X0 ]# n; O a$ w) m: t( K

  ))

, b+ S) b6 V3 s) ^% Q3 o* D 0 H$ i6 t6 j. @, S& ~1 K

  ))

3 s0 z* O* S6 s" Y1 f- i: Z & R) Q a, O' F9 i& P+ J

  (setq n (+ n 1)))

2 Y% b- Q& b2 {" V# A : e8 u3 y* \/ w! v

  )

, e$ l) T: K1 U8 X7 e5 C& l, c9 M1 T, {4 Q9 y( r" |5 y2 s' [2 u6 U

  (defun c:yxws()

8 i' a- E1 Z+ x: C) m1 E8 z7 [) u" f

  (setq e1 (ssget))

/ V2 w; l5 W2 l. a; c+ O. @6 G, y4 k- o

  (setvar "dimzin" 0)

% A; l: [% |# b9 E h7 C, z o0 }' ?# o& g% P. c2 I0 b

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

" \# N5 K3 J" b+ E, A7 U+ Q' f4 G I5 b4 O$ B2 |4 ^* s' D

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

, c( @& h9 N1 N, z; E9 m 8 q# l! z+ H7 I) E5 ]6 e* t

  (setq x nil)

, {8 I( [: P7 @- D* f8 V . v( f2 ?4 s/ Z! `" I# E

  )

5 ^' a4 c: @0 t2 ]) h2 U - T+ s" r$ o7 e" O: e' ]+ v) [ ( T. c, m- r) d0 R5 Z7 k ) g6 E L4 P0 c* Q
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

中国磨削网

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

GMT+8, 2024-11-16 14:28 , Processed in 0.144771 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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