找回密码
 注册会员

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 338|回复: 0

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

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

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

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

×

  2 .3沿曲线标注

1 q& W0 t n+ \2 ~/ ?3 M# t. d6 n 7 M" `2 [; c4 `# B

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

& N& y+ L \1 J9 B 3 Q$ D6 L1 R1 y: Z- Y' r

  2 .4表格生成

1 \7 U: g/ B$ t3 J, t$ |0 v5 ^: l " Z2 {* h" B8 K9 i: d8 b: p

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

1 p8 D) w4 p+ N$ [ 0 x, W1 z5 ^. W% c- z E* p

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

# L/ t. j0 v" P# J, H5 T, t 8 V, o$ W1 [8 p2 B& m S w

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

9 d5 K# r$ J4 o4 X/ U# W " m6 }% Q6 ?7 H

  (defun C:mtab()

5 _5 Q" W& B1 D' d/ A3 g7 P! ?- g" l( M9 K) c

  (setq tb1 nil tb2 nil tb3 nil)

! r: w. v: {6 m1 C' g; m1 g4 z& v. y* i

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

+ o/ A9 F/ W0 G% I7 q$ r # [9 C$ v2 ~! @! D3 s

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

b( ?* s Z8 i0 I 0 R; `* j9 `/ D5 a

  (setq rowh (getreal "行高"))

- v# |7 G3 ^+ q9 m - M( w/ s- f2 S! }0 y; Y# p, W7 [/ C

  (setq colw (getreal "列宽"))

( M' B7 ^7 X- B& |4 t" t0 A : q+ t* ]- L" ^; X1 B1 n2 G

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

' c1 L# K9 b6 o+ f# c$ Y( W2 b. L0 l! v+ E! P

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

% j* V& R, d9 C, L # G. y. f+ R8 i3 `) Y+ y% l* _( P- d

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

; F/ i( F9 s. u' Z6 p * ~2 z/ C9 A: i% R

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

% O2 a7 G3 h0 L- r + }4 w" u! u2 H

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

* B: z4 k, d0 w7 C ) ]; C) E+ J% P+ y S% H

  "C" )

$ ]9 _( H x* z& P3 u ; |% J, B* e1 T

  (setq n 1)

( q; i. {! u0 P& n. O/ f . o. m4 B3 d$ C& ^" i5 i

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

( u- y& t) B* i2 r- c2 D0 g8 U$ t3 {& u1 Y+ ^! @ g. ]

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

. |2 o+ s5 P: x+ J" i6 Y) ~- w% M# M- m5 S2 l- m

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

4 ]0 M8 l# y. c1 ?; m8 ^' h3 {0 K* {( I0 i$ F( v( d+ M

  (setq n (+ n 1))

: e) R1 Z' Q( ?: i . L2 |$ x/ ? T" Y0 s

  )

/ D- k1 y# x$ n0 ~3 h2 O# y( k( v7 ^' G

  (setq n 1)

9 e% k [; u% F6 ~ ; |4 e/ c% r! |' R5 B5 p6 @& _1 F0 k

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

' H1 l8 W4 p, m, C6 X 3 i: T+ Y2 Q" S+ S7 ~

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

* r \! `) ^; T. W j; E& e L3 b; x+ o/ ^8 k

  "")

" E: O: b$ B. t9 L0 Z# i: M- s/ `, ]7 {, V

  (setq n (+ n 1))

! i: o7 f6 C: G' ^. J9 u/ d + |% h5 @" B5 k; q* ^

  )

7 Z) s; h0 N4 ?+ s $ K. k! F% ~$ G6 U7 B

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

( o6 [$ l$ Q! ]! @- Q 5 U a0 r! T6 X0 G5 Z/ B) t! \

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

8 C" \' v. |5 S3 |) C: Q! h5 Z8 \0 G 1 b7 `( q2 ~7 o+ N- G: f" d

  (setq n 0)

) N4 w8 M; H V 2 ~3 T( S9 l# E$ N, h; x

  (while (< n rows)

- \% v$ T# v, a! y4 E2 S% f1 j1 T+ b* b' g

  (setq m 0)

0 M* W9 q! {2 |& v+ w; Q5 {4 B4 |1 a$ u1 y/ Z1 X

  (while (< m cols)

9 v2 o, w2 w: X/ m% `2 c ' Z* T8 y8 e# p" d. B. X

  (cond

8 C2 Q/ H0 f; F - r4 N5 B! H( J( o. o5 m( S& F; v

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

2 @/ {7 d. ^# K* @' A7 `5 w 6 n' F/ a0 e: x# ]- p1 c+ l

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

' Q6 K9 ?2 f4 i# b) C& _: X 4 o* N/ u* H7 p% A* v

  )

) [8 H; \, G* o4 w5 }! `( b$ {% y3 l% N1 @1 U+ a

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

) U* L h. u8 s! o& {% Q$ ~1 I , D, e+ F* A. W9 [ i

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

) Q- ?6 e' a+ v2 e ( ~9 Z5 w9 b: Q* u

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

. F: ]: A) X) J* } % Z- R4 K- x5 c# u; O3 Z: @

  (setq m (+ m 1))

- E9 b- }2 ?/ D* X 2 R4 H+ u4 E: K$ _9 {' Q. r) k/ \

  )

) h( S0 O& A2 Y: k* `: U# g & R9 w5 c% {) x# A/ d6 p# Z

  (setq n (+ n 1))

0 V+ }9 U! V# Q# P( M# s # [0 g, p* \; S- F. l! J7 z

  ))

* a! h9 A- G7 g* f2 l0 I! M 1 z) r7 s0 y1 O, T: R

  2 .6高程小数位数处理

0 h0 h* g- j6 @% N 6 e% O- H; c ?* a! D$ L( N/ _' Z

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

. @0 v; a0 b4 K6 Y + r3 @/ i4 L$ B# k0 u! T4 j

  (defun entsgc()

2 C5 |. \: I4 d- b7 }8 C5 U+ b* J8 I; U# Q0 w

  (setq n 0)

* \9 g( A+ P* X) W3 Y# v4 j 2 D1 d5 _/ x( L: T- {6 O- \$ k

  (setq sh (sslength e1))

) }( `4 m9 Y" G7 J9 l3 {( }' Q [: j6 Q; ^( y/ }8 X3 p

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

4 N( ~7 |6 u/ M( u. i * V& o- S, s' [2 [

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

; P! F! g, @+ I/ i9 _& |0 O$ d+ F # w( x" C2 d( A* H8 `8 W% f/ x

  (progn

) D4 Q8 X; |2 z. U' e6 D; |+ [: z $ R4 S) \" n# c( x7 n- J9 h1 q9 F

  (setq agc (fld 1 x))

4 }+ }4 R3 e# N- r( j ) q( G) ], l- d

  (setq c (substr agc 1 1))

: x5 ]0 k$ ^( m1 t) t ! r. a+ P, @6 q& _7 L# }3 x+ x

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

. z8 F. w9 i7 A( w, I ; U, O$ l) o! E

  (progn

' c1 l* J; F/ [) D2 f U/ ^* U$ N7 Z! V0 n

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

$ Y: X# M5 o S % c+ E) g1 W5 g. K5 R

  (setq bgc (substr agc 2))

8 P8 h+ l( `/ s! ^- q + Z" `9 e R( S+ G& N& K7 Y% ~0 t

  (setq bgc agc)

1 l( g4 l# M; K0 j/ l, D" W # s' \1 q4 f) d" j/ a

  )

* ~1 U( C- u" Q* A / v- g) ^/ a; B7 c* A; R1 u3 B

  (setq cgc (atof bgc))

' W9 Y2 Z) i/ U+ h) g . K1 @0 f: C P1 w

  (setq zh (rtos cgc 2 gcws))

g9 h r( J* r$ Q2 f/ ] J& I' q6 V( p# A# C

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

6 U# E! {9 c2 ^( ^7 ? * b9 K- e1 s8 e& E

  (setq zh (strcat c zh)))

, M8 S3 {3 Q' r' E& N ! u% w7 q( e% ~- z% R; _

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

! @: e* e0 y0 R& [, Q j+ s6 u" p0 J, v( \; ~) ^

  (entmod x)

) P% y, Z6 c' O: I $ F- R. @3 @" u2 t" h- p; V) _

  )

7 v m& z4 j. T% _$ D7 P0 q " |+ A4 p7 G% u( f6 k

  ))

& U/ E4 P. p9 j. W H7 y( }+ h } v+ |! g" m% [* {: K

  ))

) G- G* q4 H. @2 h$ J( G4 P/ E0 L - ?9 x# r7 E/ K: { P5 b* O

  (setq n (+ n 1)))

" d5 N) x% p9 e7 h$ a) J( _) q: H1 A2 h# O

  )

& ]- F# n; A3 x% d! l4 J' z - `( P# }( P5 S$ x8 Y& Q7 i

  (defun c:yxws()

/ k: `# [! @ d; C8 |( ^ 9 r/ x/ w) W8 o3 q) l

  (setq e1 (ssget))

/ q+ X& g e& T/ h5 q+ F $ X! N$ C) q# r9 v4 _

  (setvar "dimzin" 0)

M" Q8 Z' D2 k2 D$ r : R5 ?8 X3 z* Y3 a) G( s

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

2 o/ |1 V8 }8 Z+ L + W6 {8 H$ y5 X5 j+ S' P% _0 N( j

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

' v' T( q) _ O $ ], ?! x" O/ l9 @+ o

  (setq x nil)

! l' U3 v7 y; { * i; ^3 F+ {% y2 [

  )

2 S* U6 D5 k0 K& m8 h1 s6 N ; q& T2 I* m4 P% V% a8 ?, Z0 z ( f: k* s* Z7 M" K8 W# `3 } 3 k( \) L S; }! V, }- D5 }
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

中国磨削网

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

GMT+8, 2025-1-9 10:48 , Processed in 0.125858 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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