找回密码
 注册会员

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 354|回复: 0

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

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

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

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

×

  2 .3沿曲线标注

% n$ r, R) s* Y7 i( j , t5 ~' |3 g9 E2 V0 N

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

+ U5 p e- i3 ?" L0 d3 K6 H8 r# ^+ C# @4 b5 q9 N6 V7 f

  2 .4表格生成

0 q0 S- J3 D; m: Y5 M3 q( M; @# n: \. R/ c) |

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

% t% g$ G8 K( e" r3 i4 r& g4 N) L& F

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

8 W4 R2 j1 Q: {! ~% m/ g - a9 T% Q# _0 o$ S( E

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

: G8 ]( x1 s) x0 V9 W+ ]3 a 6 I: s+ a+ U6 _/ M8 U" \

  (defun C:mtab()

# @# B7 i4 Q1 f4 a$ Z& K, ^- s9 B 5 d* Z/ T; o4 F

  (setq tb1 nil tb2 nil tb3 nil)

& T2 N: ]5 ~, A, K3 i1 r4 } 8 Z/ K( L- ^: ?3 p( e, J1 h. o

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

# @) A! I% Z% u4 |4 c , G: q: f6 x. f

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

* ~; W/ f; [4 i5 X- g* P " S4 {9 i3 F7 | B

  (setq rowh (getreal "行高"))

$ P+ c/ u7 f# e5 Y4 J9 _8 k- O / i: v( ^& G! z' l

  (setq colw (getreal "列宽"))

2 V( h2 I6 Y, N$ C/ F8 p " I4 n* ]- u& L0 f* d, e! x

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

" J, I8 _3 n3 P6 M1 l , D! p7 n) J- V' O" V) Y7 H

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

% Q, y$ b H D' O6 e& L 2 K6 S$ W) ?) C j

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

% n$ j0 P$ h3 l / j. c% M$ T' H. k K

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

. }! n2 S6 y5 _' Z : _+ U. q ^: u5 @

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

* L* `. d0 d j! A' K * S* r; T3 I: {. O1 u8 G6 _8 ~/ J

  "C" )

& N% ~7 X, n3 C! X$ ]# \ - T, H5 o8 Q; R

  (setq n 1)

5 r$ p3 B: I% L( H & C, X0 l' T q. c# H Z1 U

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

& ^) F) o7 _# T$ c( T& ?& E6 ^. k2 A0 A6 p4 U! S. C+ M

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

) W. h, N S9 |: M3 u & {& ^0 D- w) w4 b! e, ~( u

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

; ?5 ?' X6 c5 x J- r' u5 T8 N* I v z; ^

  (setq n (+ n 1))

- d) }5 d2 q, d8 c2 U8 o- g/ ~# B9 s- X# s9 Y- j- ~! t% _

  )

" A7 s' d) ^& e2 f . g; I8 A7 z' U; X. p+ f

  (setq n 1)

8 m! {; P/ ?, Z ) G# ^* @. N0 d/ w0 f

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

6 ?% H/ U# T/ a : {" ^5 p+ f, ~" q/ _3 A k

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

) T L. `: U1 A 0 y/ k) M" G- \2 \. N# I" P: u! R7 I

  "")

" r* Q& x% W' ]0 P- g& T [ ) G0 `; S4 T; \0 U

  (setq n (+ n 1))

% I* \" ^8 I' O/ w+ \: { * |* O, |1 K! r- G2 w) x/ H% ~

  )

% @! e; C8 \: {1 p6 S" S% u! a7 p& Q

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

* v. R; o( c5 R . T$ F, C7 E% G" C# ]2 f+ |& t

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

. t4 Q, r8 W$ {5 U; k4 T( { $ d1 {% e: k ^" _! i2 K+ z2 I

  (setq n 0)

- x3 i9 P/ L- ]8 ?" Z2 Z/ i D 8 ~6 b! b, {! k8 h( N

  (while (< n rows)

% z- u5 g) v$ s( B! k5 x* o6 Z8 C3 e; L, s: t2 M

  (setq m 0)

# L3 A' ^% f b9 r- L/ Y4 @6 g) H0 z- P: H' f$ Y1 J

  (while (< m cols)

! f; \1 B3 n x5 H7 p8 ` & e+ ^/ D# i* r& b

  (cond

0 ]8 w9 j8 N( o$ Y y' R5 _9 B : ~& f& Z% l5 C/ }/ A' _+ [

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

- X; s" s3 o1 t/ k 3 j5 c" o- d9 Z$ U

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

2 Q+ X4 {: {& T4 k + S. C% S6 [+ _

  )

! g! P$ j: ^# F: i# u$ r8 h* R4 i( W5 [& k N0 z

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

& Z- y# Y4 d% k( }% w $ B' w3 j* {# ]: A+ E

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

* }# k/ P( R _ 1 y6 W- y/ H0 c: Y0 b6 H4 g4 |

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

* ^, \6 I/ T# b F 8 d8 z8 ^' g$ T* e% {: v8 [

  (setq m (+ m 1))

. w6 h/ L4 t4 f; x I5 x l' E' c: s7 j8 M4 s

  )

: e# m& w! O- b* P4 I2 U 6 ~* N2 t; o5 C! u' E$ ?

  (setq n (+ n 1))

# ~; j9 A" R4 j9 |6 X9 Y0 R# _$ R* i

  ))

: A; H2 u9 I6 N& E9 t + J" t" G5 v1 P6 t8 h; O& u

  2 .6高程小数位数处理

" U6 H! T$ t; y( y2 f$ ]% U* ]2 T( W : _5 V& z- p! ]3 H7 j* _& n! `

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

2 K& n! m& V) j; U $ k9 v+ \8 f4 ?5 O" C

  (defun entsgc()

& `( R% C6 a* w8 F1 e" J9 p. `. E% R- q# _4 z( q

  (setq n 0)

, H( M3 y6 P u) `2 _ $ x- Z. w3 \! j8 c' D6 V5 h

  (setq sh (sslength e1))

, M1 v/ B' W5 ]: z6 i & h. m$ _. J/ e& [7 G8 _% F

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

2 m: X* E2 [# p% a. F" _8 B & \2 d1 K: j+ w5 H

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

4 _; g) J$ M; X L3 w" Z( t" O3 j( Z; k

  (progn

5 U$ `% M2 ?9 o7 R/ G $ c9 e1 Y/ H% H" K4 ^1 B7 o

  (setq agc (fld 1 x))

3 B& l0 g! g" R p # @) {: ~; A2 n( l* H8 @

  (setq c (substr agc 1 1))

7 q. K. N: D4 M' k0 X4 E8 ?0 @ ( S, H+ o: }7 _* F0 R

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

) m. G% N8 C, H9 c6 s * M9 a+ {: o; l6 D

  (progn

! d8 }2 h* ?! q% Q$ P) y! z7 E' a1 d! }* i; j

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

& I" Z% X6 W1 ?0 V; ~, Q 8 X, x U9 r3 M+ I

  (setq bgc (substr agc 2))

: B2 a3 m; M/ z# p7 z/ _+ M+ x# C; |8 m$ n: w8 R

  (setq bgc agc)

- g) Z; i5 \% P: V! f * ?! P# }, v5 Z' u5 c0 }' ?1 {

  )

% k% X& c) _# t7 k8 x8 W, s7 J/ H9 e7 \" Y) K

  (setq cgc (atof bgc))

# V& t. i+ u0 X2 N" S # ~9 s! _& F4 `2 r

  (setq zh (rtos cgc 2 gcws))

# {* V( b9 \ w; N. Q& u2 \; v. g' H0 R" {0 o

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

" E) t' ?( X1 W2 W+ N8 A; o+ n1 h/ ]

  (setq zh (strcat c zh)))

1 v) N: m. |+ U0 `2 {( W4 p% C6 v& M7 a6 h# x9 P1 K, c; q

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

\: I4 | p" ? : s! Q5 i3 F# y O( B( l

  (entmod x)

& w9 A" @, k% Z% v" X4 z5 k 5 q! Y6 @4 V' C+ P3 B% J

  )

7 x/ w! w. j, W3 X- G# h! O # y1 k8 ` z) v# p. s8 n; v0 y

  ))

- `% r% A# s# s2 S: [! E2 `4 T; Q 6 U: q0 T5 I* Z& c/ ? w

  ))

" e3 ~" K1 m: t* S9 A: v) l% w8 b/ X/ H9 e5 `( s% p7 Z- t: @

  (setq n (+ n 1)))

( Q0 k! g- R& K: ^1 ]7 ^( _* i$ o \( w2 N* g5 @

  )

9 [; F0 x8 z- b: j ' A8 U$ g+ |0 u6 }) J$ ~+ L

  (defun c:yxws()

6 S0 b9 B ]4 Q! ^7 b / b" {5 s$ d+ k* H! I

  (setq e1 (ssget))

* _$ a" l: j! @& c 8 N6 T5 R! N3 Q% ~; M+ q

  (setvar "dimzin" 0)

+ ~* J3 f: ]3 E: h3 w ! v- e; K9 @) y Z- [9 d( C

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

+ [2 L) R- H/ o( `2 ], } " L6 A+ N7 Q4 |

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

* `# T9 X3 h T' D / [$ c+ {# \8 o* |3 X

  (setq x nil)

6 {+ [$ A$ P/ F3 g5 M' O# `0 s, Q- I1 \ ' b$ j8 b# N$ u$ V

  )

! T& Q# p! Z. [2 ?- D 9 @ t2 X, Y' V6 I* b4 K3 Y" q/ l5 c. Z# D$ G7 K7 j+ q ) C+ m }5 E* s1 c
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

中国磨削网

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

GMT+8, 2026-4-5 07:53 , Processed in 0.122800 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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