Đến nội dung


Hình ảnh
* * * - - 8 Bình chọn

Viết lisp theo yêu cầu [phần 2]


  • Chủ đề bị khóa Chủ đề bị khóa
3783 replies to this topic

#1261 18011985

18011985

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 255 Bài viết
Điểm đánh giá: 61 (tàm tạm)

Đã gửi 01 June 2010 - 07:45 AM

Chào các bạn mình có một số vấn đề cần hỏi các bạn như sau:
- Mình lần lượt vẽ từ trái sang phải 5 đoạn thẳng. sau đó mình vẽ đoạn thẳng thứ 6 vào giữa đoạn thẳng 2 và 3.
- Mình chọn tất cả đối tượng thì cad sẽ hiểu là lấy đoạn thẳng thứ 6 trước rồi tiếp theo là 5, 4, 3, 2, 1.
- Khi mình viết lisp đo khoảng cách giữa các đoạn từ trái sang phải thì xảy ra tình trạng đo khoảng cách giữa 1 và 2, 2 và 3, 3 và 4, 4 và 5, 5 và 6.
- Như vậy là đo theo trình tự vẽ của cad.
- Bây giờ mình muốn máy đo theo trình tự của mình từ trái sang phải 1-2, 2-6, 6-3, 3-4, 4-5.
Mong các bạn giúp mình.
  • 0
Trăng 16 trăng tròn
Em 16 bụng ... như trăng

Hướng dẫn sử dụng diễn đàn:
Để cảm ơn hay bài viết có ích: Ấn dấu + cuối bài.
Không vừa lòng hay bài spam: Ấn dấu - cuối bài.

#1262 Demenzizu

Demenzizu

    biết zoom

  • Members
  • Pip
  • 12 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 01 June 2010 - 11:46 AM

chào các bác các bác giúp em viết lisp
thứ nhất là:
trong cad có lênh OFFSET nhưng em muốn OFFSET đối tượng 3dpolyline cũng giống như OFFSET đối tượng 2D về cao độ của 3D là bằng nhau giống như cái 3D ban đầu vì lệnh của cad là không OFFSET được các đối tượng 3D mà phải nhập tọa độ cho chúng mới OFFSET được như vậy thì rất lâu vì bản vã của em có rất nhiều đối tượng 3D
thứ 2 là :
em có các đối tượng 2D polyline cần lisp để khi quét qua chúng các đối tượng 2D được chuyển thành 3D và các điểm cắt qua là có cao độ theo hướng mình quét qua và cao độ đó do người dùng nhập vào và cứ mỗi đường cao độ có bước chênh lệch nhau một bước là dellta do người dùng cho
  • 0

#1263 ut_cung

ut_cung

    biết vẽ line

  • Members
  • PipPip
  • 21 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 01 June 2010 - 02:51 PM

Cảm ơn Gia Bach!
Món này ngon nhưng không "hợp khẩu vị" của út, vì út dùng để đo rất nhiều cái khác nhau nên cái lisp của út sẽ phù hợp hơn. Chỉ khổ nỗi mỗi lần ghi ra text thì nó luôn có 1 khoảng cách phía trước. Út muốn xoá khoảng cách trống ở phía trước này
Cảm ơn mọi nguời!

Bác nào rãnh giúp út với!
Lisp út đang dùng: http://www.cadviet.c..._dai_2_c2_1.rar
  • 0

#1264 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 01 June 2010 - 03:50 PM

Bác nào rãnh giúp út với!
Lisp út đang dùng: http://www.cadviet.c..._dai_2_c2_1.rar

Út thay dòng này :
(emkT (strcat " " (rtos total) S2) p)
bằng dòng này :
(emkT (strcat (rtos total) S2) p)

Chúc Út thành công
  • 1

#1265 vailin

vailin

    biết zoom

  • Members
  • Pip
  • 17 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 02 June 2010 - 08:00 AM

Mong các bạn giúp đơ. Mình cần 1 lisp để vẽ taluy đường. Mình đã thử tìm trong diễn đàn nhưng đều ko dùng hiệu quả. Mình cần lisp hỗ trợ vẽ taluy bao gồm 3 đường dài, 2 đường ngắn, khoảng cách giữa các đường do mình tự cho. hiện mình đang làm thủ công rất mất thời gian. Mong mọi người giúp đỡ. Chân thành cảm ơn
  • 0

#1266 vailin

vailin

    biết zoom

  • Members
  • Pip
  • 17 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 02 June 2010 - 08:01 AM

bản vẽ mình hay làm các bạn xem xong giúp em với
  • 0

#1267 ut_cung

ut_cung

    biết vẽ line

  • Members
  • PipPip
  • 21 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 02 June 2010 - 09:12 AM

Út thay dòng này :
(emkT (strcat " " (rtos total) S2) p)
bằng dòng này :
(emkT (strcat (rtos total) S2) p)

Chúc Út thành công

Cảm ơn Bác Tuệ nhiều! Út làm được rồi! Chúc Bác sức khỏe!
  • 0

#1268 hoa35ktxd

hoa35ktxd

    biết lệnh move

  • Members
  • PipPipPip
  • 125 Bài viết
Điểm đánh giá: 38 (tàm tạm)

Đã gửi 02 June 2010 - 10:45 AM

Chào các bạn mình có một số vấn đề cần hỏi các bạn như sau:
- Mình lần lượt vẽ từ trái sang phải 5 đoạn thẳng. sau đó mình vẽ đoạn thẳng thứ 6 vào giữa đoạn thẳng 2 và 3.
- Mình chọn tất cả đối tượng thì cad sẽ hiểu là lấy đoạn thẳng thứ 6 trước rồi tiếp theo là 5, 4, 3, 2, 1.
- Khi mình viết lisp đo khoảng cách giữa các đoạn từ trái sang phải thì xảy ra tình trạng đo khoảng cách giữa 1 và 2, 2 và 3, 3 và 4, 4 và 5, 5 và 6.
- Như vậy là đo theo trình tự vẽ của cad.
- Bây giờ mình muốn máy đo theo trình tự của mình từ trái sang phải 1-2, 2-6, 6-3, 3-4, 4-5.
Mong các bạn giúp mình.

Không biết Lisp của bạn viết thế nào và "đo khoảng cách" của bạn là dùng lệnh DIM hay Distance
Theo tôi hiểu là bạn có 5 đường thẳng đứng, chèn thêm 1 đường vào giữa, muốn xác định khoảng cách giữa các đường thẳng.
Nếu sử dụng lisp bạn hãy lấy tọa độ X của điểm đầu (hoặc cuối) các đoạn thẳng nhét vào 1 list rồi sau đó sử dụng lệnh vl-sort để sắp xếp theo thứ tự tăng giảm, cuối cùng là tính toán sự chênh lệch các tọa độ trong list đã được sắp xếp.
  • 0

#1269 missyoutd01

missyoutd01

    biết pan

  • Members
  • Pip
  • 5 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 02 June 2010 - 11:32 AM

Chân thành nhờ các bác cao thủ lips giúp em với! chẳng là khi em dim bản vẽ, những chỗ khoảng cách lớn thì dim bình thường và đẹp nhưng những chỗ khoảng cách nhỏ chữ số dim tự nhiên nhảy hàng trông rất xấu, em lại phải tiến hành lệnh di chuyển dim để cho đường dim trở lại thẳng hàng, việc này rất tốn thời gian và công sức. Các bác cao thủ viết lips viết hộ em 1 lips chỉ cần đánh lệnh là đường dim ngon như bình thường với. Em cám ơn các cao thủ nhiều nhiều. Có hình vẽ minh hoạ bên dưới các bác xem qua cho em với nhé hihihi Thanks
http://www.cadviet.c...les/2/dim_1.dwg
  • 0

#1270 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1435 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 02 June 2010 - 01:36 PM

Chân thành nhờ các bác cao thủ lips giúp em với! chẳng là khi em dim bản vẽ, những chỗ khoảng cách lớn thì dim bình thường và đẹp nhưng những chỗ khoảng cách nhỏ chữ số dim tự nhiên nhảy hàng trông rất xấu, em lại phải tiến hành lệnh di chuyển dim để cho đường dim trở lại thẳng hàng, việc này rất tốn thời gian và công sức. Các bác cao thủ viết lips viết hộ em 1 lips chỉ cần đánh lệnh là đường dim ngon như bình thường với. Em cám ơn các cao thủ nhiều nhiều. Có hình vẽ minh hoạ bên dưới các bác xem qua cho em với nhé hihihi Thanks
http://www.cadviet.c...les/2/dim_1.dwg

Cần gì Lisp. Setting lại DimStyle là đuợc.
chọn option : Always keep text between ext lines

Hình đã gửi
  • 1

#1271 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 02 June 2010 - 02:46 PM

Không biết Lisp của bạn viết thế nào và "đo khoảng cách" của bạn là dùng lệnh DIM hay Distance
Theo tôi hiểu là bạn có 5 đường thẳng đứng, chèn thêm 1 đường vào giữa, muốn xác định khoảng cách giữa các đường thẳng.
Nếu sử dụng lisp bạn hãy lấy tọa độ X của điểm đầu (hoặc cuối) các đoạn thẳng nhét vào 1 list rồi sau đó sử dụng lệnh vl-sort để sắp xếp theo thứ tự tăng giảm, cuối cùng là tính toán sự chênh lệch các tọa độ trong list đã được sắp xếp.

Chào bạn 18011985,
Vấn đề như bạn nói theo mình hiểu là do bạn chọn tập hợp các đối tượng đoạn thẳng bằng hàm SSget. Khi dùng lệnh này thì các đối tượng được chọn sẽ được sắp xếp trong tập chọn theo trình tự bạn thiết lập chúng trong cad.
Vậy để có thể sắp xếp lại các đồi tượng này theo đúng ý của bạn (theo trật tự từ trái sang phải hoặc ngược lại) bạn phải dựa vào tọa độ của các điểm chuẩn trên các đoạn thẳng mà bạn đã vẽ . Bác hoa35ktxd đã hướng dẫn bạn một cách làm rồi đó. Bạn cũng có thể tự nghĩ ra cách khác như tạo một đường thẳng giao với các đoạn thẳng của bạn rồi lấy tập hợp các giao điểm này để xử lý .......
Về vấn đề này, bác Tue_NV có nhiều kinh nghiệm lắm, bạn có thể tham khảo bác ấy qua tin nhắn trên diễn đàn.
Chúc bạn thành công.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1272 coldmountain4891

coldmountain4891

    biết vẽ line

  • Members
  • PipPip
  • 21 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 02 June 2010 - 06:12 PM

mong các bác sửa giúp mình lisp này với:
http://www.cadviet.c...s/2/doitruc.lsp
mình đang dùng lisp trên để đánh số thứ tự tự động nhưng lisp này lại chỉ cho đánh đến 100 thôi nay mình muốn lisp này đánh số tự động không bị giới hạn. Rất mong các bác giúp đỡ mình sửa lisp này nhé! xin cảm ơn nhiều!
  • 0

#1273 chuotchi

chuotchi

    Chưa sử dụng CAD

  • Members
  • Pip
  • 1 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 08 June 2010 - 01:53 PM

Đây là phần tiếp theo của topic Viết lisp theo yêu cầu, mời các bạn tiếp tục thảo luận.

bác Hoanh ơi ! bác giúp em xem phần lisp này sai ở đâu được ko ? http://www.cadviet.c...ew_folder_8.rar !
  • 0

#1274 tnmtpc

tnmtpc

    biết dimcontinue

  • Members
  • PipPipPipPipPip
  • 370 Bài viết
Điểm đánh giá: 206 (khá)

Đã gửi 10 June 2010 - 07:35 PM

Nhờ viết lisp sửa cao độ của bản vẽ san nền
Mình có một bản vẽ san nền (bản vẽ 1) được tạo ra nhờ lisp SANNEN down trên diễn đàn Cadviet: Tại các mắt lưới đã có các khối thuộc tính. Tuy nhiên do nhu cầu tính toán, cần phải thay đổi hàng loạt giá trị cao độ theo một số gia nhất định. Cao độ thiết kế (CD_TK) được thay đổi tự động bỡi lisp SANNEN, còn cao độ tự nhiên (CD_TN) thì "pick từng phát một" :cheers:
Cần nhờ đến lisp với yêu cầu như sau:
Nhập lệnh->nhập số gia cần thay đổi (ví dụ trong bản vẽ số gia là -0.1)->chọn đối tượng trên màn hình, OK cho kết quả như bản vẽ 2
*Hoặc để sử dụng lisp trên phạm vi rộng, có thể thực hiện theo yêu cầu sau:
Nhập lệnh-> yêu cầu nhập tên thuộc tính cần thay đổi (ví dụ CD_TK)->nhập số gia->chọn đối tượng, OK chương trình tự lọc các thuộc tính (CD_TK) và thực hiện thay đổi
http://www.cadviet.c...2/bientapcd.rar
Cám ơn các bạn trước nhá!
  • 0

#1275 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1435 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 11 June 2010 - 01:52 PM

Nhờ viết lisp sửa cao độ của bản vẽ san nền
Mình có một bản vẽ san nền (bản vẽ 1) được tạo ra nhờ lisp SANNEN down trên diễn đàn Cadviet: Tại các mắt lưới đã có các khối thuộc tính. Tuy nhiên do nhu cầu tính toán, cần phải thay đổi hàng loạt giá trị cao độ theo một số gia nhất định. Cao độ thiết kế (CD_TK) được thay đổi tự động bỡi lisp SANNEN, còn cao độ tự nhiên (CD_TN) thì "pick từng phát một" :cheers:
Cần nhờ đến lisp với yêu cầu như sau:
Nhập lệnh->nhập số gia cần thay đổi (ví dụ trong bản vẽ số gia là -0.1)->chọn đối tượng trên màn hình, OK cho kết quả như bản vẽ 2
*Hoặc để sử dụng lisp trên phạm vi rộng, có thể thực hiện theo yêu cầu sau:
Nhập lệnh-> yêu cầu nhập tên thuộc tính cần thay đổi (ví dụ CD_TK)->nhập số gia->chọn đối tượng, OK chương trình tự lọc các thuộc tính (CD_TK) và thực hiện thay đổi
http://www.cadviet.c...2/bientapcd.rar
Cám ơn các bạn trước nhá!

Bạn chạy thử LISP : cộng (trừ) giá trị của Block thuộc tính.
Hình đã gửi
tên lệnh : ChAtt (Change Attributes)
- chọn Block cần thay đổi
- chọn Tag thuộc tính tuơng ứng cần thay đổi
- nhập số gia (muốn trừ, nhập số âm)
- chọn đối tượng trên màn hình

File download : ChAtt.zip
  • 2

#1276 tnmtpc

tnmtpc

    biết dimcontinue

  • Members
  • PipPipPipPipPip
  • 370 Bài viết
Điểm đánh giá: 206 (khá)

Đã gửi 11 June 2010 - 02:21 PM

Bạn chạy thử LISP : cộng (trừ) giá trị của Block thuộc tính.
Hình đã gửi
tên lệnh : ChAtt (Change Attributes)
- chọn Block cần thay đổi
- chọn Tag thuộc tính tuơng ứng cần thay đổi
- nhập số gia (muốn trừ, nhập số âm)
- chọn đối tượng trên màn hình

File download : ChAtt.zip

Kiểm tra lại file gia_bach ơi, giải nén không được : No archives found
  • 0

#1277 tnmtpc

tnmtpc

    biết dimcontinue

  • Members
  • PipPipPipPipPip
  • 370 Bài viết
Điểm đánh giá: 206 (khá)

Đã gửi 11 June 2010 - 02:37 PM

Kiểm tra lại file gia_bach ơi, giải nén không được : No archives found

Có lẽ do lỗi mạng. Mình đã down và giải nén được rồi
Cám ơn gia_bạch nhiều nhiều. Lisp quá tuyệt :cheers:
  • 0

#1278 duyanhhcm

duyanhhcm

    biết vẽ arc

  • Members
  • PipPip
  • 40 Bài viết
Điểm đánh giá: 8 (bình thường)

Đã gửi 13 June 2010 - 02:37 AM

Đây là phần tiếp theo của topic Viết lisp theo yêu cầu, mời các bạn tiếp tục thảo luận.

Tôi đang làm CTCon: tạo một tập chọn mới (ssmoi2) qua việc sử dụng hàm (ssadd). nếu thoả mãn một đkiện thì thêm ptử của tập chọn cũ (ssmoi) vào tập chọn mới (ssmoi2):
(aa$) có dạng một list như sau: aa$ = (1245 4589 4321 ....) = các số real.
(ssmoi): là một tập chọn qua việc chon bằng hàm (ssget)
(lay-yi-230 ssmoi chon vitri): là CT con lấy ra toạ độ điểm chèn yi của ptử thứ (vitri) trong tập chọn (ssmoi).
Vậy mà tại sao tôi không thể tạo được (ssmoi2). Khi chạy thử đều báo (ssmoi2) = nil ? Giúp tôi với ! Thanhks

(DEFUN tim-entyname23 (/ num liy vitri sslen sslen1)
(setq num 0)
(setq chon "C")
(setq ssmoi2 nil)
(setq sslen (length aa$))
(repeat (- sslen 0)
(progn
(setq liy (nth num aa$))
(setq vitri 0)
(repeat sslen
(progn
(setq gtriai (lay-yi-230 ssmoi chon vitri))
(if (= gtriai liy) (ssadd (ssname ssmoi vitri) ssmoi2))
(setq ent (entget (ssname ssmoi2 num)))
(setq vitri (+ vitri 1))
)
)
(setq num (+ num 1))
))

)(princ)
  • 0
DU KHONG TIM THAY PHUOC, IT RA THAY HOA MA TRANH DI...

#1279 duyanhhcm

duyanhhcm

    biết vẽ arc

  • Members
  • PipPip
  • 40 Bài viết
Điểm đánh giá: 8 (bình thường)

Đã gửi 13 June 2010 - 02:52 AM

Đây là phần tiếp theo của topic Viết lisp theo yêu cầu, mời các bạn tiếp tục thảo luận.

- Tôi lập một danh sách dạng dot (.) bằng hàm (cons) có dạng:
;(ss) là tập chọn đtượng qua hàm (ssget)
;(Entyname là tên ptử lấy theo (cdr (assoc -1 (entget ss)))

(SETQ APPE$ (1456 . Entyname1 458 . Entyname2 .....))
(SETQ PTU (CDR (ASSOC 458 APPE$)))
(SETQ THTIN (ENTGET PTU))
- Vậy tại sao khi thực hiện tôi không lấy ra được (entget) của phần tử Entyname2 ?
Mong bác Hoành cùng anh em giúp tôi với. Thanks !
  • 0
DU KHONG TIM THAY PHUOC, IT RA THAY HOA MA TRANH DI...

#1280 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 13 June 2010 - 01:26 PM

- Tôi lập một danh sách dạng dot (.) bằng hàm (cons) có dạng:
;(ss) là tập chọn đtượng qua hàm (ssget)
;(Entyname là tên ptử lấy theo (cdr (assoc -1 (entget ss)))

(SETQ APPE$ (1456 . Entyname1 458 . Entyname2 .....))
(SETQ PTU (CDR (ASSOC 458 APPE$)))
(SETQ THTIN (ENTGET PTU))
- Vậy tại sao khi thực hiện tôi không lấy ra được (entget) của phần tử Entyname2 ?
Mong bác Hoành cùng anh em giúp tôi với. Thanks !

bạn phải viết thế này mới đúng cú pháp:
(SETQ APPE$ '((1456 . Entyname1 )( 458 . Entyname2 .....)))

Còn dòng lệnh: (SETQ THTIN (ENTGET PTU)) có thể không hoạt động như bạn nghĩ.
  • 0