Đến nội dung


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

[Đã xong] Lisp rải đối tượng theo đơờng dẩn.


  • Please log in to reply
88 replies to this topic

#1 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 24 May 2011 - 09:15 AM

*Lâu nay dùng cái MEASURE và DIVIDE của cad thấy có vài hạn chế:
-Chỉ rải được point và block.
-Block thỉ phải gỏ tên và được chèn ra với tỉ lệ 1/1.
-Bỏ qua không chèn vào vị trí xuất phát của đường dẩn.
*Dựa trên cái lisp xác định điểm của bác SSG cho mình cải tạo và nhập chung thành 1 lệnh tác dụng tương đương và cải thiện các nhược điểm mình nêu trên: (à nghe bảo cad12 đã kết hợp array theo đường dẩn nhưng mình chưa tiếp xúc nên ko biết có bị dẩm lên đó ko nhưng đây là thử nghiệm vì mình tính cho xác định điểm bắt đầu và hướng rải nửa nhưng chưa nghỉ ra kịch bản vì có quá nhiều thường hợp muốn)
-Tên lệnh: RDT (rải đối tượng)
-Hỏi chọn đối tượng muốn rải: Bạn chọn thoải mái bằng các kiểu (đối tượng gì cũng được) kết thúc chọn bằng enter.
+Nếu bạn chọn hơn 1 đối tượng thì sẽ hỏi bạn chọn điểm chuẩn cho nhóm đối tượng này (dùng để làm điểm đặt trên đường dẩn í).
+Nếu bạn chọn 1 đối tượng thì sẽ xem nếu đối tượng không phải là block thì vẩn hỏi chọn điểm chuẩn, Nếu đối tượng là block thì bỏ qua phần hỏi chọn điểm chuẩn mà lấy điểm chèn của block đó làm điểm chuẩn.
-Hỏi chọn đường dẩn dùng để rải.
-Hỏi “Kieu rai theo: So luong/<Khoang cach>” :
+Rải theo số lượng thì nhập S enter.
+Rải theo khoảng cách thì nhập K enter hoặc enter không (thực chất cứ nhập vào khác S thì nhận là khoảng cách).
-Tùy theo lựa chọn mà hỏi khoảng cách rải hay số lượng rải.
-Hỏi“Co quay doi tuong vuong goc voi duong dan khong: Khong/<Co>") :
+Không quay đối tượng cho vuông gó với đường dẩn thì nhập K enter.
+Có quay thì nhập C en ter hoặc enter không (thực chất cứ nhập vào khác K thì nhận là có).
*Xong rồi. Bác nào có nhu cầu thì dùng không có thì dòm. Mong không ném đá hoặc dè bỉu. :P


(Defun c:rdt (/ ss)
(command "undo" "be")
(chonnhomdoituong)
(choncuver)
(hoikieurai)
(command "undo" "end")
(princ)
)
;;;;;;;;;;;;;;;;;
(Defun chonnhomdoituong ()
(princ "\nChon doi tuong rai:")
(setq ss (ssget))

(cond
((= ss nil) (princ "\nChua chon duoc doi tuong nao:") (chonnhomdoituong))
((/= ss nil)
(setq dsl (sslength ss))
(cond
((= dsl 1)
(setq doituong (ssname SS 0))
(setq doituong (entget doituong))
(setq KIEUDOITUONG (cdr (assoc 0 doituong)))
(cond
((= KIEUDOITUONG "INSERT") (setq dc (cdr (assoc 10 doituong))))
((/= KIEUDOITUONG "INSERT") (setq dc (getpoint "\nChon diem goc: ")))
);ketthuccondxemblock
);kethucdsl1
((/= dsl 1) (setq dc (getpoint "\nChon diem goc: ")))
);ketthuccondnho

);ketthucsetqdsl
);ketthuccondtong
(princ)
)
;;;;;;;;;;;;;;;;;
(Defun choncuver ()

(setq ddd (entsel "\nChon duong dan:"))
(while
(or
(null ddd)
(or (= "TEXT" (cdr (assoc 0 (entget (car ddd))))) (= "MTEXT" (cdr (assoc 0 (entget (car ddd))))) (= "HATCH" (cdr (assoc 0 (entget (car ddd))))) (= "INSERT" (cdr (assoc 0 (entget (car ddd))))) (= "REGION" (cdr (assoc 0 (entget (car ddd))))) (= "DIMENSION" (cdr (assoc 0 (entget (car ddd)))))
)
)
(setq ddd (entsel "\nDoi tuong khong the lam duong dan! Chon lai"))
)

(setq chondd (car ddd))
(setq luubatdiem (getvar "osmode"))
(setvar "osmode" 0)
(setq chieudaicuver (vlax-curve-getDistAtParam chondd (vlax-curve-getEndParam chondd)))
(setq diemdau (vlax-curve-getPointAtDist chondd 0))
(setq diemcuoi (vlax-curve-getPointAtDist chondd chieudaicuver))
(setvar "osmode"luubatdiem)
(princ)
)
;;;;;;;;;;;;;;;;;
(Defun hoikieurai (/ kieurai)
(setq krai (strcase (getstring "\nKieu rai theo: So luong/<Khoang cach>")))
(Cond
((= krai "S") (raisoluong))
((/= krai "S")(raikhoangcach))
)
(princ)
)
;;;;;;;;;;;;;;
(Defun raikhoangcach ()
(setq chieudaidoan (GETDIST "\nKhoang cach doan chia: "))
(setq sol (+ (/ chieudaicuver chieudaidoan) 1))
(setq sl (fix sol))
(setq sl (fix sl))
(thuchienrai)
(princ)
)
;;;;;;;;;;;;;;
(Defun raisoluong ()
(setq slc (getreal "\nChia duong dan thanh may lan:"))
(setq chieudaidoan (/ chieudaicuver slc))
(setq sl (fix (+ 1 slc)))
(thuchienrai)
(princ)
)
;;;;;;;;;;;;;;
(Defun thuchienrai (/ quaykhong)

(setq quaykhong (strcase (getstring "\nCo quay doi tuong vuong goc voi duong dan khong: Khong/<Co>")))
(Cond
((= quaykhong "K") (setq copygiua copykoquay))
((/= quaykhong "K")(setq copygiua copyquay))
)

(setq index -1)

(repeat sl
(setq index (1+ index))
(setq d2 (* chieudaidoan index))
(setq luubatdiem (getvar "osmode"))
(setvar "osmode" 0)
(setq p2 (vlax-curve-getPointAtDist chondd d2))
(setvar "osmode"luubatdiem)
(copygiua)
)
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;
(defun copycuoiquay()
(setq luubatdiem (getvar "osmode"))
(setvar "osmode" 0)
(setq d5 (- chieudaicuver 0.001))
(setq p5 (vlax-curve-getPointAtDist chondd d5))
(setq L 0)
(setq M (sslength ss))
(while (< L M)
(setq DT (ssname ss L))
(command ".copy" DT "" dc p5)
(command ".rotate" "last" "" diemcuoi p5)
(command ".rotate" "last" "" diemcuoi 180)
(setq L (1+ L))
)
(setvar "osmode"luubatdiem)
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;
(defun COPYQUAY(/ p3)
(setq luubatdiem (getvar "osmode"))
(setvar "osmode" 0)
(setq d3 (+ (* chieudaidoan index) 0.001))
(setq p3 (vlax-curve-getPointAtDist chondd d3))
(setvar "osmode"luubatdiem)
(Cond
((= p3 nil) (copycuoiquay))
((/= p3 nil)
(setq L 0)
(setq M (sslength ss))
(setq luubatdiem (getvar "osmode"))
(setvar "osmode" 0)
(while (< L M)
(setq DT (ssname ss L))
(command ".copy" DT "" dc p2)
(command ".rotate" "last" "" p2 p3)
(setq L (1+ L))
)
(setvar "osmode"luubatdiem)
)
)


(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;
(defun COPYKOQUAY()
(setq luubatdiem (getvar "osmode"))
(setvar "osmode" 0)
(command ".copy" ss "" dc p2 "")
(setvar "osmode"luubatdiem)
(princ)
)
;;;;;;;;;;;;;;

Khi mình xem bài này với vai trò khách thì thấy có hộp code đàng hoàng nhưng đăng nhập vào thì không hiển thị hộp code (chỉ với bài này thôi còn các bài của các bác khác thì vẩn hiển thị bình thường)!
  • 17

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


#2 TKTXVD

TKTXVD

    biết vẽ arc

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

Đã gửi 24 May 2011 - 09:41 AM

Ngon, thanks bác trước, để e thử phát xem thế nào.
  • 1

#3 cd2k44

cd2k44

    Edu level: li5

  • Members
  • PipPipPipPipPipPipPip
  • 648 Bài viết
Điểm đánh giá: 121 (tàm tạm)

Đã gửi 24 May 2011 - 09:58 AM

em vừa dùng lisp của anh xong.Sau khi thử em có nhận xét như sau:
1.Lệnh này chậm hơn me.
2. Sau khi rải sao đối tượng mình rải lại lệch sơ với đối tượng gốc ( đối tượng rải bị dịch chuyển)- Cái này ko biêt do em thao tác hay sao nữa, mong anh chỉ rõ cho em hoặc cải tiến lại nếu lisp thực hiện như vậy thì tốt quá anh.
Hình đã gửi
  • 0

#4 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 24 May 2011 - 10:06 AM

em vừa dùng lisp của anh xong.Sau khi thử em có nhận xét như sau:
1.Lệnh này chậm hơn me.
2. Sau khi rải sao đối tượng mình rải lại lệch sơ với đối tượng gốc ( đối tượng rải bị dịch chuyển)- Cái này ko biêt do em thao tác hay sao nữa, mong anh chỉ rõ cho em hoặc cải tiến lại nếu lisp thực hiện như vậy thì tốt quá anh.
Hình đã gửi

Hu hu cái hình "to" quá nhìn o thấy gì hết. Bạn lưu ý chọn cái điểm dùng để chèn cho chính xác. Bạn làm thử với 3 hay 4 đối tượng to to tí chi dể kiểm tra!
Đây là hình mình kiểm tra nè. Còn việc chậm thì chắc phải sống chung với lũ thôi bạn. :D
Hình đã gửi
  • 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


#5 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 24 May 2011 - 10:35 AM

*Lâu nay dùng cái MEASURE và DIVIDE của cad thấy có vài hạn chế:
-Chỉ rải được point và block.
-Block thỉ phải gỏ tên và được chèn ra với tỉ lệ 1/1.
-Bỏ qua không chèn vào vị trí xuất phát của đường dẩn.
.......
*Xong rồi. Bác nào có nhu cầu thì dùng không có thì dòm. Mong không ném đá hoặc dè bỉu. :P
................

Bác Duy cho "dòm" 1 chút. Không dám "ném đá" đâu ! :rolleyes:
Lisp đã khắc phục vài hạn chế của CAD.
(tuy nhiên lisp chưa hoàn thiện khi quay đối tượng gốc.)
Hình đã gửi
  • 0

#6 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 24 May 2011 - 10:43 AM

Bác Duy cho "dòm" 1 chút. Không dám "ném đá" đâu ! :rolleyes:
Lisp đã khắc phục vài hạn chế của CAD.
(tuy nhiên lisp chưa hoàn thiện khi quay đối tượng gốc.)
Hình đã gửi

-Thêm phần góc quay nửa cũng được nhưng em nghỉ bác quay cái SOURCE lộn ngược lại trước khi rải (nếu bị ngược thao tác này nhanh mà) thì nhàn hơn nên thôi.
  • 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


#7 TKTXVD

TKTXVD

    biết vẽ arc

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

Đã gửi 24 May 2011 - 10:48 AM

Sau khi thử e có vài ý kiến sau:
- nếu rải trên đường thẳng thi khi quay tượng gốc, nó ko thấy quay .
- Rải trên đường cong, làm giống bác Gia_bạch hình cuối cùng ko tài nào làm giống đc, chữ cứ bị nghiêng đi.

Lisp rất hay mong các bác ra tay xử lý dùm
  • 0

#8 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 24 May 2011 - 11:03 AM

Sau khi thử e có vài ý kiến sau:
- nếu rải trên đường thẳng thi khi quay tượng gốc, nó ko thấy quay .
- Rải trên đường cong, làm giống bác Gia_bạch hình cuối cùng ko tài nào làm giống đc, chữ cứ bị nghiêng đi.

Lisp rất hay mong các bác ra tay xử lý dùm

-Muốn text không bị xiên thì chọn không quay. Muốn như bác Gia_bach thì chọn điểm gốc ở tâm hình tròn í.
-Hình thử các trường hợp cho bạn dể hình dung đây.
Hình đã gửi
  • 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


#9 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 24 May 2011 - 11:13 AM

-Thêm phần góc quay nửa cũng được nhưng em nghỉ bác quay cái SOURCE lộn ngược lại trước khi rải (nếu bị ngược thao tác này nhanh mà) thì nhàn hơn nên thôi.

Hề hề hề,
Đá thì hổng dám ném chớ gạch thì có đây....
Cái ni (choncuver) chắc ý bác nói (chonCurve) phải không ạ??? Curve nghe dễ hiểu hơn là Cuver bác ạ.
Hề hề hề,
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#10 cd2k44

cd2k44

    Edu level: li5

  • Members
  • PipPipPipPipPipPipPip
  • 648 Bài viết
Điểm đánh giá: 121 (tàm tạm)

Đã gửi 24 May 2011 - 11:25 AM

Hu hu cái hình "to" quá nhìn o thấy gì hết. Bạn lưu ý chọn cái điểm dùng để chèn cho chính xác. Bạn làm thử với 3 hay 4 đối tượng to to tí chi dể kiểm tra!
Đây là hình mình kiểm tra nè. Còn việc chậm thì chắc phải sống chung với lũ thôi bạn. :D
Hình đã gửi

Em cũng không biết sao cứ bị vậy nè.Em gửi anh file cad a kiểm tra giùm em với
http://www.cadviet.c..._hoan_thien.rar
  • 0

#11 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 24 May 2011 - 12:38 PM

Em cũng không biết sao cứ bị vậy nè.Em gửi anh file cad a kiểm tra giùm em với
http://www.cadviet.c..._hoan_thien.rar

File của bạn đang để hệ tọa độ UCS -> Lisp chạy chưa đúng.
trong khi chờ đợi bác Duy fix lỗi này, bạn chuyển hệ tọa độ về WCS là chạy đuợc.
  • 1

#12 cd2k44

cd2k44

    Edu level: li5

  • Members
  • PipPipPipPipPipPipPip
  • 648 Bài viết
Điểm đánh giá: 121 (tàm tạm)

Đã gửi 24 May 2011 - 01:17 PM

File của bạn đang để hệ tọa độ UCS -> Lisp chạy chưa đúng.
trong khi chờ đợi bác Duy fix lỗi này, bạn chuyển hệ tọa độ về WCS là chạy đuợc.

Sao em chuyển vể WCS mà vẫn chưa được anh gia_bach ah
  • 0

#13 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 24 May 2011 - 01:41 PM

Hề hề hề,
Đá thì hổng dám ném chớ gạch thì có đây....
Cái ni (choncuver) chắc ý bác nói (chonCurve) phải không ạ??? Curve nghe dễ hiểu hơn là Cuver bác ạ.
Hề hề hề,

Hu hu bác ném trúng viên tấp lô luôn chớ hông phải gạch. Nói chơi chứ tiếng Anh em dốt kinh (bác bắt trúng rồi í). Nhưng nó là hàm con ko thể hiện ra ngoài khi chạy chắc ít người thấy. :lol:
  • 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


#14 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 24 May 2011 - 01:49 PM

File của bạn đang để hệ tọa độ UCS -> Lisp chạy chưa đúng.
trong khi chờ đợi bác Duy fix lỗi này, bạn chuyển hệ tọa độ về WCS là chạy đuợc.


Fix kiểu gì bác ới. Quay trục tọa độ xong thực hiện lệnh, rồi trả lại à bác. Chứ dùng trans thì chình hông nổi do lỡ viết dài quá :ph34r:

Sao em chuyển vể WCS mà vẫn chưa được anh gia_bach ah

Mình chuyển trục tọa độ xong làm phát ăn ngay mà bạn. Nhớ chọn điểm chèn cho nó gần cái text í. :excl:
  • 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


#15 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 25 May 2011 - 04:18 PM

hề hề, mọi nguời không ném kệ mọi nguời. Em là em fải ném. Đá to cho Bác Duy đây:
Bác đặt tên biến rất ngắn, mà rất nhiều biến của bác chưa định nghĩa là biến cục bộ. điều này dễ gây xung đột với các lisp khác của người dùng bác ah. Em test fát là có lệnh của em bị dính lun :rolleyes:
  • 1

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#16 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 25 May 2011 - 04:40 PM

- Tks bác Duy vì lisp dựa trên hướng đi khác biệt ^^ Mà e thấy nó có lựa chọn cho chèn khác tỉ lệ 1/1 đâu hè
- Tuy nhiên, nếu là em, e sẽ giải quyết bài toán này theo cách :
+ Tạo temp-block từ tập ss
+ Measure/Divide block này theo đường dẫn + làm 2 em ở đầu và cuối đường dẫn
+ Explode tập vừa tạo ra và purge Block đó đi
Như vậy thì cải thiện được chút chút nhược điểm bác nêu + cải thiện tốc độ so với command copy, code cũng có vẻ ngắn hơn chăng (tận dụng ACET)?
  • 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


#17 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 25 May 2011 - 08:22 PM

- Tks bác Duy vì lisp dựa trên hướng đi khác biệt ^^ Mà e thấy nó có lựa chọn cho chèn khác tỉ lệ 1/1 đâu hè
- Tuy nhiên, nếu là em, e sẽ giải quyết bài toán này theo cách :
+ Tạo temp-block từ tập ss
+ Measure/Divide block này theo đường dẫn + làm 2 em ở đầu và cuối đường dẫn
+ Explode tập vừa tạo ra và purge Block đó đi
Như vậy thì cải thiện được chút chút nhược điểm bác nêu + cải thiện tốc độ so với command copy, code cũng có vẻ ngắn hơn chăng (tận dụng ACET)?

-Tỉ lệ khác 1/1 ý mình là block được chọn nếu đã scale rồi thì khi rải vẩn đảm bảo giống chứ ko chèn theo tên với tỉ lệ 1/1 như cad.
-Mình đã nói trước là tính đi theo hướng cho chọn điểm gốc và hướng rải (xuất phát từ thực tế của nghề) nhưng nhiều "muốn" quá nên chưa xây dựng đc kịch bản.
  • 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


#18 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 25 May 2011 - 08:29 PM

hề hề, mọi nguời không ném kệ mọi nguời. Em là em fải ném. Đá to cho Bác Duy đây:
Bác đặt tên biến rất ngắn, mà rất nhiều biến của bác chưa định nghĩa là biến cục bộ. điều này dễ gây xung đột với các lisp khác của người dùng bác ah. Em test fát là có lệnh của em bị dính lun :rolleyes:

Ok tiếp thu ý bác. Nhưng mình các hàm con nằm trong vòng lặp nhiều quá nên đặt biến cục bộ nó bị mất sinh lỗi hoài nên để tạm thế. Mình sẽ chỉnh cho biến dài thooooooooooòng ra để khỏi đánh nhau với lisp cảu bác thai nhá.
  • 1

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


#19 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 25 May 2011 - 09:10 PM

lisp rất hay nhưng thiếu mất cái hàm (vl-load-com) máy mình ko load lisp nào hết nên ra lỗi no function definition: VLAX-CURVE-GETENDPARAM

(setq KIEUDOITUONG (cdr (assoc 0 doituong)))
(cond
((= KIEUDOITUONG "INSERT") (setq dc (cdr (assoc 10 doituong))))
((/= KIEUDOITUONG "INSERT") (setq dc (getpoint "\nChon diem goc: ")))
);ketthuccondxemblock
);kethucdsl1
((/= dsl 1) (setq dc (getpoint "\nChon diem goc: ")))
);ketthuccondnho
Đoạn này nếu enter trong trường hợp ko phải Block thì biến dc sẽ bị sai,
lisp hay, vote cho bác 1 phiếu :rolleyes:
  • 1

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#20 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 26 May 2011 - 09:33 AM

Đã chỉnh lại:
-Quay và trả trục tọa độ.
-Không chọn điểm chuẩn thì hỏi chọn miết chừng nào chọn thì mới thôi.
-Định nghĩa biến cục bộ cho khỏi đá.
-Thêm dòng (vl-load-com).


(Defun c:rdt (/ ss doituong dsl dc ddd chondd chieudaicuver diemdau krai chieudaidoan slc sl index d2 p2 d5 p5 d3 p3 dt l m)
(vl-load-com)
(command "undo" "be")
(command "ucs" "")
(chonnhomdoituong)
(choncuver)
(hoikieurai)
(command "ucs" "p")
(command "undo" "end")
(princ)
)
;;;;;;;;;;;;;;;;;
(Defun chonnhomdoituong ()
(princ "\nChon doi tuong rai:")
(setq ss (ssget))

(cond
((= ss nil) (princ "\nChua chon duoc doi tuong nao:") (chonnhomdoituong))
((/= ss nil)
(setq dsl (sslength ss))
(cond
((= dsl 1)
(setq doituong (ssname SS 0))
(setq doituong (entget doituong))
(setq KIEUDOITUONG (cdr (assoc 0 doituong)))
(cond
((= KIEUDOITUONG "INSERT") (setq dc (cdr (assoc 10 doituong))))
((/= KIEUDOITUONG "INSERT") (chondiemchuandoituong))
);ketthuccondxemblock
);kethucdsl1
((/= dsl 1) (chondiemchuandoituong))
);ketthuccondnho

);ketthucsetqdsl
);ketthuccondtong
(princ)
)
;;;;;;;;;;;;;;;;;
(Defun chondiemchuandoituong ()
(setq dc (getpoint "\nChon diem goc: "))
(cond
((= dc nil) (princ "\nChua chon duoc diem goc:") (chondiemchuandoituong))
((/= ss nil)))
(princ)
)
;;;;;;;;;;;;;;;;;
(Defun choncuver ()

(setq ddd (entsel "\nChon duong dan:"))
(while
(or
(null ddd)
(or (= "TEXT" (cdr (assoc 0 (entget (car ddd))))) (= "MTEXT" (cdr (assoc 0 (entget (car ddd))))) (= "HATCH" (cdr (assoc 0 (entget (car ddd))))) (= "INSERT" (cdr (assoc 0 (entget (car ddd))))) (= "REGION" (cdr (assoc 0 (entget (car ddd))))) (= "DIMENSION" (cdr (assoc 0 (entget (car ddd)))))
)
)
(setq ddd (entsel "\nDoi tuong khong the lam duong dan! Chon lai"))
)

(setq chondd (car ddd))
(setq luubatdiem (getvar "osmode"))
(setvar "osmode" 0)
(setq chieudaicuver (vlax-curve-getDistAtParam chondd (vlax-curve-getEndParam chondd)))
(setq diemdau (vlax-curve-getPointAtDist chondd 0))
(setvar "osmode"luubatdiem)
(princ)
)
;;;;;;;;;;;;;;;;;
(Defun hoikieurai ()
(setq krai (strcase (getstring "\nKieu rai theo: So luong/<Khoang cach>")))
(Cond
((= krai "S") (raisoluong))
((/= krai "S")(raikhoangcach))
)
(princ)
)
;;;;;;;;;;;;;;
(Defun raikhoangcach ()
(setq chieudaidoan (GETDIST "\nKhoang cach doan chia: "))
(setq sol (+ (/ chieudaicuver chieudaidoan) 1))
(setq sl (fix sol))
(setq sl (fix sl))
(thuchienrai)
(princ)
)
;;;;;;;;;;;;;;
(Defun raisoluong ()
(setq slc (getreal "\nChia duong dan thanh may lan:"))
(setq chieudaidoan (/ chieudaicuver slc))
(setq sl (fix (+ 1 slc)))
(thuchienrai)
(princ)
)
;;;;;;;;;;;;;;
(Defun thuchienrai (/ quaykhong)

(setq quaykhong (strcase (getstring "\nCo quay doi tuong vuong goc voi duong dan khong: Khong/<Co>")))
(Cond
((= quaykhong "K") (setq copygiua copykoquay))
((/= quaykhong "K")(setq copygiua copyquay))
)

(setq index -1)

(repeat sl
(setq index (1+ index))
(setq d2 (* chieudaidoan index))
(setq luubatdiem (getvar "osmode"))
(setvar "osmode" 0)
(setq p2 (vlax-curve-getPointAtDist chondd d2))
(setvar "osmode"luubatdiem)
(copygiua)
)
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;
(defun copycuoiquay()
(setq luubatdiem (getvar "osmode"))
(setvar "osmode" 0)
(setq d5 (- chieudaicuver 0.001))
(setq p5 (vlax-curve-getPointAtDist chondd d5))
(setq L 0)
(setq M (sslength ss))
(while (< L M)
(setq DT (ssname ss L))
(command ".copy" DT "" dc p2)
(command ".rotate" "last" "" p2 p5)
(command ".rotate" "last" "" p2 180)
(setq L (1+ L))
)
(setvar "osmode"luubatdiem)
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;
(defun COPYQUAY(/ p3)
(setq luubatdiem (getvar "osmode"))
(setvar "osmode" 0)
(setq d3 (+ (* chieudaidoan index) 0.001))
(setq p3 (vlax-curve-getPointAtDist chondd d3))
(setvar "osmode"luubatdiem)
(Cond
((= p3 nil) (copycuoiquay))
((/= p3 nil)
(setq L 0)
(setq M (sslength ss))
(setq luubatdiem (getvar "osmode"))
(setvar "osmode" 0)
(while (< L M)
(setq DT (ssname ss L))
(command ".copy" DT "" dc p2)
(command ".rotate" "last" "" p2 p3)
(setq L (1+ L))
)
(setvar "osmode"luubatdiem)
)
)


(princ)
)

P/S : sửa lần 2, bác Duy cho code vào thẻ code nhé :angry:

Mình đã cho vào thẻ code nhưng sao nó vẩn dài thòng thế nhỉ. Mình đã xem mấy bài bên viết lisp theo yêu cầu nhấn nào trả lời để xem thì thấy cú pháp thẻ codecủa mình đúng nhưng sao không hiển thị được nhỉ!
  • 1

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