Đến nội dung


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

[Yêu cầu] lisp xuất tọa độ dim


  • Please log in to reply
51 replies to this topic

#21 nhoclangbat

nhoclangbat

    Edu level: li10

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

Đã gửi 02 February 2013 - 02:47 PM

lsp đó e thử rùi nhưng lại lỗi anh ơi :D
  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#22 Truong_AAn

Truong_AAn

    biết dimradius

  • Members
  • PipPipPipPipPip
  • 314 Bài viết
Điểm đánh giá: 68 (tàm tạm)

Đã gửi 02 February 2013 - 02:49 PM

Em đã thử rồi anh ah kết quả như hình dưới. cad vẫn xuất ra các điểm đồng tọa độ. Anh xem file nhé
http://www.cadviet.c.../106444_abc.dwg
  • 0
Hình đã gửi
----------------------------------------------------------------------------------//-------------------------------------------------------------------------------------

#23 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 03 February 2013 - 06:35 AM

Em đã thử rồi anh ah kết quả như hình dưới. cad vẫn xuất ra các điểm đồng tọa độ. Anh xem file nhé
http://www.cadviet.c.../106444_abc.dwg

Có nghĩa là :
Nếu các điểm có cùng toạ độ X thì:
+ Nếu đã có 1 điểm đã ghi rồi thì các điểm còn lại không ghi nữa
+ Nếu chưa có điểm nào được ghi thì Lisp sẽ ghi toàn bộ điểm đó
Tương tự vậy cho các điểm có cùng toạ độ Y
Nếu như vậy thì mình nghĩ Lisp hoàn toàn làm được

Bạn vui lòng xác định chính xác yêu cầu để mình sửa code lisp cho phù hợp với y/c của bạn
  • 1

#24 nhoclangbat

nhoclangbat

    Edu level: li10

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

Đã gửi 03 February 2013 - 09:37 AM

nhoc thấy ý tưởng này cũng hay hay ^^ chắc cũng giúp nhoc trong công việc 1 số trường hợp, chôm về xài cũng đc :D. Nhoc cũng góp ý xíu giúp hoàn thiện lsp, nhoc nghĩ ý bạn Truong_AAn chắc là vậy cũng giống anh Tue nói ko pit bạn í thế nào
Hình đã gửi
Những tọa độ gạch chéo là những tọa độ ko cần ghi, nói rõ hơn có thể là vầy:
-sau khi chọn trục tọa độ chọn hết đối tượng lsp sẽ ghi tọa độ theo hướng từ dưới lên trên và từ trái qua phải.
-Trục Y theo hướng từ dưới lên trên của đối tượng thì những điểm nào cùng tọa độ Y chỉ ghi Y cho điểm đầu tiên gặp điểm nào trước thì ghi điểm đó, các điểm còn lại theo hướng lên trên nữa ko cần ghi ^^
-Trục X cũng vậy từ trái qua phải gặp điểm nào đầu tiên trong tất cả đối tượng thì ghi X, các điểm tiếp theo ko cần ghi nữa ^^
Ps: ko pit í bạn Truong_AAn có giống nhoc không nhỉ :D,nhờ anh Tue giúp đỡ để lsp hoàn thiện hơn ^^
  • 1
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#25 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 03 February 2013 - 07:05 PM

nhoc thấy ý tưởng này cũng hay hay ^^ chắc cũng giúp nhoc trong công việc 1 số trường hợp, chôm về xài cũng đc :D. Nhoc cũng góp ý xíu giúp hoàn thiện lsp, nhoc nghĩ ý bạn Truong_AAn chắc là vậy cũng giống anh Tue nói ko pit bạn í thế nào

Những tọa độ gạch chéo là những tọa độ ko cần ghi, nói rõ hơn có thể là vầy:
-sau khi chọn trục tọa độ chọn hết đối tượng lsp sẽ ghi tọa độ theo hướng từ dưới lên trên và từ trái qua phải.
-Trục Y theo hướng từ dưới lên trên của đối tượng thì những điểm nào cùng tọa độ Y chỉ ghi Y cho điểm đầu tiên gặp điểm nào trước thì ghi điểm đó, các điểm còn lại theo hướng lên trên nữa ko cần ghi ^^
-Trục X cũng vậy từ trái qua phải gặp điểm nào đầu tiên trong tất cả đối tượng thì ghi X, các điểm tiếp theo ko cần ghi nữa ^^
Ps: ko pit í bạn Truong_AAn có giống nhoc không nhỉ :D,nhờ anh Tue giúp đỡ để lsp hoàn thiện hơn ^^

Hề hề hề,
Bạn Truong_AAn và nhóc thử xài cái ni coi đã ưng cái ruột chưa nhé.


(defun c:dimor ()
(vl-load-com)
(setq oldos (getvar "osmode"))
(command "undo" "be")
(setvar "osmode" 0)
(command "ucs" "n" "o" (getpoint))
(setq ssl (acet-ss-to-list (ssget (list (cons 0 "*line,arc,circle")))))
(setq plst nil)
(foreach pl ssl
(if (= (cdr (assoc 0 (entget pl))) "*POLYLINE")
(setq plst (append plst (acet-geom-vertex-list pl)))
)
(if (= (cdr (assoc 0 (entget pl))) "LINE")
(setq plst (append plst (list (trans (cdr (assoc 10 (entget pl))) 0 1) (trans (cdr (assoc 11 (entget pl))) 0 1))))
)
(if (or (= (cdr (assoc 0 (entget pl))) "ARC") (= (cdr (assoc 0 (entget pl))) "CIRCLE"))
(setq plst (append plst (list (cdr (assoc 10 (entget pl))) ) ))
)
)
(setq plst (vl-sort plst '(lambda (x y) (< (car x) (car y)))))
(setq xlst nil, ylst nil)
(foreach ver plst
(if (not (member (car ver) xlst))
(progn
(command "dimordinate" ver "x" (list (car ver) (- (cadr ver) 6)) "")
(setq xlst (append xlst (list (car ver))))
)
)
(if (not (member (cadr ver) ylst))
(progn
(command "dimordinate" ver "y" (list (- (car ver) 6) (cadr ver)) "")
(setq ylst (append ylst (list (cadr ver))))
)
)
)

(command "undo" "e")
(setvar "osmode" oldos)
(princ)
)

Lưu ý rằng cái sự dài hay ngắn của đường dẫn kích thước là do người dùng chọn nhé. Ở trong lisp thì mình để cố định là 6. Nếu muốn thì hãy tự thay thê chỗ này.
Chúc mọi người cưới to.
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.

#26 nhoclangbat

nhoclangbat

    Edu level: li10

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

Đã gửi 03 February 2013 - 07:32 PM

nhoc thì dễ tính seo cũng đc lâu lâu có dịp mới dùng cái nì ^^, còn bạn Truong_AAn thì hem pit, nhoc test thử thì như sau rất ngắn gọn xúc tích :DHình đã gửi

Hình đã gửi
Những tọa độ gạch chéo là những tọa độ ko cần ghi, nói rõ hơn có thể là vầy:
-sau khi chọn trục tọa độ chọn hết đối tượng lsp sẽ ghi tọa độ theo hướng từ dưới lên trên và từ trái qua phải.
-Trục Y theo hướng từ dưới lên trên của đối tượng thì những điểm nào cùng tọa độ Y chỉ ghi Y cho điểm đầu tiên gặp điểm nào trước thì ghi điểm đó, các điểm còn lại theo hướng lên trên nữa ko cần ghi ^^
-Trục X cũng vậy từ trái qua phải gặp điểm nào đầu tiên trong tất cả đối tượng thì ghi X, các điểm tiếp theo ko cần ghi nữa ^^

-Không giống hình nhoc ví dụ lém ^^, mất hết trơn :)
Ps:Có thể nhoc giải thích ko rõ làm anh Bình lộn chăng, có gì anh Bình đừng giận nhoc nhá ^^
  • 1
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#27 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 03 February 2013 - 07:47 PM

Hề hề hề,
Bạn Truong_AAn và nhóc thử xài cái ni coi đã ưng cái ruột chưa nhé.



(defun c:dimor ()
(vl-load-com)
(setq oldos (getvar "osmode"))
(command "undo" "be")
(setvar "osmode" 0)
(command "ucs" "n" "o" (getpoint))
(setq ssl (acet-ss-to-list (ssget (list (cons 0 "*line,arc,circle")))))
(setq plst nil)
(foreach pl ssl
(if (= (cdr (assoc 0 (entget pl))) "*POLYLINE")
(setq plst (append plst (acet-geom-vertex-list pl)))
)
(if (= (cdr (assoc 0 (entget pl))) "LINE")
(setq plst (append plst (list (trans (cdr (assoc 10 (entget pl))) 0 1) (trans (cdr (assoc 11 (entget pl))) 0 1))))
)
(if (or (= (cdr (assoc 0 (entget pl))) "ARC") (= (cdr (assoc 0 (entget pl))) "CIRCLE"))
(setq plst (append plst (list (cdr (assoc 10 (entget pl))) ) ))
)
)
(setq plst (vl-sort plst '(lambda (x y) (< (car x) (car y)))))
(setq xlst nil, ylst nil)
(foreach ver plst
(if (not (member (car ver) xlst))
(progn
(command "dimordinate" ver "x" (list (car ver) (- (cadr ver) 6)) "")
(setq xlst (append xlst (list (car ver))))
)
)
(if (not (member (cadr ver) ylst))
(progn
(command "dimordinate" ver "y" (list (- (car ver) 6) (cadr ver)) "")
(setq ylst (append ylst (list (cadr ver))))
)
)
)

(command "undo" "e")
(setvar "osmode" oldos)
(princ)
)

Lưu ý rằng cái sự dài hay ngắn của đường dẫn kích thước là do người dùng chọn nhé. Ở trong lisp thì mình để cố định là 6. Nếu muốn thì hãy tự thay thê chỗ này.
Chúc mọi người cưới to.
Hề hề hề

Em thì chưa thử chi trơn , nhưng đọc qua code bác viết em có góp ý:
1 nguyên tắc cơ bản khi viết Lisp : tránh đặt tên biến trùng với tên hàm vì vô tình thay đổi cấu trúc của hàm đó.
Biến ver trùng với hàm (ver)
Nếu viết bằng Visual lisp editor chắc là tránh được cái này vì từ khoá có màu xanh

@nhoclangbat: Mình thì nghĩ ý bạn Truong AAn là
Nếu các điểm có cùng toạ độ X thì:
+ Nếu đã có 1 điểm đã ghi rồi thì các điểm còn lại không ghi nữa
+ Nếu chưa có điểm nào được ghi thì Lisp sẽ ghi toàn bộ điểm đó
Tương tự vậy cho các điểm có cùng toạ độ Y
Chắc là vậy, chứ không phải là ý sắp xếp toạ độ
Chờ bạn ấy xác định lại y/c lần nữa, mình mới tiến hành viết Lisp
  • 1

#28 nhoclangbat

nhoclangbat

    Edu level: li10

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

Đã gửi 03 February 2013 - 08:18 PM

Tại nhoc thấy lsp của anh Tue là tự động ghi hết 1 lúc nên nhoc ko pit thứ tự mà lsp ghi là bắt đầu từ đâu nếu nói như anh Tue nếu có 1 điểm đã ghi rùi thì các điểm còn lại ko cần ghi thấy nó randoom sao á ^^. Vd cho 2 line nối tiếp nhau thẳng băng theo trục X chẳng hạn >>>> sẽ có 3 điểm cần ghi >>>> 2 line đó sẽ cùng tọa độ Y, khác X >>>> vậy lsp sẽ chạy điểm nào trước nhỉ, nếu điểm giữa ghi đầy đủ X,Y 2 điểm 2 bên chỉ ghi X hay ghi đầy đủ điểm cuối vậy nhìn nó ko đẹp zai lém ^^, nên nhoc mới có ý tưởng sắp xếp vậy chỉ ghi đầy đủ cho điểm đầu = từ trái quá phải tương tự nếu ví dụ đường thẳng vẽ theo trục Y thấy nó hay hơn :D
  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#29 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 03 February 2013 - 08:38 PM

nhoc thì dễ tính seo cũng đc lâu lâu có dịp mới dùng cái nì ^^, còn bạn Truong_AAn thì hem pit, nhoc test thử thì như sau rất ngắn gọn xúc tích :DHình đã gửi


-Không giống hình nhoc ví dụ lém ^^, mất hết trơn :)
Ps:Có thể nhoc giải thích ko rõ làm anh Bình lộn chăng, có gì anh Bình đừng giận nhoc nhá ^^

Hề hề hề,
1/- Nhóc gửi cái bản vẽ của nhóc đề mình test ví mình chạy trên bản vẽ của Truon_AAn thì nó OK.
2/- Nho12c sửa lại tên bến ver theo góp ý của bác TueNV vì mình chả biết là có hàm ver....
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#30 nhoclangbat

nhoclangbat

    Edu level: li10

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

Đã gửi 03 February 2013 - 08:52 PM

nhoc sữa rùi thử lại cũng vậy ah ^^, file nì anh Bình
http://www.cadviet.c...73_drawing4.dwg
  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#31 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 03 February 2013 - 09:40 PM

nhoc sữa rùi thử lại cũng vậy ah ^^, file nì anh Bình
http://www.cadviet.c...73_drawing4.dwg

Hề hề hề,
Gửi lại lisp đã chỉnh chút chút ở các điều kiện cho đúng. Lúc trước mình để hàm (= (.....) "*POLYLINE") có thể CAD của nhóc không hiểu nên đổi lại thành hàm điều kiện or cho nó dài dòng văn tự. Ngoài ra sử dụng the6mm hàm trans để chuyển tâm các cung tròn về hệ tọa độ lựa chọn.


(defun c:dimor ()
(vl-load-com)
(setq oldos (getvar "osmode"))
(command "undo" "be")
(setvar "osmode" 0)
(command "ucs" "n" "o" (getpoint))
(setq ssl (acet-ss-to-list (ssget (list (cons 0 "*line,arc,circle")))))
(setq plst nil)
(foreach pl ssl
(if (or (= (cdr (assoc 0 (entget pl))) "LWPOLYLINE") (= (cdr (assoc 0 (entget pl))) "POLYLINE"))
(setq plst (append plst (acet-geom-vertex-list pl)))
)
(if (= (cdr (assoc 0 (entget pl))) "LINE")
(setq plst (append plst (list (trans (cdr (assoc 10 (entget pl))) 0 1) (trans (cdr (assoc 11 (entget pl))) 0 1))))
)
(if (or (= (cdr (assoc 0 (entget pl))) "ARC") (= (cdr (assoc 0 (entget pl))) "CIRCLE"))
(setq plst (append plst (list (trans (cdr (assoc 10 (entget pl))) 0 1)) ))
)
)
(setq plst (vl-sort plst '(lambda (x y) (< (car x) (car y)))))
(setq xlst nil, ylst nil)
(foreach vrt plst
(if (not (member (car vrt) xlst))
(progn
(command "dimordinate" vrt "x" (list (car vrt) (- (cadr vrt) 6)) "")
(setq xlst (append xlst (list (car vrt))))
)
)
(if (not (member (cadr vrt) ylst))
(progn
(command "dimordinate" vrt "y" (list (- (car vrt) 6) (cadr vrt)) "")
(setq ylst (append ylst (list (cadr vrt))))
)
)
)

(command "undo" "e")
(command "ucs" "p")
(setvar "osmode" oldos)
(princ)
)

Hy vọng đúng ý nhóc, đã test trên bản vẽ nhóc gửi thì thấy không thể đẹp hơn.
Hề hề hề.
Nếu nhóc thấy khoái có thể bổ sung thêm cả việc ghi tọa độ tâm cho elip nữa nhóc ạ. Cũng vui phết.
  • 3
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#32 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 03 February 2013 - 10:29 PM

Hàm "=" hoặc "equal" không dùng được với ký tự đại diện "*" bác PTB ạ!
Có thể thay bởi "wcmatch" thì khỏi dùng "or".
  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#33 nhoclangbat

nhoclangbat

    Edu level: li10

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

Đã gửi 03 February 2013 - 10:29 PM

thanks anh Bình đã nhiệt tình với yêu cầu nì nhưng hình như càng thử nhoc càng rối ấy nhỉ, nhoc lấy 2 cái lsp đầu của anh Bình và anh Tue là nhoc thỏa mãn rùi còn phần mở rộng của bạn AAn nhoc chỉ tò mò thử xem nhưng thấy nó sao sao ấy nhỉ, hình như lsp nó ko chạy đc theo ý nhoc trình bày thì phải, cái lsp anh Bình mới sữa nhoc thử với nhiều hình thì nghiệm ra tùm lum :D
Như hình nhoc đưa lên theo thì đúng ra lsp sẽ chạy đúng theo vd của nhoc nhưng đúng đc 3/4 ^^, góc dưới bên phải nhẽ ra phải ghi tọa độ X, đằng này bó bỏ qua tọa độ X đó dời đến tâm đường tròn mới ghi ^^, nhoc thử vẽ lại hình vuông vức thì cũng vậy X được dời lên góc trên bên phải ko phải góc dưới, nhưng vẽ hình nhà chữ L ngược thì cách nó chạy lại đúng với ý nhoc sắp xếp hay vẽ pline dạng bậc thang cũng đúng, có nhẽ cách sắp xếp của nhoc ko phù hợp với cách lsp nó chạy chăng và tùy thuộc vào hình dáng của đối tượng nữa. Túm lại level nhoc chưa đủ để hình tượng ra đc @_@, đọc lsp thì cũng ko thể hỉu hết nhoc cũng chỉ mới tập nắm đc sơ sơ cái sườn lsp như thế nào ^^ >>> bởi vậy nhoc cũng mới chỉ có thể chỉnh sữa sơ sơ kiủ thêm bớt thui chứ sữa hàm thì @_@
Ps: với lsp này nhoc xin dừng nghiên cứu kẻo tẩu hỏa :D
  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#34 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 03 February 2013 - 11:27 PM

Ô, chủ topic ném đá mặt hồ bỏ đi rồi mọi người vẫn chờ nước lặng, vui tóa ^^
- Nói chung là các bác lười khử hàm khử biến quá, hí hí
- Code bác Bình ket thấy có đoạn này (setq xlst nil, ylst nil), không biết tag code lỗi hay nó thế, mà đọc giống VB quá bác ơi, mà một biến chưa khởi tạo đương nhiên là nil rùi ^^
- *LINE có cả MLine
- Nếu chỉ là dịch chuyển gốc tọa độ, và đằng nào cũng trans (mà ket đọc thấy chỗ có chỗ không ?), sao các bác không sử dụng luôn vecto 0,0,0 -> gốc mới trong các phép tính, sẽ xinh hơn là command ucs
....
  • 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


#35 Truong_AAn

Truong_AAn

    biết dimradius

  • Members
  • PipPipPipPipPip
  • 314 Bài viết
Điểm đánh giá: 68 (tàm tạm)

Đã gửi 04 February 2013 - 09:20 AM

Chào các bạn các anh chúc tuần làm việc vui vẻ.
Từ hm thứ 7 giờ không theo dõi topic được vì không online được các bác ah.
Đầu tiên cảm ơn các bạn đã nhiệt tình giúp đỡ
Sau đây mình sẽ phản hồi để lisp dim theo tọa độ được hoàn thiện hơn.
@ Anh Tuệ.
- Anh đã hiểu đúng ý em rồi ạ. Nếu thêm phần sắp xếp theo thứ tự như của nhoclangbat nữa thì càng đẹp anh ah.
- Anh giữ nguyên lisp chạy theo layer víible (duong nhin thay) như lisp đầu tiên nhé
- Anh làm thêm phần cho phép mình nhập khoảng cách kéo dài như mình mong muốn nữa anh nha.
- Lisp nhận luôn cả Elip
- Các ARC,CIRCLE,ELIP khi đã dim tâm thì không cần dim ở Quadrant nữa

@ Anh Bình
- Lisp anh chạy ok rồi. Nhưng em xin phép được góp ý thêm
- Sau khi đánh lệnh anh vẫn giữ nguyên chế độ truy bắt điểm để mình chọn gốc tọa độ như mình muốn
- Giống như phần em trả lời anh Tuệ phía trên.
- Sao các dim kéo ra mất chế đô F8 bọn nó cứ vón cục lại với nhau chứ không thẳng được bác ah
@nhoc: Cảm ơn nhóc nhờ nhóc mình biết thêm nhiều thứ đặc biệt là cái khoảng chọc ngoáy vào lisp điều này mình chưa làm được bao giờ nhưng giờ thì cũng biết biết rồi đấy hehe.
Không biết nhóc sử dụng lisp để làm gì còn mình dùng để xuất tọa độ các chi tiết cơ khí có hình dạng phức tạp có khoan nhiều lỗ mà khi dim kích thước rất phức tạp và chồng chéo lên nhau rất khó đọc. Ở chỗ mình có mấy bác gia công thích kiểu dim này lắm. Khi phay một chi tiết bác ấy chỉ so dao tại x=0, y= 0 set dao và bấm máy chạy tọa độ đúng như trên bản vẽ và bụm bụm... xong hihi
@ Anh Ket: Ở nhà em không có net anh ket ah. Khi vào chỗ làm mới online đươc chứ em không ném đá xong bỏ đi hì hì đâu em là fan của cadviet muh.
  • 0
Hình đã gửi
----------------------------------------------------------------------------------//-------------------------------------------------------------------------------------

#36 nhoclangbat

nhoclangbat

    Edu level: li10

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

Đã gửi 04 February 2013 - 11:23 AM

-Phần elip thì đợi anh Bình hay Anh Tue ra tay vậy :D
-Bạn xài lsp nào của anh Bình vậy ? lsp đầu tiên hay lsp mới nhất, lsp mới nhất thì anh Bình đã chỉnh hao hao giống anh Tue sau khi chọn đối tượng và chọn góc thì nó dim 1 lúc lun ah thẳng tắp, cách làm dim nó dài ra thì anh Bình cũng đã hướng dẫn ở trên rùi.
-Lúc chọn gốc (0,0,0) bạn mún giữ nguyên chế độ bắt điểm thì bạn thử mò tay vào trong....ngoáy cho em nó sướng thì sẽ đc như ý ngay mất 3s thui :D :D :D

(defun c:dimor ()
(vl-load-com)
(setq oldos (getvar "osmode")); cái nì tác dụng là lưu lại chế độ bắt điểm hiện tại của bạn ^^
(command "undo" "be")
(setvar "osmode" 0); cái ni thì có thể hỉu như là tắt chế độ bắt điểm í ^^
(command "ucs" "n" "o" (getpoint)); dòng này là lúc lsp nó hỏi bạn chọn gốc (0,0,0) ở đâu ????

- Cơ bản nhoc đc học là lsp sẽ chạy theo thứ tự từ trên xuống >>>> bạn thử hoán đổi dựa vào gợi ý 3 dòng màu đỏ xem :D
-Còn vụ kéo dài dim theo mong mún thì thêm hoặc thay thế xíu
-Đối với lsp anh Tue khoảng cách đc xác định bằng biến (setq kc 6.0) ; lsp mới nhất gần đây của anh Bình thì ko đặt thêm biến này cho thẳng khoảng cách trong hàm
Trích 1 đoạn Lsp của anh Bình, chú ý số 6 màu xanh lá chính là khoảng cách mong mún

(command "dimordinate" vrt "x" (list (car vrt) (- (cadr vrt) 6)) "")
(setq xlst (append xlst (list (car vrt)))) ) )
(if (not (member (cadr vrt) ylst))
(progn (command "dimordinate" vrt "y" (list (- (car vrt) 6) (cadr vrt)) "")
(setq ylst (append ylst (list (cadr vrt))))
)

Trích 1 dòng Lsp anh Tue

(setq kc 6.0); dòng này cũng có tác dụng qui định khoảng cách dim kéo ra

C1: mú thay đổi khoảng cách này thì thay số 6.0 này bằng bao nhiu tùy thích nhưng sữa kiủ này khi xài nó sẽ mặc định con số ây lun ko thay đổi mổi khi use, mún đổi lại phải vào lsp sữa.
C2: viết dòng code có tác dụng hỏi khoảng cách mỗi khi xài lsp
- (setq kc (getreal "\nNhap khoang cach mong mun:")) thay dòng này trong lsp anh Tue
- Trong lsp anh Bình thì thêm dòng trên thích đặt đâu cũng đc nhưng giới hạn trong đoạn này thui nhé ^^, ngoài ra phải thay lun số 6.0 ở đoạn trên bằng biến kc

(defun c:dimor ()
(vl-load-com)
(setq oldos (getvar "osmode"))
(command "undo" "be")
(setvar "osmode" 0)

>>>> đến lúc anh Bình hay anh Tue hoành chỉnh lsp mà bỏ qua nhưng điểm nhỏ nhặt trên thì bạn cũng có thể ngoáy cho nó :D
-Khả năng của nhoc nếu chỉnh cũng chỉ có thế thui. Chúc bạn vui ^^
Ps:Anh Ket mà thấy ko biết nhoc có bị la ko nhỉ ^^. Nếu bạn rãnh có hứng thú thì wa tết tham gia lớp Lsp của anh Ket "PR" kaka :D :D :D
  • 1
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#37 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 05 February 2013 - 09:15 AM

TruongAAn và nhoc thử Lisp này xem sao


(defun Tue-dxf (dxf ename)(cdr(assoc dxf (entget ename))))
(defun Tue-ent-Lpoint(e / i Lpoint);Tue-dxf
(if (wcmatch (Tue-dxf 0 e) "*POLYLINE")
(progn
(if (= (type e) 'VLA-OBJECT) (setq e (vlax-vla-object->ename e)))
(setq i -1)
(Repeat (if (wcmatch (Tue-dxf 0 e) "*POLYLINE") (fix (1+ (vlax-curve-getEndParam e))) 2)
(setq Lpoint (append Lpoint (list (vlax-curve-getPointatParam e (setq i (1+ i))))))
)
)
)
(if (wcmatch (Tue-dxf 0 e) "LINE")
(setq Lpoint (append Lpoint (list (Tue-dxf 10 e) (Tue-dxf 11 e))))
)
(if (wcmatch (Tue-dxf 0 e) "ARC,CIRCLE,ELLIPSE")
(setq Lpoint (append Lpoint (list (Tue-dxf 10 e) )))
)
Lpoint
)
(defun Tue-ss-list (L-ss-vlaobj / n L Lst ssg vlaobj)

(mapcar 'set '(ssg vlaobj) L-ss-vlaobj)
(setq L (sslength ssg))
(Repeat L
(setq ename (ssname ssg (setq L (1- L))))
(setq Lst (cons (if vlaobj (vlax-ename->vla-object ename) ename) Lst))
)
)
(defun c:dorr (/ oldos ssd Lptx Lpty)
(vl-load-com)

(setq kc 6.0)
(setq oldos (getvar "osmode"))
(command "undo" "be")
(setq ssd (Tue-ss-list (list (ssget '((0 . "*LINE,CIRCLE,ARC,ELLIPSE"))))))
(command "ucs" "w")
(setq goc (getpoint "\n Chon goc toa do tuong doi :"))
(setvar "osmode" 0)
(command "zoom" "e")


(foreach x ssd
(foreach z (vl-sort (Tue-ent-Lpoint x) '(lambda(x1 x2) (if (= (car x1) (car x2)) (< (cadr x1) (cadr x2)) (< (car x1) (car x2)) )
) )
(if (not (member (- (car z) (car goc)) (mapcar 'car Lptx)))
(setq Lptx (append Lptx (list(list (- (car z) (car goc)) z))))
)
))
(foreach x ssd
(foreach z (vl-sort (Tue-ent-Lpoint x) '(lambda(x1 x2) (if (= (cadr x1) (cadr x2)) (< (car x1) (car x2)) (< (cadr x1) (cadr x2)))
) )
(if (not (member (- (cadr z) (cadr goc)) (mapcar 'car Lpty)))
(setq Lpty (append Lpty (list(list (- (cadr z) (cadr goc)) z))))
)
)
)



(foreach z Lptx
(command "DIMORDINATE" (cadr z) "t" (rtos (car z) 2 0) "x" (list (caadr z) (+ (cadr (cadr z)) kc) 0.0) )
)
(foreach z Lpty
(command "DIMORDINATE" (cadr z) "t" (rtos (car z) 2 0) "y" (list (- (caadr z) kc) (cadr (cadr z)) 0.0) )
)

(command "zoom" "p")
(setvar "osmode" oldos)
(command "ucs" "p")
(command "undo" "e")
)

  • 1

#38 nhoclangbat

nhoclangbat

    Edu level: li10

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

Đã gửi 05 February 2013 - 09:46 AM

sao nhoc thử thì lỗi anh Tue hay tại cad của nhoc

Command: error: bad argument type: numberp: nil


  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#39 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 05 February 2013 - 01:28 PM

sao nhoc thử thì lỗi anh Tue hay tại cad của nhoc

Lạ nhỉ? Mình test không có vấn đề gì cả
  • 0

#40 Truong_AAn

Truong_AAn

    biết dimradius

  • Members
  • PipPipPipPipPip
  • 314 Bài viết
Điểm đánh giá: 68 (tàm tạm)

Đã gửi 05 February 2013 - 01:56 PM

Ok rồi anh Tuệ ah. Cảm ơn anh rất nhiều . Em ứng dụng lisp một thời gian nếu có gì lại nhờ anh giúp nhé hì hì.
Chúc anh cùng gia đình ăn tết vui vẻ!!
  • 0
Hình đã gửi
----------------------------------------------------------------------------------//-------------------------------------------------------------------------------------