http://bbs.mjtd.com/forum.php?mod=viewthread&tid=182681&page=1#pid881384

    1. ;;;1.命令可以连续执行,中键(或ESC)结束命令。
    2. ;;;2.不要调用offset命令。因为对于(直线,圆弧,圆)这些对象不能进行0值偏移,且新生成的图元不在当前层。
    3. (defun c:ERR()
    4. ;;计算多义线的各顶点的坐标值返回点表(pt_1 pt_2 falg)
    5. ;;参数plename----多段线图元名,ptj@----跟多段线某一段的交点或是ENTSEL在多段线上的选择点
    6. ;;全局变量flag1---如果为Ture,表示是直线段,否则为圆弧段
    7. ;;全局变量PTB#;pldata---存储多义线圆弧的一些参数
    8. (defun polyline_pt (plename ptj@ / ptz pts pte jd jd1 jd2 pt1## pt2## cnt pt_1 pt_2 flag pt_3 ptb### arcb# arcdata)
    9. (if (null ptb#)
    10. (progn
    11. (pline_pt plename)
    12. ;;rem---去余数 70组码代表多段线的标志,1代表封闭
    13. (if (= (rem (cdr (assoc '70 (entget plename))) 2) 1)
    14. (if (equal (car pt1##) (caar (reverse ptb#)) 0.0001)
    15. (setq ptb# (reverse (cons pt1## ptb#)))
    16. (setq ptb# (reverse (cons pt1## (reverse ptb#))))
    17. )
    18. )
    19. )
    20. )
    21. (setq cnt 1)
    22. ;;38组码代表标高
    23. (setq ptz (cdr (assoc '38 (entget plename))))
    24. (setq pts (caar ptb#)
    25. ptb### ptb#
    26. )
    27. (setq ptb# (cdr ptb#))
    28. (setq pt_1 nil
    29. pt_2 nil
    30. )
    31. (setq ptj@ (trans ptj@ 1 0))
    32. ;;通过交点跟各个点值的角度来判断交点在哪两点之间的直线上
    33. (while ptb#
    34. (cond
    35. ;;当是多义线的直线段时
    36. ((= (setq flag (cadar ptb###)) 0.0)
    37. (setq pte (caar ptb#))
    38. (setq jd (rem (angle pts pte) (* 2 pi)))
    39. (if (equal jd (* 2 pi) 0.0001)
    40. (setq jd 0)
    41. )
    42. (setq jd1 (rem (angle pts ptj@) (* 2 pi)))
    43. (if (equal jd1 (* 2 pi) 0.0001)
    44. (setq jd1 0)
    45. )
    46. (setq jd2 (rem (angle ptj@ pte) (* 2 pi)))
    47. (if (equal jd2 (* 2 pi) 0.0001)
    48. (setq jd2 0)
    49. )
    50. (if (and (equal jd1 jd2 0.0001) (equal jd1 jd 0.0001))
    51. (setq pt_1 (list pts flag)
    52. pt_2 pte
    53. )
    54. )
    55. (setq pts pte)
    56. (setq ptb# (cdr ptb#)
    57. ptb### (cdr ptb###)
    58. )
    59. (setq cnt (1+ cnt))
    60. )
    61. ;;当时多义线的圆弧段时
    62. ((/= (setq flag (cadar ptb###)) 0.0)
    63. (setq pte (caar ptb#))
    64. (if (setq arcdata (if-pointatarc flag pts pte ptj@))
    65. (if arcdata
    66. (setq pldata arcdata
    67. pt_1 (list pts flag)
    68. pt_2 pte
    69. )
    70. )
    71. )
    72. (setq pts pte)
    73. (setq ptb# (cdr ptb#)
    74. ptb### (cdr ptb###)
    75. )
    76. (setq cnt (1+ cnt))
    77. )
    78. )
    79. )
    80. ;;取出交点所在段的两端点
    81. (if (and pt_1 pt_2)
    82. (progn
    83. (setq pt_3 pt_1
    84. pt_1 (list (caar pt_1) (cadr (car pt_1)) ptz)
    85. pt_2 (list (car pt_2) (car (cdr pt_2)) ptz)
    86. flag1 t
    87. )
    88. (list pt_1 pt_2 (cadr pt_3))
    89. )
    90. (progn
    91. (setq flag1 nil)
    92. )
    93. )
    94. )
    95. ;;;;ZDM2000
    96. ;;;;寻找lwpolyline,polyline的各顶点并返回点表ptb#
    97. ;;参数plname为图元名
    98. ;;返回值:为(((100.0 100.0) 0.0) ((100.0 200.0) 0.0)((150.0 200.0) 0.423)...)的表,其中最后一项代表凸度
    99. (DEFUN PLINE_PT (plename / ssb ssb1 N PT PT_B arc_b arcbz ssn5 arcbz1)
    100. (setq SSB (ENTGET plename)
    101. N 1
    102. ssb1 ssb
    103. )
    104. (if (= (cdr (assoc '0 ssb)) "LWPOLYLINE")
    105. (progn (while (SETQ PT_B (assoc '10 SSB))
    106. (SETQ PT (CDR PT_B)
    107. arcbz1 (assoc 42 ssb)
    108. arcbz (cdr arcbz1)
    109. pt (list pt arcbz)
    110. )
    111. (IF (= N 1)
    112. (SETQ PT1## PT
    113. PTB# (LIST PT)
    114. )
    115. (SETQ PT2## PT
    116. PTB# (CONS PT PTB#)
    117. )
    118. )
    119. (SETQ SSB (CDR (MEMBER arcbz1 SSB)))
    120. (SETQ N (+ N 1))
    121. )
    122. ;;; ;;;有些封闭的LWPOLYLINE末端多出一点,该点与第一点的差值为本0.001需除去
    123. ;;;;;;在编译后的vlspLWPOLYLINE点位为三维点,而在Autocad中是二维点
    124. (if (and (= (rem (cdr (assoc '70 (entget plename))) 2) 1)
    125. (equal (car pt1##) (car pt2##) 0.002)
    126. )
    127. (setq ptb# (reverse (cdr ptb#))
    128. pt2## (car ptb#)
    129. )
    130. )
    131. (setq n 1
    132. ssb ssb1
    133. )
    134. (while (setq arc_b (assoc '42 ssb))
    135. (setq arcbz (cdr arc_b))
    136. (if (= n 1)
    137. (setq arcb# (list arcbz))
    138. (setq arcb# (cons arcbz arcb#))
    139. )
    140. (setq ssb (cdr (member arc_b ssb)))
    141. (setq n (+ n 1))
    142. )
    143. )
    144. (progn ;;polyline
    145. (setq ssn5 (entnext plename))
    146. (setq pt (cdr (assoc '10 (entget ssn5))))
    147. (setq arcbz (cdr (assoc '42 (entget ssn5))))
    148. (setq ptb# (list pt)
    149. pt1## pt
    150. arcb# (list arcbz)
    151. )
    152. (setq ssn5 (entnext ssn5))
    153. (while (/= (cdr (assoc '0 (entget ssn5))) "SEQEND")
    154. (setq pt (cdr (assoc '10 (entget ssn5))))
    155. (setq arcbz (cdr (assoc '42 (entget ssn5))))
    156. (setq ptb# (cons pt ptb#)
    157. pt2## pt
    158. arcb# (cons arcbz arcb#)
    159. )
    160. (setq ssn5 (entnext ssn5))
    161. )
    162. )
    163. )
    164. (setq arcb# (cons 0 (reverse arcb#)))
    165. (SETQ PTB# (REVERSE PTB#))
    166. )
    167. ;;函数:判断一个点是否在圆弧上
    168. ;;参数:b---凸度=2h/d h---拱高 , d---弦长;pnt1---圆弧的起点;pnt2---圆弧的终点;pnt3---需要判断的点
    169. ;;当b<0的时候,圆弧为顺时针旋转
    170. ;;变量:r--圆弧的半径;acpnt--圆弧中心点
    171. (defun If-PointAtArc ( b pnt1 pnt2 pnt3 / d h r acpnt refang1 refang2 strang endang midang arcdata dist1 refpnt1)
    172. (setq d (distance pnt1 pnt2)
    173. h (abs (/ (* b d) 2.0))
    174. r (/ (+ (expt d 2.0) (* 4 (expt h 2.0))) (* 8.0 h))
    175. refang1 (rem (angle pnt1 pnt2) (* pi 2))
    176. refpnt1 (polar pnt1 refang1 (/ d 2.0))
    177. )
    178. ;;当圆弧是逆时针旋转时
    179. (if (> b 0)
    180. (setq refang2 (rem (+ refang1 (/ pi 2)) (* pi 2)))
    181. (setq refang2 (rem (- refang1 (/ pi 2)) (* pi 2)))
    182. )
    183. (setq acpnt (polar refpnt1 refang2 (- r h))
    184. strang (rem (angle acpnt pnt1) (* pi 2))
    185. endang (rem (angle acpnt pnt2) (* pi 2))
    186. midang (rem (angle acpnt pnt3) (* pi 2))
    187. dist1 (distance pnt3 acpnt)
    188. )
    189. (setq midang1 (- midang strang)
    190. endang1 (- endang strang)
    191. )
    192. (if (< midang1 0.0)
    193. (setq midang1 (+ (* pi 2) midang1))
    194. )
    195. (if (< endang1 0)
    196. (setq endang1 (+ (* pi 2) endang1))
    197. )
    198. (if (< b 0)
    199. (setq strang1 (* pi 2))
    200. (setq strang1 0.0)
    201. )
    202. (if (and
    203. (or (and (>= strang1 midang1) (<= endang1 midang1)) (and (<= strang1 midang1) (>= endang1 midang1)))
    204. (equal dist1 r 0.0001)
    205. )
    206. (progn
    207. (setq arcdata (list (list acpnt))
    208. arcdata (append arcdata (list strang) (list endang) (list r))
    209. )
    210. )
    211. )
    212. )
    213. ;;计算在非世界坐标系时的点对应于世界坐标系的坐标值
    214. ;;此函数是针对直线段的
    215. ;;参数elist----用nselect、nselectp选择函数返回的表
    216. ;;此处有2个全局变量p10a p11a
    217. (defun matrix_b
    218. (elist / ent ename bname matlist p10 p11 cnt p10x p11x)
    219. (setq ent elist
    220. ename (car ent)
    221. bname (nth 3 ent)
    222. matlist (nth 2 ent)
    223. p10 (cdr (assoc 10 (entget ename)))
    224. cnt 0
    225. )
    226. (repeat 3
    227. (setq p10x (+ (* (car p10) (car (nth cnt matlist)))
    228. (* (cadr p10) (cadr (nth cnt matlist)))
    229. (* (caddr p10) (caddr (nth cnt matlist)))
    230. (cadddr (nth cnt matlist))
    231. )
    232. p10a (append p10a (list p10x))
    233. cnt (1+ cnt)
    234. )
    235. )
    236. (if (= (cdr (assoc 0 (entget ename))) "LINE")
    237. (progn (setq p11 (cdr (assoc 11 (entget ename)))
    238. cnt 0
    239. )
    240. (repeat 3
    241. (setq p11x (+ (* (car p11) (car (nth cnt matlist)))
    242. (* (cadr p11) (cadr (nth cnt matlist)))
    243. (* (caddr p11) (caddr (nth cnt matlist)))
    244. (cadddr (nth cnt matlist))
    245. )
    246. p11a (append p11a (list p11x))
    247. cnt (1+ cnt)
    248. )
    249. )
    250. )
    251. )
    252. )
    253. ;;针对点的模型坐标系和世界坐标系的转换
    254. ;;参数entlist--通过entsel或nentselp选择的返回表,pt--选择的点坐标
    255. (defun matrix_b_pt
    256. (entlist pt / ent ename bname matlist p10 cnt p10x p10a)
    257. (setq ent entlist
    258. ename (car ent)
    259. bname (nth 3 ent)
    260. matlist (nth 2 ent)
    261. p10 pt
    262. cnt 0
    263. )
    264. (repeat 3
    265. (setq p10x (+ (* (car p10) (car (nth cnt matlist)))
    266. (* (cadr p10) (cadr (nth cnt matlist)))
    267. (* (caddr p10) (caddr (nth cnt matlist)))
    268. (cadddr (nth cnt matlist))
    269. )
    270. p10a (append p10a (list p10x))
    271. cnt (1+ cnt)
    272. )
    273. )
    274. p10a
    275. )
    276. (defun *error* (msg)
    277. (if old-osmode
    278. (setvar "osmode" old-osmode)
    279. )
    280. (if old-ortho
    281. (setvar "orthomode" old-ortho)
    282. )
    283. (if old-cmdecho
    284. (setvar "cmdecho" old-cmdecho)
    285. )
    286. (if (member msg
    287. '("Function cancelled"
    288. "quit / exit abort"
    289. "console break"
    290. "函数被取消"
    291. )
    292. )
    293. (princ)
    294. (princ (strcat "Error: " msg))
    295. )
    296. (princ)
    297. )
    298. (defun dtr (a)
    299. (if (numberp a)
    300. (* pi (/ a 180.0))
    301. (princ "\nError : Invalid datatype.")
    302. )
    303. )
    304. ;;偏移复制函数
    305. (defun oneoffset (dist pldata / pnt refpnt intpnt ang acpnt r)
    306. (if pldata
    307. (setq acpnt (caar pldata)
    308. strang (cadr pldata)
    309. endang (caddr pldata)
    310. r (last pldata)
    311. )
    312. )
    313. (initget 1)
    314. (setq pnt (getpoint "\n指定要偏移的那一侧的点:"))
    315. (cond
    316. ((or (= ename "CIRCLE") (= ename "ARC"))
    317. (while (and
    318. (or
    319. (and (> (distance pt1 pnt) radius)
    320. (> (distance pnt selectpnt) (distance pt1 pnt))
    321. )
    322. (< (distance pt1 pnt) radius)
    323. )
    324. (<= radius dist)
    325. )
    326. (setq pnt (getpoint "无法偏移对象。指定要偏移的那一侧的点:"))
    327. (if (not pnt) (exit))
    328. )
    329. )
    330. ((and (or (= ename "LWPOLYLINE") (= ename "POLYLINE"))
    331. pldata
    332. )
    333. (while (and
    334. (or
    335. (and (> (distance acpnt (trans pnt 1 0)) r)
    336. (> (distance (trans pnt 1 0) (trans neapt 1 0)) (distance (trans pnt 1 0) acpnt))
    337. )
    338. (< (distance acpnt (trans pnt 1 0)) r)
    339. )
    340. (<= r dist)
    341. )
    342. (setq pnt (getpoint "无法偏移对象。指定要偏移的那一侧的点:"))
    343. (if (not pnt) (exit))
    344. )
    345. )
    346. )
    347. (if pnt
    348. (cond
    349. ;;第一种情况:选择的是直线,多义线的直线段时
    350. ((and (or (= ename "LINE")
    351. (= ename "LWPOLYLINE")
    352. (= ename "POLYLINE")
    353. )
    354. (null pldata)
    355. )
    356. (setq refpnt (polar pnt (+ (angle pt1 pt2) (dtr 90)) 10)
    357. intpnt (inters pnt refpnt pt1 pt2 nil)
    358. ang (angle intpnt pnt)
    359. pt1 (trans (polar pt1 ang dist) 1 0)
    360. pt2 (trans (polar pt2 ang dist) 1 0)
    361. )
    362. (entmake (list '(0 . "LINE")
    363. '(100 . "AcDbEntity")
    364. '(100 . "AcDbLine")
    365. (cons 10 pt1)
    366. (cons 11 pt2)
    367. )
    368. )
    369. )
    370. ;;第二种情况:选择的是多义线的圆弧段
    371. ((and (or (= ename "LWPOLYLINE") (= ename "POLYLINE"))
    372. pldata
    373. )
    374. (setq pnt (trans pnt 1 0)
    375. neapt (trans neapt 1 0)
    376. )
    377. (if (or (and (> (distance acpnt pnt) r)
    378. (> (distance pnt neapt) (distance acpnt pnt))
    379. )
    380. (< (distance acpnt pnt) r)
    381. )
    382. (setq radius (- r dist))
    383. (setq radius (+ r dist))
    384. )
    385. (if (> b 0)
    386. (entmake (list '(0 . "ARC")
    387. '(100 . "AcDbEntity")
    388. '(100 . "AcDbArc")
    389. (cons 10 acpnt)
    390. (cons 40 radius)
    391. (cons 50 strang)
    392. (cons 51 endang)
    393. )
    394. )
    395. (entmake (list '(0 . "ARC")
    396. '(100 . "AcDbEntity")
    397. '(100 . "AcDbArc")
    398. (cons 10 acpnt)
    399. (cons 40 radius)
    400. (cons 50 endang)
    401. (cons 51 strang)
    402. )
    403. )
    404. )
    405. )
    406. ;;第三种情况:选择的是圆
    407. ((= ename "CIRCLE")
    408. (if (< (distance pt1 pnt) radius)
    409. (setq radius (- radius dist))
    410. (setq radius (+ radius dist))
    411. )
    412. (setq pt1 (trans pt1 1 0))
    413. (entmake (list '(0 . "CIRCLE")
    414. '(100 . "AcDbEntity")
    415. '(100 . "AcDbCircle")
    416. (cons 10 pt1)
    417. (cons 40 radius)
    418. )
    419. )
    420. )
    421. ;;第四种情况:选择的是圆弧
    422. ((= ename "ARC")
    423. (if (or (and (> (distance pt1 pnt) radius)
    424. (> (distance pnt selectpnt) (distance pt1 pnt))
    425. )
    426. (< (distance pt1 pnt) radius)
    427. )
    428. (setq radius (- radius dist))
    429. (setq radius (+ radius dist))
    430. )
    431. (setq pt1 (trans pt1 1 0))
    432. (entmake (list '(0 . "ARC")
    433. '(100 . "AcDbEntity")
    434. '(100 . "AcDbArc")
    435. (cons 10 pt1)
    436. (cons 40 radius)
    437. strang
    438. endang
    439. )
    440. )
    441. )
    442. )
    443. )
    444. )
    445. (defun main (/ selectlist ent ename etype old-dist jingdu1 sedpnt old-ortho old-osmode err nselectlist s42 s41 s70 s71
    446. selectpnt pt1 pt2 ptw ptws pts plpts ptb# old-error newent strang endpnt radius p10a p11a neapt pldata
    447. endang)
    448. (vl-load-com)
    449. ;(setsysvar)
    450. (setvar "cmdecho" 0)
    451. ;(chg_undo_push)
    452. (or *dist*(setq *dist* 10))
    453. (setvar "errno" 0)
    454. (Initget 128 "D")
    455. (while
    456. (=(setq selectlist (nentselp (strcat"\n选择需要偏移复制的对象,改距离按D键:< "(itoa *dist*)">")))"D")
    457. (setq jingdu1 (getint (Strcat "\n请输入要偏移的距离<" (itoa *dist*) ">:")))
    458. (if jingdu1 (setq *dist* jingdu1))
    459. (Initget 128 "D")
    460. )
    461. (setq selectpnt (cadr selectlist))
    462. (setq err (getvar "errno"))
    463. (if selectlist
    464. (setq ename (cdr (assoc 0 (entget (car selectlist)))))
    465. )
    466. ;;如果用户用右键则退出,左键未选中则循环
    467. (if (= err 52)
    468. (exit)
    469. )
    470. (while (= err 7)
    471. (setvar "errno" 0)
    472. (setq selectlist (nentselp "选择需要偏移复制的对象: "))
    473. (setq selectpnt (cadr selectlist))
    474. (setq err (getvar "errno"))
    475. (if selectlist
    476. (setq ename (cdr (assoc 0 (entget (car selectlist)))))
    477. )
    478. )
    479. (if (= err 52)
    480. (exit)
    481. )
    482. ;;如果是块,则查看是否是阵列、比例不一致的块
    483. (if (nth 3 selectlist)
    484. (progn
    485. (setq nselectlist (entget (car (last selectlist)))
    486. s41 (cdr (assoc 41 nselectlist))
    487. s42 (cdr (assoc 42 nselectlist))
    488. s70 (cdr (assoc 70 nselectlist))
    489. s71 (cdr (assoc 71 nselectlist))
    490. )
    491. (if (or (and (/= s41 -1.0) (/= s41 1.0))
    492. (and (/= s42 -1.0) (/= s42 1.0))
    493. (> s70 1)
    494. (> s71 1)
    495. )
    496. (progn
    497. (princ
    498. "\n不支持阵列后或不一致比例的块。"
    499. )
    500. (exit)
    501. )
    502. )
    503. )
    504. )
    505. ;;是否是块中的多段线,是,找出选择点两端的断点值
    506. (cond
    507. ;;如果是块
    508. ((nth 3 selectlist)
    509. ;;如果是块中的多段线
    510. (if (or (= ename "LWPOLYLINE") (= ename "POLYLINE"))
    511. (progn
    512. (setq neapt (osnap selectpnt "nea"))
    513. (setq plpts (pline_pt (car selectlist)))
    514. ;;先将块中的各端点值通过矩阵转换成世界坐标,然后再找出选择点两端的点值
    515. (while (caar plpts)
    516. (setq ptw (matrix_b_pt selectlist (append (caar plpts) '(0.0))))
    517. (setq ptw (append (list ptw) (cdar plpts)))
    518. (setq ptws (append ptws (list ptw)))
    519. (setq plpts (cdr plpts))
    520. )
    521. (setq ptws (append ptws (list (car ptws))))
    522. (setq ptb# ptws
    523. ptws nil
    524. )
    525. ;;如果是圆弧段,则提示并退出
    526. (if
    527. (or (/= (last (setq pts (polyline_pt (car selectlist) neapt)))
    528. 0.0
    529. )
    530. (= flag1 nil)
    531. )
    532. (progn
    533. (setq pt1 (trans (car pts) 0 1)
    534. pt2 (trans (cadr pts) 0 1)
    535. b (caddr pts)
    536. )
    537. (oneoffset *dist* pldata)
    538. )
    539. ;;如果是直段,则取出端点,并绘制成线
    540. (progn
    541. (setq pt1 (trans (car pts) 0 1 )
    542. pt2 (trans (cadr pts) 0 1)
    543. )
    544. (oneoffset *dist* nil)
    545. )
    546. )
    547. );;结束多段线程序
    548. ;;如果选中的不是块中的多段线
    549. (progn
    550. (cond
    551. ;;当选中的是直线
    552. ((= ename "LINE")
    553. (matrix_b selectlist)
    554. (setq pt1 (trans p10a 0 1)
    555. pt2 (trans p11a 0 1)
    556. )
    557. (oneoffset *dist* nil)
    558. )
    559. ;;当选中的是圆
    560. ((= ename "CIRCLE")
    561. (setq pt1 (cdr (assoc 10 (entget (car selectlist)))))
    562. (setq pt1 (trans (matrix_b_pt selectlist pt1) 0 1))
    563. (setq radius (cdr (assoc 40 (entget (car selectlist)))))
    564. (oneoffset *dist* nil)
    565. )
    566. ;;当选中的是圆弧
    567. ((= ename "ARC")
    568. (setq pt1 (cdr (assoc 10 (entget (car selectlist)))))
    569. (setq pt1 (trans (matrix_b_pt selectlist pt1) 0 1))
    570. (setq radius (cdr (assoc 40 (entget (car selectlist))))
    571. strang (assoc 50 (entget (car selectlist)))
    572. endang (assoc 51 (entget (car selectlist)))
    573. )
    574. (oneoffset *dist* nil)
    575. )
    576. )
    577. )
    578. )
    579. )
    580. ;;非块的情况
    581. ((not (nth 3 selectlist))
    582. ;;如果是多义线
    583. (if (or (= ename "LWPOLYLINE") (= ename "POLYLINE"))
    584. (progn
    585. (setq neapt (osnap selectpnt "nea"))
    586. (if
    587. (or (/= (last (setq pts (polyline_pt (car selectlist) neapt)))
    588. 0.0
    589. )
    590. (= flag1 nil)
    591. )
    592. ;;如果选择了圆弧段
    593. (progn
    594. (setq pt1 (trans (car pts) 0 1)
    595. pt2 (trans (cadr pts) 0 1)
    596. b (caddr pts)
    597. )
    598. (oneoffset *dist* pldata)
    599. )
    600. ;;如果选择了直段
    601. (progn
    602. (setq pt1 (trans (car pts) 0 1)
    603. pt2 (trans (cadr pts) 0 1)
    604. )
    605. (oneoffset *dist* nil)
    606. )
    607. )
    608. )
    609. ;;如果是非多义线,则直接调用offset命令
    610. (progn
    611. (cond ((setq sss(equal *dist* 0.0 1.0e-4))
    612. (command "_COPY" selectlist "" "0" "0")
    613. )
    614. (t(princ "\n指定要偏移的那一侧的点:")
    615. (command "_offset" *dist* selectlist pause "")
    616. )
    617. )
    618. (command "change" (entlast) "" "p" "la" (getvar "clayer") "c" "bylayer" "")
    619. )
    620. )
    621. )
    622. )
    623. ;(setvar "offsetdist" *dist*)
    624. (main)
    625. ;(setvar "cmdecho" 0)
    626. ;(chg_undo_pop)
    627. ;(setsysvar)
    628. (princ)
    629. )
    630. (main)
    631. (princ)
    632. )