Đến nội dung


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

Viết Lisp theo yêu cầu


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

#1401 transu

transu

    biết vẽ spline

  • Members
  • PipPip
  • 93 Bài viết
Điểm đánh giá: 19 (tàm tạm)

Đã gửi 22 December 2008 - 02:48 PM

các đại ca giúp em. e vào option tăng độ lớn của pickboxsize và aperture size - apply - ok.nhưng khi mở file khác nó lại quay về kích thước ban đầu.helpppppppppppppp
  • 0

#1402 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 22 December 2008 - 03:16 PM

các đại ca giúp em. e vào option tăng độ lớn của pickboxsize và aperture size - apply - ok.nhưng khi mở file khác nó lại quay về kích thước ban đầu.helpppppppppppppp

Kích thước Pickbox Size Aperture Size phụ thuộc vào biến hệ thống : PICKBOX APERTURE .
Mỗi khi bạn mở file, CAD sẽ đọc biến hệ thống này và cập nhật lại giá trị của chúng.
Để gán giá trị cố định cho Pickbox Size Aperture Size bạn có thể thêm chúng vào file acad.lsp hoặc acaddoc.lsp tùy theo hệ thống của bạn.
vi du :
(setvar "PICKBOX" 10)
(setvar "APERTURE" 10)
  • 1

#1403 transu

transu

    biết vẽ spline

  • Members
  • PipPip
  • 93 Bài viết
Điểm đánh giá: 19 (tàm tạm)

Đã gửi 22 December 2008 - 03:40 PM

Rất cảm ơn bạn nha.Lệnh này chỉ đo theo hướng vuông góc thôi còn hướng siên thì sao ha ban.

xoay ucs rồi dim thôi.hix.phải chịu khó thôi.nếu vẽ 1 bản vẽ quá dể dàng thì tiền cũng ít đi mà.hix mình đau lòng lắm.vẽ cad rất nhanh nên bị các đồng nghiệp ghét
  • 0

#1404 transu

transu

    biết vẽ spline

  • Members
  • PipPip
  • 93 Bài viết
Điểm đánh giá: 19 (tàm tạm)

Đã gửi 22 December 2008 - 03:55 PM

Kích thước Pickbox Size Aperture Size phụ thuộc vào biến hệ thống : PICKBOX APERTURE .
Mỗi khi bạn mở file, CAD sẽ đọc biến hệ thống này và cập nhật lại giá trị của chúng.
Để gán giá trị cố định cho Pickbox Size Aperture Size bạn có thể thêm chúng vào file acad.lsp hoặc acaddoc.lsp tùy theo hệ thống của bạn.
vi du :
(setvar "PICKBOX" 10)
(setvar "APERTURE" 10)

hix.làm ko được.bạn chỉ kỹ hơn 1 chút đi.mình thường vẽ tỉ lệ 1-1.mình đã lảm như bạn chỉ mà ko được
  • 0

#1405 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 22 December 2008 - 04:26 PM

hix.làm ko được.bạn chỉ kỹ hơn 1 chút đi.mình thường vẽ tỉ lệ 1-1.mình đã lảm như bạn chỉ mà ko được

Bạn có thể copy 2 dòng trên vào bất kỳ file lisp nào đó Vd: SetVar.lsp, sau đó từ Cad gõ Appload->chọn Contents.. trong muc Startup Suite - > clickAdd... rồi chon file SetVar.lsp -> Close - > Close.
Chúc bạn thành công.
  • 0

#1406 transu

transu

    biết vẽ spline

  • Members
  • PipPip
  • 93 Bài viết
Điểm đánh giá: 19 (tàm tạm)

Đã gửi 23 December 2008 - 08:57 AM

Bạn có thể copy 2 dòng trên vào bất kỳ file lisp nào đó Vd: SetVar.lsp, sau đó từ Cad gõ Appload->chọn Contents.. trong muc Startup Suite - > clickAdd... rồi chon file SetVar.lsp -> Close - > Close.
Chúc bạn thành công.

ặc ặc ko được
  • 0

#1407 transu

transu

    biết vẽ spline

  • Members
  • PipPip
  • 93 Bài viết
Điểm đánh giá: 19 (tàm tạm)

Đã gửi 23 December 2008 - 09:09 AM

Bạn có thể copy 2 dòng trên vào bất kỳ file lisp nào đó Vd: SetVar.lsp, sau đó từ Cad gõ Appload->chọn Contents.. trong muc Startup Suite - > clickAdd... rồi chon file SetVar.lsp -> Close - > Close.
Chúc bạn thành công.


thì ra là phải tạo lisp mới.mình làm được rồi.thanks
  • 0

#1408 LXD

LXD

    biết vẽ pline

  • Members
  • PipPip
  • 67 Bài viết
Điểm đánh giá: 11 (tàm tạm)

Đã gửi 23 December 2008 - 11:27 AM

Các Mem ơi. Có cách nào nội suy 1 đường Polyline từ 2 đường poly line cho trước không?

Tôi đang muốn nội suy đường tâm từ 2 đường cho trước
  • 0

#1409 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 23 December 2008 - 11:35 AM

Các Mem ơi. Có cách nào nội suy 1 đường Polyline từ 2 đường poly line cho trước không?

Tôi đang muốn nội suy đường tâm từ 2 đường cho trước


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1410 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 23 December 2008 - 11:36 AM

Các Mem ơi. Có cách nào nội suy 1 đường Polyline từ 2 đường poly line cho trước không?

Tôi đang muốn nội suy đường tâm từ 2 đường cho trước

Ý bạn nội suy là gì vậy,? theo nguyên tắc nào nhỉ? mong bạn nói rõ hơn ý định của mình.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1411 LXD

LXD

    biết vẽ pline

  • Members
  • PipPip
  • 67 Bài viết
Điểm đánh giá: 11 (tàm tạm)

Đã gửi 23 December 2008 - 12:06 PM

Tôi có 2 đường Polyline, chạy gần như song song. Tôi muốn có đường tâm của 2 đường ấy. Không thể Offset vì độ rộng giữa 2 đường không đều. Thanks!
  • 0

#1412 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 23 December 2008 - 01:40 PM

Tôi có 2 đường Polyline, chạy gần như song song. Tôi muốn có đường tâm của 2 đường ấy. Không thể Offset vì độ rộng giữa 2 đường không đều. Thanks!

Đây là bài toán dựng hình đơn thuần. Dựng đường phân giác của 2 đoạn thẳng không giao nhau.

Bạn làm như sau:
1. Gọi 2 đường ban đầu là màu đỏ như trong hình.
2. Copy 1 đường vào chạm đường kia (đường mới có hình màu vàng - yellow)
3. Dựng phân giác của đường ở bước 2 với đường màu đỏ (đường mới dựng màu xanh cây - green). Cách dựng đường phân giác ở đây
4. Dựng đường vuông góc với đường phân giác ở bước 3, cắt cả 2 đường màu đỏ (đường dựng mới có màu xanh trời - cyan)
5. Dựng đường thẳng song song với đường bước 3 và đi qua trung điểm của đường ở bước 4 (đường mới dựng có màu xanh biển - blue).

Hình đã gửi

Đường ở bước 5 là đường phân giác của 2 đoạn thẳng ban đầu, cách đều cả 2 đoạn thẳng đó.
  • 0

#1413 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 23 December 2008 - 02:04 PM

Các Mem ơi. Có cách nào nội suy 1 đường Polyline từ 2 đường poly line cho trước không?

Tôi đang muốn nội suy đường tâm từ 2 đường cho trước

Có lẽ bạn chưa thoả mãn với lời giải của anh Hoành. Ý bạn là lấy tim đường giao thông đúng không?
Nói chung:
1. Pline gồm nhiều đoạn thẳng và cung tròn nối tiếp nhau
2. Số segment của 2 lề đường có thể không bằng nhau

Theo ssg, bạn hãy post 1 file *.dwg mẫu lên, trong đó có vẽ vài con đường và tim đường chuẩn nhất theo cách làm (thủ công) của bạn. Lưu ý: không cần nhiều đường lắm nhưng chúng phải mang tính điển hìnhtổng quát.
Bạn đã post yêu cầu vài lần nhưng chưa có câu trả lời thoả đáng vì lý do đơn giản: bạn tiết kiệm lời quá! Hãy tìm cách diễn đạt để mọi người đều hiểu một cách chính xác. Xin nhớ rằng, người khác không phải là bạn, không thể hiểu chuyên môn, công việc bạn đang làm, cũng như ý đồ bạn muốn.
  • 0

#1414 nguoi_mong_du

nguoi_mong_du

    biết zoom

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

Đã gửi 23 December 2008 - 04:19 PM

Khi vẽ mặt bằng kết cấu. Tại các vị trí giao nhau giữa các dầm ta thường phải dùng lệnh trim để chỉnh sửa (xem hình vẽ) nhưng như thế thì rất lâu và bất tiện. Mình muốn nhờ Bác Hoành viết giúp dân kêt cấu 1 lisp mà chỉ cần quét tại vị trí giao nhau giữa các dầm thì có thể trim đc các đối tượng như hình vẽ. Theo mình thì lisp này giúp ích rất nhiều cho dân kết cấu. Mong nhận dc sự giúp đỡ của Bac Hoành cũng như mọi người.
Hình đã gửi
  • 0

#1415 transu

transu

    biết vẽ spline

  • Members
  • PipPip
  • 93 Bài viết
Điểm đánh giá: 19 (tàm tạm)

Đã gửi 23 December 2008 - 04:51 PM

các đại ca giúp em. e vào option tăng độ lớn của pickboxsize và aperture size - apply - ok.nhưng khi mở file khác nó lại quay về kích thước ban đầu.helpppppppppppppp

có pro nào chỉnh được cái này mà ko phải dùng lisp ko.giúp em với.thanks
  • 0

#1416 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 23 December 2008 - 05:48 PM

có pro nào chỉnh được cái này mà ko phải dùng lisp ko.giúp em với.thanks

Khi bạn vào Options chọn, các giá trị Pickbox và Aperture được lưu trong Registry. Thao tác open file bình thường không làm thay đổi chúng. Nếu mỗi lần bạn open file, các giá trị trên thay đổi có nghĩa là: bạn đang dùng một trình lisp nào đó, đã thiết lập autoload và tác giả chương trình đã cố tình làm như vậy (thật đáng tiếc!). Có các cách xử lý sau:

1.Muốn biết trình lisp nào gây ra lỗi này, bạn có thể vô hiệu tính năng autoload của tất cả chúng. Lần lượt appload bình thường từng cái một sẽ phát hiện ra. Dò tìm trong code của nó, chỉnh sửa hoặc vô hiệu hoá chúng đi.

2. Nếu bạn không tự sửa được thì... đừng dùng nữa! Theo ssg, một trình lisp gây ra điều đó chứng tỏ tác giả thiếu trách nhiệm với user, không nên dùng làm gì!

3. Nếu vẫn cứ muốn dùng lisp đó, bạn thử làm cách này xem:
Soạn file *.lsp có nội dung:
(setvar "PICKBOX" 6)
(setvar "APERTURE" 10)
Các giá trị 6 và 10 là ví dụ. Bạn có thể thay đổi phù hợp với thói quen thông thường của bạn.

Dùng lệnh Appload, tại Startup Suite bấm Contents -> Add -> Chọn file *.lsp nói trên -> Close -> Close
Hy vọng điều khó chịu của bạn sẽ hết.
  • 0

#1417 MoYeu

MoYeu

    biết pan

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

Đã gửi 23 December 2008 - 09:50 PM

Bạn có thể post yêu cầu về autolisp ở topic này.

Nghe tên tuổi anh Hoành khá lâu
Mong có dịp yết kiến
Tiện đây em có việc muốn nhờ anh:

Trên màn hình cad có rát nhiều các hình chữ nhật (cùng layer, REC, to nhỏ khác nhau, Có thể cùng tỷ lệ đứng/tỷ lệ ngang)
Em cần 1 lisp có chức năng thế này: Khi gõ lệnh nó sẽ đánh số thứ tự tăng dần từ trái qua phải từ trên xuống duối vào giữa các hình chũ nhật

Hình đã gửi
Đuơịc không ạ??

Giúp em với, em nghĩ sẽ có nhiều anh em dùng tới lissp này của bác
  • 0

#1418 nk_long

nk_long

    biết vẽ line

  • Members
  • PipPip
  • 29 Bài viết
Điểm đánh giá: 14 (tàm tạm)

Đã gửi 24 December 2008 - 01:40 AM

Khi vẽ mặt bằng kết cấu. Tại các vị trí giao nhau giữa các dầm ta thường phải dùng lệnh trim để chỉnh sửa (xem hình vẽ) nhưng như thế thì rất lâu và bất tiện. Mình muốn nhờ Bác Hoành viết giúp dân kêt cấu 1 lisp mà chỉ cần quét tại vị trí giao nhau giữa các dầm thì có thể trim đc các đối tượng như hình vẽ. Theo mình thì lisp này giúp ích rất nhiều cho dân kết cấu. Mong nhận dc sự giúp đỡ của Bac Hoành cũng như mọi người.
Hình đã gửi



Chép đoạn mã này về, tạo file lisp mới rồi bác dùng thử nhé:
Các đoạn giao có thể là LINE hoặc PolyLINE. Và lúc chọn bác có thể chọn thoải mái bằng crossing window, các đối tượng được chọn nếu là khác Line hoặc polyline sẽ được loại bỏ.


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;
;Ham tim giao diem giua 2 doi tuong
;ent1, ent2 : ename
(defun giao(ent1 ent2 / ob1 ob2 g kq sd)
(Vl-Load-Com)
(setq ob1 (vlax-ename->vla-object ent1)
ob2 (vlax-ename->vla-object ent2)
)
(setq g (vlax-variant-value
(vla-IntersectWith ob1 ob2 acExtendNone)
)
)
(if (/= (vlax-safearray-get-u-bound g 1) -1)
(setq g (vlax-safearray->list g))
(setq g nil)
)
(if g
(progn
(setq kq nil
sd (fix (/ (length g) 3))
)
(repeat sd
(setq kq (append kq (list (list (car g) (cadr g) (caddr g))))
g (cdddr g)
)
)
kq
)
nil
)
(if kq (setq gi (nth 0 kq)))
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defun c:ttr(/ os ss0 ss1 i j dtrim dti dtj gd dgiua dtrim)
(setq os (getvar "OSMODE"))
(prompt "\nCh\U+1ECDn các \U+0111\U+1ED1i t\U+01B0\U+1EE3ng c\U+1EA7n c\U+1EAFt gi\U+1EEFa: ")
(setq ss1 (ssget))
(setq ss0 (ssadd))
(while (/= (sslength ss0) 4)
(setq i 0)
(setq ss0 (ssadd))
(while (< i (sslength ss1))
(if (or (= (cdr (assoc 0 (entget (ssname ss1 i)))) "LINE")
(= (cdr (assoc 0 (entget (ssname ss1 i)))) "LWPOLYLINE")
)
(setq ss0 (ssadd (ssname ss1 i) ss0))
)
(setq i (1+ i))
)
(if (/= (sslength ss0) 4)
(progn
(prompt "\nNhóm \U+0111\U+1ED1i t\U+01B0\U+1EE3ng sai quy \U+0111\U+1ECBnh, ch\U+1ECDn l\U+1EA1i: ")
(setq ss1 (ssget))
)
)
)
(setq i 0)
(setq dtrim '())
(while (< i (sslength ss0))
(setq dti (ssname ss0 i))
(setq j 0)
(setq gd '())
(while (< j (sslength ss0))
(if (/= j i)
(progn
(setq dtj (ssname ss0 j))
(setq gi (giao dti dtj))
(if gi (setq gd (append gd (list gi))))
)
)
(setq j (1+ j))
)
(setq dgiua (list (/ (+ (car (nth 0 gd)) (car (nth 1 gd))) 2)
(/ (+ (cadr (nth 0 gd)) (cadr (nth 1 gd))) 2)
0.0
)
)
(if dgiua (setq dtrim (append dtrim (list dgiua))))
(setq i (1+ i))
)
(setvar "OSMODE" 0)
(command ".TRIM" ss0 "" (nth 0 dtrim) (nth 1 dtrim) (nth 2 dtrim) (nth 3 dtrim) ^C^C)
(setvar "OSMODE" os)
(princ)
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;

  • 0

#1419 nk_long

nk_long

    biết vẽ line

  • Members
  • PipPip
  • 29 Bài viết
Điểm đánh giá: 14 (tàm tạm)

Đã gửi 24 December 2008 - 03:20 AM

Nghe tên tuổi anh Hoành khá lâu
Mong có dịp yết kiến
Tiện đây em có việc muốn nhờ anh:

Trên màn hình cad có rát nhiều các hình chữ nhật (cùng layer, REC, to nhỏ khác nhau, Có thể cùng tỷ lệ đứng/tỷ lệ ngang)
Em cần 1 lisp có chức năng thế này: Khi gõ lệnh nó sẽ đánh số thứ tự tăng dần từ trái qua phải từ trên xuống duối vào giữa các hình chũ nhật

Hình đã gửi
Đuơịc không ạ??

Giúp em với, em nghĩ sẽ có nhiều anh em dùng tới lissp này của bác



Bác xem thử giống ý bác chưa nhá. Mà ở đây không cần là chữ nhật. Cứ đa giác 4 cạnh là được

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;ham sap xep theo tu tu so tang dan
(defun sort_num (LLLL / nLLL sort_order flag1)
(repeat (length LLLL)
(setq sort_order
(append sort_order (list
(apply 'min LLLL)
) ) )
(setq flag1 nil)
(foreach x LLLL
(if (or (not (= x (apply 'min LLLL)))
flag1
)
(setq nlll (append nlll (list x)))
(setq flag1 1)
)
)
(setq llll nlll
nlll nil )
)
(princ sort_order)
)
;ham tim trong tam dagiac 4 canh
(defun ttt(rec / i L lb1)
(vl-load-com)
(setq tt '())
(setq sodinh 0)
(setq i -1 L nil)
(repeat (fix (1+ (vlax-curve-getEndParam rec)))
(setq i (1+ i) L (append L (list (vlax-curve-getPointAtParam rec i))))
)
(if (and (= (length L) 5)
(equal (nth 0 L) (nth 4 L))
)
(progn
(setq lb1 (cdr L))
(setq tt (list
(/ (apply '+ (mapcar 'car lb1)) 4.00)
(/ (apply '+ (mapcar 'cadr lb1)) 4.00)
0.0
)
sodinh (length lb1)
cao (- (apply 'max (mapcar 'cadr lb1)) (apply 'min (mapcar 'cadr lb1)))
)
)
(prompt "\nKhông ph\U+1EA3i \U+0111a giác 4 c\U+1EA1nh!\n")
)
(princ)
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Ham chinh:
; yeu cau cac hinh chu nhat fai ve bang lenh REC hoac tao thanh bang polyline dong
(defun c:numrec(/ os mau ctexi j sscn ssx tt_list ss xlist)
(setq os (getvar "OSMODE"))
(setq sodinh 0)
(while (or (/= sodinh 4) (= mau nil))
(setq mau (car (entsel "\nCh\U+1ECDn hình ch\U+1EEF nh\U+1EADt m\U+1EABu: ")))
(if mau (if (= (cdr (assoc 0 (entget mau))) "LWPOLYLINE") (ttt mau)))
)
(setq ctex (getreal "\nCao ch\U+1EEF b\U+1EB1ng bao nhiêu % cao hình ch\U+1EEF nh\U+1EADt: "))
(setq ssx (ssget "_X" '((0 . "LWPOLYLINE"))))
(setq i 0)
(setq sscn (ssadd))
(setq tt_list '())
(while (< i (sslength ssx))
(ttt (ssname ssx i))
(if (and (= sodinh 4)
(= (cdr (assoc 8 (entget mau))) (cdr (assoc 8 (entget (ssname ssx i)))))
)
(setq sscn (ssadd (ssname ssx i) sscn)
tt_list (append tt_list (list tt))
)
)
(setq i (1+ i))
)
(command "-style" "Numrec_style" "Arial" "" "" "" "" "" "" ^c^c)
(setq xlist (mapcar 'car tt_list))
(setq xlist (sort_num xlist))
(setq i 0)
(setq ss (ssadd))
(while (< i (length xlist))
(setq j 0)
(while (< j (sslength sscn))
(ttt (ssname sscn j))
(if (= (car tt) (nth i xlist)) (setq ss (ssadd (ssname sscn j) ss)))
(setq j (1+ j))
)
(setq i (1+ i))
)
(setq j 0)
(while (< j (sslength ss))
(ttt (ssname ss j))
(setvar "OSMODE" 0)
(command ".TEXT" "j" "mc" tt (* cao (/ ctex 100)) 0 (rtos (1+ j) 2 0))
(setvar "OSMODE" os)
(setq j (1+ j))
)

)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

  • 0

#1420 romeo1982

romeo1982

    biết lệnh mirror

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

Đã gửi 24 December 2008 - 10:16 AM

Bạn có thể post yêu cầu về autolisp ở topic này.

Bác Hoành ơi cho em xin 1 cái lip : ví dụ trên bản vẽ của mình có 10 loại hatch khác nhau thì khi ra lệnh nó sẻ tạo ra 10 layẻ cùng tên hoặc khác tên với tên của hatch và gán cho mỗi loại hatch 1 layẻ đó được ko, cám ơn.
  • 0