Đến nội dung


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

[Hỏi] Cùng nhau học LISP


  • Please log in to reply
171 replies to this topic

#81 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 29 September 2010 - 03:54 PM

Sao lệnh select của mình trả thấy tham số già nhể. Bạn dùng cad version bao nhiêu?

E dùng 2007,select xong "?" thì nó liệt kê đám option đấy ra ạ
  • 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


#82 phamngoctukts

phamngoctukts

    biết lệnh adcenter

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

Đã gửi 29 September 2010 - 04:07 PM

Thú thực với bác phamngoctukts là hnay cái này là cái đầu tiên e bắt đầu vào vòng lặp(vì e đã học lt đâu ^^),và ssget thì vẫn chưa biết dùng thành thạo :( Bác hướng dẫn cho e trong trường hợp này được k ạ?
E cứ tưởng thế này là được,nào ngờ chưa phải..Ssget trả về tập entity chọn đúng không ạ :).Vậy nó dạng ntn ạ ?
E sửa thế này rồi...sai be bét :( Dòng 1,2 có vấn đề e chưa biết.Tham khảo 1 số code e thấy chọn cả lwpolyline có nghĩa là j ạ,cóđiều gì khác biệt ạ

(defun C:ffs ( / i ilist elist ppl cen rad gocquay)
(BatDau)
(setq elist (ssget '((0 . "*POLYLINE"))));;;;;;;;;;;;;;;;;1
(while (< ilist (sslength elist));;;;;;;;;;;;;;;;;;;;;;;;;;;;;2
(setq i 0)
(if (zerop (getvar "CMDACTIVE")) (command "_select" ));Lay trang thai cmd de select khi thuc hien lenh khac
(command "_wp")

;;;DUONG TRON
(if (= (cdr(assoc 0 elist)) "CIRCLE")
(progn
(setq cen (cdr (assoc 10 elist))
rad (cdr (assoc 40 elist))
)
(repeat 360
(setq gocquay (polar cen (* i (/ pi 180)) rad) ;thuc hien 360 lan,moi lan 1 do
i (1+ i))
(command (trans gocquay 0 1))
)); else

;;;;;;;;pl
(repeat (length elist)
(setq ppl (nth i elist)
i (1+ i))
(if (= (car ppl) 10) (command (trans (cdr ppl) 0 1)));Tranh UCS quay
)
)
(command "")
(setq ilist (1+ ilist))
);ket thuc vong while
;(command "'fs" ent)
(KetThuc)
)
;;;;;;;;;;;;;;;;;
(defun BatDau()
(setq OldOs (getvar "osmode")
Oldcmd (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setvar "osmode" 0)
)
(defun KetThuc()
(setvar "osmode" OldOs)
(setvar "cmdecho" Oldcmd)
(princ)
)

Bạn phải dùng thế này
(setq elist (ssget '((0 . "*POLYLINE"))))
(setq i 0); gán i=0
(while (< i (sslength elist)); điều kiện i< số đối tượng trong tập chọn elist để vòng lặp kết thúc
(setq name (ssname elist i)); name chính là ename của đồi tượng thứ i trong tập chọn
muốn muốn biết tên đối tượng thứ i trong tập chọn selectionset thì dùng (assoc 0 (entget name)). tương tự lấy các thông số khác.
tiếp đến các hàm thao tác của bạn.
kết thúc dùng (setq i (1+ i)); sau mỗi lần lặp thì i tăng thêm 1 đến khi i= số đối tượng trong tập chọn thì vòng lặp kết thúc.
  • 1
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!

#83 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 29 September 2010 - 05:54 PM

E đã sửa nhưng bị thất bại bác ạ :( E bị lơ mơ đối tượng xử lý.E k biết xử lý thằng này

(setq name (ssname elist i)); name chính là ename của đồi tượng thứ i trong tập chọn

hay thằng elist của e :(,nên càng sửa càng lẫ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


#84 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 29 September 2010 - 07:22 PM

Thú thực với bác phamngoctukts là hnay cái này là cái đầu tiên e bắt đầu vào vòng lặp(vì e đã học lt đâu ^^),và ssget thì vẫn chưa biết dùng thành thạo :( Bác hướng dẫn cho e trong trường hợp này được k ạ?
E cứ tưởng thế này là được,nào ngờ chưa phải..Ssget trả về tập entity chọn đúng không ạ :).Vậy nó dạng ntn ạ ?
E sửa thế này rồi...sai be bét :( Dòng 1,2 có vấn đề e chưa biết.Tham khảo 1 số code e thấy chọn cả lwpolyline có nghĩa là j ạ,cóđiều gì khác biệt ạ

(defun C:ffs ( / i ilist elist ppl cen rad gocquay)
(BatDau)
(setq elist (ssget '((0 . "*POLYLINE"))));;;;;;;;;;;;;;;;;1
(while (< ilist (sslength elist));;;;;;;;;;;;;;;;;;;;;;;;;;;;;2
(setq i 0)
(if (zerop (getvar "CMDACTIVE")) (command "_select" ));Lay trang thai cmd de select khi thuc hien lenh khac
(command "_wp")

;;;DUONG TRON
(if (= (cdr(assoc 0 elist)) "CIRCLE")
(progn
(setq cen (cdr (assoc 10 elist))
rad (cdr (assoc 40 elist))
)
(repeat 360
(setq gocquay (polar cen (* i (/ pi 180)) rad) ;thuc hien 360 lan,moi lan 1 do
i (1+ i))
(command (trans gocquay 0 1))
)); else

;;;;;;;;pl
(repeat (length elist)
(setq ppl (nth i elist)
i (1+ i))
(if (= (car ppl) 10) (command (trans (cdr ppl) 0 1)));Tranh UCS quay
)
)
(command "")
(setq ilist (1+ ilist))
);ket thuc vong while
;(command "'fs" ent)
(KetThuc)
)
;;;;;;;;;;;;;;;;;
(defun BatDau()
(setq OldOs (getvar "osmode")
Oldcmd (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setvar "osmode" 0)
)
(defun KetThuc()
(setvar "osmode" OldOs)
(setvar "cmdecho" Oldcmd)
(princ)
)

Chào bạn ketxu,
Bạn kiểm tra lại đoạn code này:
(repeat (length elist) ;;;;;;;;;; lặp với số bước lặp bằng số phần tử của tập chọn elist
(setq ppl (nth i elist) ;;;;;;;;; lấy phần tử thứ i của danh sách elist
i (1+ i))
(if (= (car ppl) 10) (command (trans (cdr ppl) 0 1)));Tranh UCS quay
)
)

Thực tế elist của bạn không phải là một list mà là một tên bộ chọn
Bạn hãy chú ý cái hàm ban đầu của bạn :
(setq elist (ssget '((0 . "*POLYLINE"))))
Hàm này trả về một bộ chọn có tên là quỷ quái chi chi đó gồm tất cả các đối tượng có mã dxf 0 là "*polyline".
Để biết tên của bộ chọn này, bạn phải xóa cái tên elist trong các biến cục bộ đi, rồi chạy lisp. Sau khi chạy xong bạn nhập !elist trên dòng command và enter sẽ thấy nó hiện ra. Còn nếu bạn vẫn để nó trong các biến cục bộ thì khi làm vậy bạn sẽ thấy nó trả về nil.

Do vậy cái hàm (length elist) của bạn là sai.

(setq ppl (nth i elist) Ở hàm này bạn định nghĩa ppl là một phần tử của elist nhưng có chắc phần tử này là một list hay không???? (thực tế thì không vì bạn chả có thằng ppl nào cả)

Và như vậy (car ppl) sẽ trả về phần tử đầu tiên của danh sách ppl mà cái này thì chưa chắc đúng ???

Theo mình hiểu thì bạn nhầm cái elist là một danh sách các mã dxf của các đối tượng được chọn trong hàm (setq elist (ssget '((0 . "*POLYLINE")))) .
Do vậy khi bạn dùng (setq ppl (nth i elist) ... ) là để lấy ra một danh sách các mã dxf của một đối tượng trong tập chọn đó. Và sau đó bạn dùng (car ppl) để lấy ra mã số của các mã dxf.
Điều này là không đúng như mình đã phân tích ở trên.

Tương tự như vậy bạn cũng bị sai ở các hàm (cdr(assoc k elist)) bạn ạ.

Bạn hãy đọc kỹ bài của bác Phamngoctukts hướng dẫn và làm lại xem nhé.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#85 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 30 September 2010 - 10:06 AM

Vâng..Tối qua chỗ e mất mạng nên k biết các bác rl hướng dẫn.E sẽ nghiền ngẫm chỗ sai này ^^ ,mấy hnay bị ép hoàn thành công việc nên hơi bê trễ
Làm Kết Cấu khổ quá,suốt ngày bị giục tiến độ :( An toàn là trên hết,mà cứ giục,làm chẳng tính được,toàn bốc thuốc ^^
  • 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


#86 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 30 September 2010 - 02:04 PM

Vâng..Tối qua chỗ e mất mạng nên k biết các bác rl hướng dẫn.E sẽ nghiền ngẫm chỗ sai này ^^ ,mấy hnay bị ép hoàn thành công việc nên hơi bê trễ
Làm Kết Cấu khổ quá,suốt ngày bị giục tiến độ :( An toàn là trên hết,mà cứ giục,làm chẳng tính được,toàn bốc thuốc ^^

Hề hề hề,
Bình tĩnh, bình tĩnh,
Bốc gì thì bốc chớ đừng bốc ...... phét mà ra thuốc bậy thì thành lang băm đó. Hề hề hề,....
Chả cứ gì Kết cấu mới khổ, Kết bè Kết đảng rồi cũng đua nhau "ủ tờ" cả đám đó thôi. Nhất là cái anh cu Kết duyên thì khổ cả đời đấy bác ạ.... Hề hề hề......
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#87 nguyentuyen6

nguyentuyen6

    biết lệnh chamfer

  • Advance Member
  • PipPipPipPip
  • 213 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 01 October 2010 - 12:12 PM

Mình dựa theo cái líp của bác tbinh viết thử cái líp sửa chiều cao của Text trong Dim, mà không đc, hjx.
Các bác xem giúp em vơi nhé:

(defun c:cdim (/ p1 p2 caodim ssd en tl el e)
(vl-load-com)
(command "undo" "be")
(setq tl (getreal "\nChon ty le <1/50>: "))
(if (not tl) (setq tl 50))
(setq p1 (getpoint "\nChon diem dau: ")
p2 (getpoint "\nChon diem cuoi: ")
caodim (/ (distance p1 p2) tl)
i 0)
(princ (strcat "\nChieu cao dim " (rtos caodim) ""));in caodim
(princ "\nChon DIM can fix: ")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq ssd (ssget '(0 . "DIMENSION"))); loc dim
(while (< i (sslength ssd))
(setq en (ssname ssd i));;lay ten
;el (entget en);;lay list thong tin
;e (cdr (assoc 3 el))
(vlax-ename->vla-object en);;chuyen sang vla obj
(vlax-put-property 'textheight caodim);; nhap caodim vao texthight
(setq i (1+ i))
);endwhile
(command "regen")
(command "undo" "e")
(princ)
);end defun
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

  • 0

Lisp In bản vẽ hàng loạt:
http://www.cadviet.c...ndpost&p=139860


#88 master_worse

master_worse

    biết lệnh offset

  • Advance Member
  • PipPipPip
  • 170 Bài viết
Điểm đánh giá: 87 (tàm tạm)

Đã gửi 01 October 2010 - 01:08 PM

Mình dựa theo cái líp của bác tbinh viết thử cái líp sửa chiều cao của Text trong Dim, mà không đc, hjx.
Các bác xem giúp em vơi nhé:


Thay đoạn này: (setq ssd (ssget '(0 . "DIMENSION"))); loc dim
bằng đoạn này: (setq ssd (ssget '((0 . "DIMENSION"))))
Thay đoạn này:
(while (< i (sslength ssd))
(setq en (ssname ssd i));;lay ten
;el (entget en);;lay list thong tin
;e (cdr (assoc 3 el))
(vlax-ename->vla-object en);;chuyen sang vla obj
(vlax-put-property 'textheight caodim);; nhap caodim vao texthight
(setq i (1+ i))
);endwhile
bằng đoạn này:
(while (< i (sslength ssd))
(setq en (ssname ssd i))
(vlax-put-property (vlax-ename->vla-object en) 'textheight caodim)
(setq i (1+ i))
) ;_ end while
  • 1

Ngu dốt không đáng thẹn bằng thiếu ý chí học hỏi


Tri thức làm người ta khiêm tốn, ngu si làm người ta kiêu ngạo (Ngạn ngữ Anh)


#89 phamngoctukts

phamngoctukts

    biết lệnh adcenter

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

Đã gửi 01 October 2010 - 01:24 PM

Mình dựa theo cái líp của bác tbinh viết thử cái líp sửa chiều cao của Text trong Dim, mà không đc, hjx.
Các bác xem giúp em vơi nhé:

(defun c:cdim (/ p1 p2 caodim ssd en tl el e)
(vl-load-com)
(command "undo" "be")
(setq tl (getreal "\nChon ty le <1/50>: "))
(if (not tl) (setq tl 50))
(setq p1 (getpoint "\nChon diem dau: ")
p2 (getpoint "\nChon diem cuoi: ")
caodim (/ (distance p1 p2) tl)
i 0)
(princ (strcat "\nChieu cao dim " (rtos caodim) ""));in caodim
(princ "\nChon DIM can fix: ")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq ssd (ssget '(0 . "DIMENSION"))); loc dim
(while (< i (sslength ssd))
(setq en (ssname ssd i));;lay ten
;el (entget en);;lay list thong tin
;e (cdr (assoc 3 el))
(vlax-ename->vla-object en);;chuyen sang vla obj
(vlax-put-property 'textheight caodim);; nhap caodim vao texthight
(setq i (1+ i))
);endwhile
(command "regen")
(command "undo" "e")
(princ)
);end defun
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Code của bạn chỗ thì thừa chỗ thì thiếu. Mình đã sửa cho bạn rồi đấy. Bạn tự nghiên cứu xem mình sai chỗ nào nhé. Mình cũng toàn dùng cách này thì lần sau mới nhơ. Chúc bạn thành công.

;; free lisp from cadviet.com
(defun c:cdim (/ p1 p2 caodim ssd en tl el e)
(vl-load-com)
(command "undo" "be")
(setq caodim (getdist "\nNhap 2 diem hay cao chu: ")
i 0)
(princ (strcat "\nChieu cao dim " (rtos caodim) ""));in caodim
(princ "\nChon DIM can fix: ")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq ssd (ssget '((0 . "DIMENSION")))); loc dim
(while (< i (sslength ssd))
(setq en (ssname ssd i)
el (vlax-ename->vla-object en)
)
(vlax-put-property el 'textheight caodim)
(setq i (1+ i))
);endwhile
(command "regen")
(command "undo" "e")
(princ)
);end defun
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

  • 1
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!

#90 nguyentuyen6

nguyentuyen6

    biết lệnh chamfer

  • Advance Member
  • PipPipPipPip
  • 213 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 01 October 2010 - 10:05 PM

Thank 2 bác đã giúp e sửa cái líp trên. E muốn hỏi 1 câu nữa mong các bác giúp.
hàm (vlax-put-property obj property arg) thì tên các property của nó là gì?
em thử mấy cái tên lấy trong bảng properties bằng cách (ctrl+1) hoặc lệnh "mo" thì không được. tìm trong help cũng không thấy nó ghi ra.... Thnk
  • 0

Lisp In bản vẽ hàng loạt:
http://www.cadviet.c...ndpost&p=139860


#91 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 01 October 2010 - 11:08 PM

Thank 2 bác đã giúp e sửa cái líp trên. E muốn hỏi 1 câu nữa mong các bác giúp.
hàm (vlax-put-property obj property arg) thì tên các property của nó là gì?
em thử mấy cái tên lấy trong bảng properties bằng cách (ctrl+1) hoặc lệnh "mo" thì không được. tìm trong help cũng không thấy nó ghi ra.... Thnk

Diễn đàn đã đề cập rồi, bạn search chắc sẽ tìm thấy. Ssg nhắc lại lần nữa vậy.
Bạn dùng "chiêu" này:

(vlax-dump-object (vlax-ename->vla-object (car (entsel "\nChon doi tuong:"))))

Bấm F2 sẽ thấy properties và arguments của đối tượng bạn vừa select.
  • 3

#92 nguyentuyen6

nguyentuyen6

    biết lệnh chamfer

  • Advance Member
  • PipPipPipPip
  • 213 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 02 October 2010 - 10:36 PM

Vẫn cái Líp trên của em. em thêm thắt vào 1 tý, nhưng báo lỗi. Ai sửa hộ em với. Học mất gốc khổ quá.Hix
Hình như hỏng chỗ em đánh dấu ý

(defun c:hcn (/ Rec pt1 pt2 pt3 pt4 toadodinh caodim tile i el1 el ssd en)
(vl-load-com)
(command "undo" "be")
(setq Rec (acet-ent-geomextents (car (entsel "Chon block khung ten:")))
pt1 (nth 0 Rec);lay dinh
pt2 (nth 1 Rec);lay dinh
i 0);setq
(command "RECTANG" pt1 pt2)
(setq el1 (entlast));el1
;;;;;;;;;;(acet-ent-geomextents:diem thap nhat trai va cao nhat phai, ve hcn;;;;;;;
;---------------------
;;;;;;;lay tile, mac dinh la :1/150
(setq tile (getreal "\nChon ty le <1/150> :"))
(if (= tile nil) (setq tile 150));; mac dinh la 1/150
;---------------------
;;;;;;;;;lay dinh HCN = acet-geom-vertex-list
(setq toadodinh (acet-geom-vertex-list (car (entsel (el1))));;;;Bi Hong Cho Nay????
pt3 (nth 0 toadodinh);lay dinh
pt4 (nth 3 toadodinh);lay dinh
caodim (/ (distance pt3 pt4) tile));setq
;;;;;;IN pt3 pt4;;;;;;;;;;
(princ (strcat "\npt3: " (rtos pt3) " \npt4: " (rtos pt4)".\n Chon Dim: " ))
;---------------------
;;;;;;;;;;;main;;;;;;;;;;;;;;
(setq ssd (ssget '((0 . "DIMENSION")))); loc dim
(while (< i (sslength ssd))
(setq en (ssname ssd i);;lay so thu tu
el (vlax-ename->vla-object en))
(vlax-put-property el 'textheight caodim)
(setq i (1+ i))
);endwhile
(command "ERASE" el1) ;xoa hcn
(command "undo" "e")
(princ "\n...Done... ")
(princ)
)

  • 0

Lisp In bản vẽ hàng loạt:
http://www.cadviet.c...ndpost&p=139860


#93 phamngoctukts

phamngoctukts

    biết lệnh adcenter

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

Đã gửi 02 October 2010 - 11:02 PM

Vẫn cái Líp trên của em. em thêm thắt vào 1 tý, nhưng báo lỗi. Ai sửa hộ em với. Học mất gốc khổ quá.Hix
Hình như hỏng chỗ em đánh dấu ý

(defun c:hcn (/ Rec pt1 pt2 pt3 pt4 toadodinh caodim tile i el1 el ssd en)
(vl-load-com)
(command "undo" "be")
(setq Rec (acet-ent-geomextents (car (entsel "Chon block khung ten:")))
pt1 (nth 0 Rec);lay dinh
pt2 (nth 1 Rec);lay dinh
i 0);setq
(command "RECTANG" pt1 pt2)
(setq el1 (entlast));el1
;;;;;;;;;;(acet-ent-geomextents:diem thap nhat trai va cao nhat phai, ve hcn;;;;;;;
;---------------------
;;;;;;;lay tile, mac dinh la :1/150
(setq tile (getreal "\nChon ty le <1/150> :"))
(if (= tile nil) (setq tile 150));; mac dinh la 1/150
;---------------------
;;;;;;;;;lay dinh HCN = acet-geom-vertex-list
(setq toadodinh (acet-geom-vertex-list (car (entsel (el1))));;;;Bi Hong Cho Nay????
pt3 (nth 0 toadodinh);lay dinh
pt4 (nth 3 toadodinh);lay dinh
caodim (/ (distance pt3 pt4) tile));setq
;;;;;;IN pt3 pt4;;;;;;;;;;
(princ (strcat "\npt3: " (rtos pt3) " \npt4: " (rtos pt4)".\n Chon Dim: " ))
;---------------------
;;;;;;;;;;;main;;;;;;;;;;;;;;
(setq ssd (ssget '((0 . "DIMENSION")))); loc dim
(while (< i (sslength ssd))
(setq en (ssname ssd i);;lay so thu tu
el (vlax-ename->vla-object en))
(vlax-put-property el 'textheight caodim)
(setq i (1+ i))
);endwhile
(command "ERASE" el1) ;xoa hcn
(command "undo" "e")
(princ "\n...Done... ")
(princ)
)

Bạn sai 2 dòng này
(setq toadodinh (acet-geom-vertex-list (car (entsel (el1))));;;;Bi Hong Cho Nay????
sửa thành (setq toadodinh (acet-geom-vertex-list el1) Thằng el1 chính là ename của hcn rồi
và dòng này (princ (strcat "\npt3: " (rtos pt3) " \npt4: " (rtos pt4)".\n Chon Dim: " ))
pt3 pt4 là toạ độ điểm không thể chuyển sang dạng số được.
  • 1
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!

#94 nguyentuyen6

nguyentuyen6

    biết lệnh chamfer

  • Advance Member
  • PipPipPipPip
  • 213 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 02 October 2010 - 11:24 PM

Cảm ơn bác nhìu. E đã sửa đc rùi. hihi
  • 0

Lisp In bản vẽ hàng loạt:
http://www.cadviet.c...ndpost&p=139860


#95 ndtnv

ndtnv

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 437 Bài viết
Điểm đánh giá: 384 (khá)

Đã gửi 04 October 2010 - 08:44 AM

Thank 2 bác đã giúp e sửa cái líp trên. E muốn hỏi 1 câu nữa mong các bác giúp.
hàm (vlax-put-property obj property arg) thì tên các property của nó là gì?
em thử mấy cái tên lấy trong bảng properties bằng cách (ctrl+1) hoặc lệnh "mo" thì không được. tìm trong help cũng không thấy nó ghi ra.... Thnk

Đó là bạn chưa tìm đúng chỗ thôi.
Trong Help, vào phần ActiveX and VBA Refrence sẽ có đủ
Bấm vào Object model, ta sẽ thấy 1 sơ đồ (Chart) các đối tượng của CAD.
Bấm vào đối tượng, ta sẽ thấy ngay 1 bảng Method, Properties của đối tượng đó.
Bấm vào Method, Properties, ta sẽ biết các Argument (và return val) của từng hàm

Để thực hiện method, dùng hàm
(vlax-invoke-method obj method arg [arg...])

Để lấy property dùng hàm
(vlax-get-property object property)

Nếu property không phải read only, ta có thể dùng hàm gán
(vlax-put-property obj property arg)
Bạn xem kỹ các VD trong Help là sử dụng dễ dàng

Vì các Argument thường dùng kiểu Variant nên
dùng các hàm vlax-make-variant, vlax-variant-value, vlax-variant-change-type để chuyển kiểu
  • 2

#96 huynhphuongdesigner

huynhphuongdesigner

    biết vẽ circle

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

Đã gửi 08 November 2011 - 02:37 PM


;;;;bat dau hoc
(defun c:anhp()
(setq p1 (getpoint "\ndiem chuan"))
;;; doi mau
(command "color" 1)
;;;;nhap khoang cach
(setq x (getreal "\nchieu cao:"))
(setq l (getreal "\nchieu dai theo truc x:"))
(setq h (getreal "\nchieu cao cung:"))
(setq o (getreal "\nkhoang cach:"))
(setq p2 (polar p1 1.5707 x))
(setq d1 (command "line" p1 p2 ""))
(setq p3 (polar p2 0.0 l))
(command "line" p2 p3 "")
(setq p4 (polar p3 -1.5707 x))
(setq d2 (command "line" p3 p4 ""))
;;;;ket thuc mot cai
(setq p5 (polar p2 0.0 (/ l 2)))
(setq p6 (polar p5 1.5707 h))
(command "line" p5 p6 "")
;;;; ve arc
(setq arc1 (command "arc" p3 p6 p2 ""))
;;;; offset
(command "offset" o
(setq arc2 (entsel "chon doi tuong:"))
'(-1.5707 -60) "e")
(command "zoom" "all")
(command "fillet" "r" 0 "")
(setq a1 (entsel "chon doi tuong 1:"))
(setq a2 (entsel "chon doi tuong 2:"))
(setq a3 (entsel "chon doi tuong 3:"))
(setq a4 (entsel "chon doi tuong 4:"))
(command "fillet" a1 a2 "")
(command "fillet" a3 a4 "")
(setq a5 (entsel "xoa doituong:"))
(setq a6 (entsel "xoa doi tuong 6:"))
(command "erase" a5 a6 "")
(setq a5 (entsel "chon doi tuong 5:"))
(setq a6 (entsel "chon doi tuong 6:"))
(setq a7 (entsel "chon doi tuong 7:"))
(setq a8 (entsel "chon doi tuong 8:"))
(command "region" a5 a6 a7 a8 "")
(setq a9 (entsel "chon doi tuong 9:"))
(setq h1 (getreal "\nchieu cao doi tuong:"))
(command "extrude" a9 "" h1)
(princ)
)
Mình muốn vẽ một biên dang cung : khi cho chiều dài và độ cao của cung. Sau do minh se extrude len 3d thanh nan ghế. Nhung do lisp cua mình còn thủ công quá. Nên mình mới nhờ các huynh xem co cách lam nao nhanh hơn không. Chờ phản hồi từ các huynh.....
Hình đã gửiHình đã gửi
  • 0

#97 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 08 November 2011 - 03:24 PM


Mình muốn vẽ một biên dang cung : khi cho chiều dài và độ cao của cung. Sau do minh se extrude len 3d thanh nan ghế. Nhung do lisp cua mình còn thủ công quá. Nên mình mới nhờ các huynh xem co cách lam nao nhanh hơn không. Chờ phản hồi từ các huynh.....
Hình đã gửiHình đã gửi

Hề hề hề,
Bạn mới học mà làm cái lisp khủng ra phết nhể.
Xin góp ý mấy điều thiển nghĩ như sau:
1/- Các line chẳng dùng để làm gì thì bạn mất công vẽ ra chi cho nó thêm Khủng vậy???
2/- Giá trị 1.5707.... bạn nên cứ để là (/ pi 2) sẽ tốt hơn vì nó sẽ chính xác hơn là lấy giá trị gần đúng.
3/- Cái ni (command "offset" o
(setq arc2 (entsel "chon doi tuong:"))
'(-1.5707 -60) "e")
bạn dùng để offset cái cung arc1 về một phía đúng không???
Vậy thì đặt thêm biến arc2 làm chi cho nó thêm hoảng .... vía vậy.
Bạn thử thay thế này xem nó có ra cái bạn cần không nhé:

(command "offset" o arc1 '(-1.5707 -60) "")
Chú ý là dấu "" cũng sẽ tương đương với "e" của bạn rùi.
4/- Tương tự vậy với các đối tượng của lệnh fillet.
Thay vì bạn viết (command "fillet" a1 a2 "") với một lô định nghĩa (setq a1 .....)
Bạn có thể viết ngắn hơn như sau
(command "fillet" (entsel "/n Chon đoi tuong 1") (entsel '/n Chon đoi tuong 2") "")
5/- Với lệnh erase bạn có thể sử dụng đối tượng là bộ chọn nên bạn có thể viết đơn giản là:
(command "erase" (ssget) "") và sau đó tha hồ mà pick trên bản vẽ những chú nào ngứa mắt rồi enter là OK
6/- Với lệnh region, đơn giản hơn là bạn nên dùng pedit để nối các biên thành một polyline kín với câu lệnh:
(command "pedit" arc1 "y" "j" (ssget) "")
7/- Sau lệnh Region (hoặc pedit) bạn chỉ cần (setq a9 (entlast)) là có ngay thằng cu profile để extrude rùi mà khỏi phải pick enetsel nữa.

Hề hề hề,
Lisp nào thì cũng thủ công cả mà thôi, chẳng qua là máy nó thủ nhanh hơn mình tí tẹo ấy mà. Chớ có tự khiêm mà hạn chế cái tài năng của mình bạn nhé. Mong rằng bạn sẽ trở thành chỗ dựa cho mọi người trên diễn đàn.
Hề hề hề.....
Mà bài toán của bạn nên nói đúng hơn là vẽ một cung khi biết chiều dài DÂY TRƯƠNG CUNG và chiều cao CUNG ( chớ không phải chiều dài của cung bạn ạ)
Hề hề hề,...
  • 2
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#98 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 08 November 2011 - 04:32 PM

Mong bạn
huynhphuongdesigner

chú ý nội quy box !
  • 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


#99 huynhphuongdesigner

huynhphuongdesigner

    biết vẽ circle

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

Đã gửi 08 November 2011 - 11:35 PM

Trước hết xin cam on huynh: Bình. Ban that tuyệt vì da jup minh hieu them ve co ban cua lisp. Nhung dieu chinh sua cua ban giup minh ngộ ra nhieu dieu. Thanks ban va mong su chi giao nhieu tu phia ban. Hien tai minh dang viet lisp xuất sản phẩm từ 3d thanh 2d. Đỡ mat cong ton suc fai qua lai giua layout va model. Heee mong su chi giao cua ban.

Đồng thời cam on su nhac nho cua ketxu.
  • 0

#100 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 09 November 2011 - 08:23 AM

Bạn cảm ơn làm gì nê

Trước hết xin cam on huynh: Bình. Ban that tuyệt vì da jup minh hieu them ve co ban cua lisp. Nhung dieu chinh sua cua ban giup minh ngộ ra nhieu dieu. Thanks ban va mong su chi giao nhieu tu phia ban. Hien tai minh dang viet lisp xuất sản phẩm từ 3d thanh 2d. Đỡ mat cong ton suc fai qua lai giua layout va model. Heee mong su chi giao cua ban.

Đồng thời cam on su nhac nho cua ketxu.

- Bạn cảm ơn bác Binh sao không nhấn Like ?
- Bạn cảm ơn mình sao không gõ TV có dấu ?
  • 2

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