Đế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

#3121 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 15 February 2011 - 10:54 AM

Hàm SetHvar mình viết đi kèm luôn hàm chính, sao lại có khi load hàm chính lại k load hàm con ?Bạn có thay đổi j k?
Mà bạn đã thử dùng cái lisp mình mới viết hqua k ?? Mình có phần hơi nản đó :)

Sao mà nản sớm thế hả em :blush:
  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#3122 phongbk

phongbk

    biết pan

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

Đã gửi 15 February 2011 - 11:20 AM

Bạn ơi mình đang bị vướng mắc với công việc. Bạn nào có biết lệnh nào tự động đo các đoạn thẳng trong cad mà các số đo của các đoạn ấy vẫn hiện thị như cách đo bình thường.
  • 0

#3123 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 15 February 2011 - 01:57 PM

Bạn ơi mình đang bị vướng mắc với công việc. Bạn nào có biết lệnh nào tự động đo các đoạn thẳng trong cad mà các số đo của các đoạn ấy vẫn hiện thị như cách đo bình thường.

Trước tiên bạn dạy cho mọi người khái niệm "cách đo bình thường" thì may ra mới biết cách làm nó "hiện thị" cho giống được!
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#3124 shitty

shitty

    biết zoom

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

Đã gửi 15 February 2011 - 03:11 PM

Hàm SetHvar mình viết đi kèm luôn hàm chính, sao lại có khi load hàm chính lại k load hàm con ?Bạn có thay đổi j k?
Mà bạn đã thử dùng cái lisp mình mới viết hqua k ?? Mình có phần hơi nản đó :)


thành thật sory bác...tai e còn nhiều cái chưa biết và chưa hiểu nên nhiều câu hỏi khiến bác bực mình.những điều bác nói đối với e cũng như những người mới tham gia đều rất có ích.! :D thanks bác thêm lần nữa !!! chứ bác nản thì lấn sau e biết hỏi ai ...:P
  • 0

#3125 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 15 February 2011 - 03:24 PM

Vấn đề là bạn đã giải quyết được cái sự thiếu àm đó chưa.Bạn dùng nguyên cái H2 xem nó có đc k ?
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#3126 shitty

shitty

    biết zoom

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

Đã gửi 15 February 2011 - 05:13 PM

Vấn đề là bạn đã giải quyết được cái sự thiếu àm đó chưa.Bạn dùng nguyên cái H2 xem nó có đc k ?

e chuyển sang dùng nguyên lisp h2 rồi !!! ngon lành cành đào bác ah...mèo trắng mèo đen ko quan trọng,miễn sao la bắt dc ... chuột la dc muh :D thanks bac heh
  • 0

#3127 thichhoabinh

thichhoabinh

    biết vẽ circle

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

Đã gửi 17 February 2011 - 10:20 AM

Các bác giúp em 2 lisp nhỏ này với :
1.Khi trích xuất 1 vùng ghi chú, ta tạo 1Hình chữ nhật khoanh vùng hình đám mây (như đoạn gom lời thoại ý), có lisp nào vẽ nhanh đường này một cách đều đặn hoặc chọn hình chữ nhật có sẵn thì nó tạo ra luôn không ạ ?
2.Lisp tạo Block Annonymos với điểm chèn do ta chỉ định
Thanks các bác rất nhiều ạ
  • 0

#3128 quocanh1981987

quocanh1981987

    Chưa sử dụng CAD

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

Đã gửi 17 February 2011 - 05:03 PM

nhờ anh Hoành viết dùm cái lisp : mình có một miếng hatch ,vẽ thêm một nét cắt ngang miếng hatch đó. khi ta chọn nét đó thì miếng hatch bị chia làm 2 phần.
  • 0

#3129 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 17 February 2011 - 06:57 PM

nhờ anh Hoành viết dùm cái lisp : mình có một miếng hatch ,vẽ thêm một nét cắt ngang miếng hatch đó. khi ta chọn nét đó thì miếng hatch bị chia làm 2 phần.

Đối tượng hatch không phải là đơn giản, cũng như yêu cầu của bạn có thể là rất khó cho việc xác định biên hatch. Nếu là đối tượng hatch trong 1 miền kín thì bạn dùng tạm cái này, mình viết theo ý tưởng đơn giản nhất, không lường các trường hợp "miếng hatch" của bạn phức tạp, biên hở, hatch chồng... Khó hơn thì bạn cứ chờ các bác khác góp ý tưởng nhé.
Với lisp này thì bạn quét chọn vùng hatch,cho 2 điểm thuộc biên để tạo đường cắt.Chúc bạn thành công
(defun c:brh(/ ss hObj 1st 2nd mpt oOs lpt rpt)
(setq oOs (getvar "osmode"))
(setvar "osmode" 32)
(setq ss (ssget ":S" '((0 . "HATCH")))
hObj (ssname ss 0)
1st (getpoint "\n Diem thu nhat : ")
2nd (getpoint 1st "\n Diem thu 2: ")
mpt (mapcar '+ 1st 2nd)
mpt (mapcar '* mpt '(0.5 0.5 0.5))
)
(setvar "osmode" 0)
(setq lpt (mapcar '- mpt '(1 0 0))
rpt (mapcar '+ mpt '(1 0 0))
)
(command "-hatch" lpt "" "_MATCHPROP" hObj (entlast) "")
(command "-hatch" rpt "" "_MATCHPROP" hObj (entlast) "")
(entdel hObj)
(setvar "osmode" oOs)
)

  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#3130 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 18 February 2011 - 02:24 PM

Các bác giúp em 2 lisp nhỏ này với :
1.Khi trích xuất 1 vùng ghi chú, ta tạo 1Hình chữ nhật khoanh vùng hình đám mây (như đoạn gom lời thoại ý), có lisp nào vẽ nhanh đường này một cách đều đặn hoặc chọn hình chữ nhật có sẵn thì nó tạo ra luôn không ạ ?
.....
Thanks các bác rất nhiều ạ

Nếu Tue_NV không nhầm, thì lệnh revcloud sẽ giải quyết vấn đề trên của bạn.
Bạn có thể tạo trước 1 Hình chữ nhật rồi Thực thi lệnh revcloud.

Nếu mình hiểu sai, thì phiền bạn upload file .dwg thể hiện kết quả bạn muốn lên đây nhé
  • 1

#3131 thichhoabinh

thichhoabinh

    biết vẽ circle

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

Đã gửi 18 February 2011 - 02:28 PM

Vâng, chính xác rồi đó ạ.Nhưng với yêu cầu revcloud hàng loạt và vẽ 1 đối tượng mới thì sao ạ ?Và block nặc danh ?
  • 0

#3132 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 18 February 2011 - 03:59 PM

Vâng, chính xác rồi đó ạ.Nhưng với yêu cầu revcloud hàng loạt và vẽ 1 đối tượng mới thì sao ạ ?Và block nặc danh ?

Bạn sử dụng cái này thử nhé :

(defun c:mrev(/ ss e)
(if (setq ss (ssget '((0 . "*LINE"))) i -1)
(while (setq e (ssname ss (setq i (1+ i))))
(command "revcloud" "O" e "n") )
)
)
Bạn định trước Arc Length trong lệnh revcloud

Command: _revcloud
Minimum arc length: 4.6897 Maximum arc length: 4.6897 Style: Normal
Specify start point or [Arc length/Object/Style] <Object>: A

Specify minimum length of arc <4.6897>: 5

Specify maximum length of arc <5.0000>: 5

Specify start point or [Arc length/Object/Style] <Object>:

Select object: *Cancel*
-------
Block không có tên với điểm chèn do ta chỉ định thì sử dụng lệnh Copybase (Ctrol+Shift+C) và pasteblock (Ctrol+Shift+V)
  • 2

#3133 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 18 February 2011 - 10:39 PM

Với yêu cầu chọn đối tượng thì không khó, còn vẽ đối tượng mới bạn phải nhập đầy đủ tên lệnh :
Khác với bác Tuệ mình đặt bán kính bên trong thao tác, nếu dài bạn có thể bỏ đi để gọn hơn

(defun C:CLD ()
(vl-load-com)
(command "_undo" "Be")
(initget "C V")
(setq ans (getkword "\nChon / Ve moi [Chon / Ve moi] :"))
(if (or (= ans "C") (= ans nil))
(progn
(setq ss (ssget (list (cons 0 "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE")))
aleng (getdist "\nBan kinh : ")
lst (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
)
(foreach x lst
(command "_.revcloud" "_A" aleng "" "_O" x "")
)
(princ)
);end progn 1
(progn
(command (getstring "\n Nhap lenh ve : "))
(while (< 0 (getvar "CMDACTIVE"))(command pause))
(setq e_get (entget (entlast))
e_type (cdr (assoc '0 e_get)))
(if (wcmatch e_type "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE")
(progn ;progn sub2-1
(setq aleng (getdist "\nBan kinh : "))
(command "_.revcloud" "_A" aleng "" "_O" (entlast) "")
);end progn sub2-1
(alert "\n Doi tuong cuoi cung khong the chuyen thanh dang cloud ")
)
);end progn 2
);end if
(command "undo" "en")
)

@Bác Tuệ : Block làm theo cách đó không phải là block nặc danh ạ, và nó vẫn hiện trong bảng chèn block

@Lispers : Giúp giùm em, trong code viết bên trên e vẫn lấn cấn phần vẽ mới.Khi ta gửi đi dòng (command "...") thì phần ".." chỉ nhận lệnh gốc của CAD.Nhưng ví dụ nhiều người đặt Line thành L trong acad.pgp thì không thể nhập L trong đối số cho lệnh command được ..E sử dụng method sendkey cũng không được như ý, vì không hãm được (sau khi sendkey thì phải thực hiện lệnh tương ứng nữa).Có bác nào có giải pháp nào giúp e k ạ?
Và E nhớ có bác nói đến lệnh biến lệnh lisp thành lệnh của cad, có thể dùng trong (command...) mà tìm không thấy
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#3134 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 18 February 2011 - 11:07 PM

@Lispers : Giúp giùm em, trong code viết bên trên e vẫn lấn cấn phần vẽ mới.Khi ta gửi đi dòng (command "...") thì phần ".." chỉ nhận lệnh gốc của CAD.Nhưng ví dụ nhiều người đặt Line thành L trong acad.pgp thì không thể nhập L trong đối số cho lệnh command được ..E sử dụng method sendkey cũng không được như ý, vì không hãm được (sau khi sendkey thì phải thực hiện lệnh tương ứng nữa).Có bác nào có giải pháp nào giúp e k ạ?
Và E nhớ có bác nói đến lệnh biến lệnh lisp thành lệnh của cad, có thể dùng trong (command...) mà tìm không thấy

Bạn tìm hiểu và nghiên cứu hàm vlax-add-cmd và hàm vlax-remove-cmd nhé :rolleyes:
  • 1

#3135 thichhoabinh

thichhoabinh

    biết vẽ circle

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

Đã gửi 18 February 2011 - 11:42 PM

Block không có tên với điểm chèn do ta chỉ định thì sử dụng lệnh Copybase (Ctrol+Shift+C) và pasteblock (Ctrol+Shift+V)

Cả 2 lisp trên đều dùng ổn các bác ạ. Còn cái block ý em là block có dấu * ở trước ý ạ
  • 0

#3136 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 19 February 2011 - 12:23 AM

Bạn tìm hiểu và nghiên cứu hàm vlax-add-cmd và hàm vlax-remove-cmd nhé :rolleyes:

Tks bác.E thử nghiên cứu thấy thực chất hàm này cho phép nhập tên defun trục tiếp trong dòng commandline của CAd nhưng cũng không cho phép sử dụng trong (command...) của lisp hay (vl-cmdf ...) cuar Vlisp .Lạ thật ^^
E thử cả 2 hướng sendkey và reactor n vẫn thất bại, thôi đành tạm hài lòng với lisp trên ^^
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#3137 applekangter

applekangter

    biết zoom

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

Đã gửi 19 February 2011 - 12:37 AM

Mình mới tham gia diễn đàn! Mong dc mọi người giúp đỡ!

Xin nhờ anh Hoành viết hộ 1 đoạn lisp!


Mình có 1 đương 3d poLYLINE , bây giờ mình muốn lisp cấy điểm tự động trên đường 3dpoLYLINE đó!( khi cấy điểm sẽ lisp sẽ hỏi khoảng cách cấy điểm là bao nhiêu : vd 1m, 2m, ...nói chung là cấy với khoảng cách bất kỳ, và các điểm cấy mới được đưa vào layer mới)

Mình rất mong được giúp đỡ, thanks anh nhiều ....!
  • 0

#3138 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 19 February 2011 - 01:09 PM

Cả 2 lisp trên đều dùng ổn các bác ạ. Còn cái block ý em là block có dấu * ở trước ý ạ

Bạn thử cái này xem sao :
;free lisp from cadviet.com posted @ ketxu
(defun c:AnB (/ sset pt ent)
(setq sset (ssget)
pt (getpoint "\nDiem chen block : "))
(entmake
(list '(0 . "BLOCK")
'(2 . "*anon")
'(70 . 1)
(cons '10 pt)
)
)
( foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex sset)))
(entmake (entget ent))
(if (assoc 66 (entget ent))
(progn
(setq subent (entnext ent))
(while (/= (cdr (assoc 0 (entget subent))) "SEQEND")
(entmake (entget subent))
(setq subent (entnext subent))
)
(entmake (entget subent))
)
)
(entdel ent)
)
(entmake
(list '(0 . "INSERT")
(cons '2 (entmake '( (0 . "endblk"))))
(cons '10 pt)
)
)
(princ)
)

Mình mới tham gia diễn đàn! Mong dc mọi người giúp đỡ!

Xin nhờ anh Hoành viết hộ 1 đoạn lisp!

Mình rất mong được giúp đỡ, thanks anh nhiều ....!

Danh xưng bất nhất ^^ HỀ, mình thấy bài này là bài thứ 2 bạn post về yêu cầu này rồi, chắc có lẽ khó quá mà cũng hổng ai dám vượt qua rào cản trong bài post của bạn ^^ Mình nghĩ bạn nên đưa file CAD thể hiện ý tưởng lên diễn đàn xem sao. Chúc bạn thành công :)
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#3139 tranphong_vna

tranphong_vna

    biết pan

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

Đã gửi 21 February 2011 - 03:44 PM

Nhờ anh em cao thủ viết dùm em cái lisp "sắp xếp trắc ngang". Mình làm bên GT mà cứ làm thủ công hơi vất vả, hôm có lisp nhưng mà áp dụng trên bản vẽ mình thì lại ko đc. Mong đc sự giúp đỡ của mọi người. Thanks
  • 0

#3140 quocanh1981987

quocanh1981987

    Chưa sử dụng CAD

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

Đã gửi 22 February 2011 - 02:31 PM

Đối tượng hatch không phải là đơn giản, cũng như yêu cầu của bạn có thể là rất khó cho việc xác định biên hatch. Nếu là đối tượng hatch trong 1 miền kín thì bạn dùng tạm cái này, mình viết theo ý tưởng đơn giản nhất, không lường các trường hợp "miếng hatch" của bạn phức tạp, biên hở, hatch chồng... Khó hơn thì bạn cứ chờ các bác khác góp ý tưởng nhé.
Với lisp này thì bạn quét chọn vùng hatch,cho 2 điểm thuộc biên để tạo đường cắt.Chúc bạn thành công

(defun c:brh(/ ss hObj 1st 2nd mpt oOs lpt rpt)
(setq oOs (getvar "osmode"))
(setvar "osmode" 32)
(setq ss (ssget ":S" '((0 . "HATCH")))
hObj (ssname ss 0)
1st (getpoint "\n Diem thu nhat : ")
2nd (getpoint 1st "\n Diem thu 2: ")
mpt (mapcar '+ 1st 2nd)
mpt (mapcar '* mpt '(0.5 0.5 0.5))
)
(setvar "osmode" 0)
(setq lpt (mapcar '- mpt '(1 0 0))
rpt (mapcar '+ mpt '(1 0 0))
)
(command "-hatch" lpt "" "_MATCHPROP" hObj (entlast) "")
(command "-hatch" rpt "" "_MATCHPROP" hObj (entlast) "")
(entdel hObj)
(setvar "osmode" oOs)
)


anh nói rõ dùm em chút. với lại sao down load ko được anh ơi. coi lại dùm em với
  • 0