Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
nguyenbd1

help lisp vẽ đường tròn chỉ 1 cái pick

Các bài được khuyến nghị

nguyenbd1    13

chào anh em cadviet thân mến... lâu rồi không lên  diễn đàn..

lời đầu kính chúc anh em nhà mình luôn mạnh khoẻ và đẻ nhiều cái để anh em mình mót của nhau...

tớ có 1 vấn đề như sau..

tớ định viết 1 mã lisp để phục vụ cho yêu cầu công việc...

_ bình thường thì mún vẽ 1 đường tròn ta phải thao tác bằng nhiều bước. gõ c enter chọn 1 điểm sau dó kéo ra và gõ bán kính..

yêu cầu của tớ như sau.. gõ c enter sau đó gõ giá trị đường kính của đường tròn và cuối cùng là chọn 1 điềm để đặt đường tròn. theo nguyên lý thì hơi ngược 1 tí...

và có 1 yêu cầu nhỏ nữa là lúc đường tròn tạo ra sẽ có cả đường tâm.. có cả giá trị text, giá trị này chính là đường kính đường tròn.. hình minh hoạ ở dưới.. kính mong các bậc tiền bối giúp đỡ... về lisp thì tớ chưa đủ trình để làm cái này.. xin cảm ơn các anh em trước...122369_11.jpg

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
tien2005    97

Cái này thì đơn giản.

Đầu bài không rõ ràng: chiều cao text la bao nhiêu nên chưa giúp được

Chỉ vẽ 1 lần là kết thúc lệnh hay trong 1 lệnh vẽ liên tục nhiều vòng tròn, mỗi lần vẽ liên tục thì có cần nhập lại đường kính của vòng tròn không

Bạn chịu khó kiên nhẫn 1 chút vì không ai cũng có nhiều thời gian để giúp Bạn, nhất là những lúc cuối năm

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
nguyenbd1    13

xjn lỗj bác. chjều cao của tex thay đổj theo độ lớn của dường tron. cụ thể là chjều cao text băng 1/3 dương kjnh. vẽ ljen tuk. mỗj caj pjck la dc 1 duơng tròn, ko can nhap duon kinh. nếu bak jup e e xjn kam ơn bác truớc

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
duy782006    1.374

Đầu bài thiếu rất nhiều dữ liệu.

Đường tròn: layer gì, màu gì, nét gì, có độ rộng nét không?

Line: layer gì, màu gì, nét gì, có độ rộng nét không? Dài ra so với đường tròn là bao nhiêu?

Text: : layer gì, màu gì, style gì, font gì (cái này quan trong vì cần ghi chử pi), canh lề gì? Còn độ cao text trong bản vẽ kỹ thuật ko thể chơi kiểu có 100 cái đường kính thì có 100 chiều cao chử nhu vậy được!

Mình chỉ góp vài ý thôi chứ ko viế đc lisp đâu nhé. Đó là chưa kể tới có 1 ngày đẹp trời nào đó bạn lại muốn cái giá trị kia bằng đường kính nhân thêm hệ số gì gì nửa thì người viết lại sửa nửa?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
hochoaivandot    108


(defun MakeText (point string Height Wid Ang justify Style Layer Color xdata / Lst); Ang: Radial
    (setq Lst (list '(0 . "TEXT")
                                    (cons 8 (if Layer Layer (getvar "Clayer")))
                                    (cons 62 (if Color Color 256))
                                    (cons 10 point)
                                    (cons 40 Height)
                                    (cons 41 Wid)                                    
                                    (cons 1 string)
                                    (if Ang (cons 50 Ang))
                                    (cons 7 (if Style Style (getvar "Textstyle")))
                                    (cons -3 (if xdata (list xdata) nil)))
                justify (strcase justify))
    (cond ((= justify "C") (setq Lst (append Lst (list (cons 72 1) (cons 11 point)))))
                ((= justify "R") (setq Lst (append Lst (list (cons 72 2) (cons 11 point)))))
                ((= justify "M") (setq Lst (append Lst (list (cons 72 4) (cons 11 point)))))
                ((= justify "TL") (setq Lst (append Lst (list (cons 72 0) (cons 11 point) (cons 73 3)))))
                ((= justify "TC") (setq Lst (append Lst (list (cons 72 1) (cons 11 point) (cons 73 3)))))
                ((= justify "TR") (setq Lst (append Lst (list (cons 72 2) (cons 11 point) (cons 73 3)))))    
                ((= justify "ML") (setq Lst (append Lst (list (cons 72 0) (cons 11 point) (cons 73 2)))))
                ((= justify "MC") (setq Lst (append Lst (list (cons 72 1) (cons 11 point) (cons 73 2)))))
                ((= justify "MR") (setq Lst (append Lst (list (cons 72 2) (cons 11 point) (cons 73 2)))))
                ((= justify "BL") (setq Lst (append Lst (list (cons 72 0) (cons 11 point) (cons 73 1)))))
                ((= justify "BC") (setq Lst (append Lst (list (cons 72 1) (cons 11 point) (cons 73 1)))))
                ((= justify "BR") (setq Lst (append Lst (list (cons 72 2) (cons 11 point) (cons 73 1))))))
    (entmakex Lst));end
;=================================
(defun C:ttt(/ dia disadd pleft pright pup pdown p1)
    (if (not dia0) (setq dia0 30.0))
    (setq dia (getdist (strcat "\nNhap duong kinh: <" (rtos dia0 2 2) ">:")))
    (if (not dia)
        (setq dia dia0)
        (setq dia0 dia)
    )
    (setq disadd (/ dia 10.0))
    (while (setq p1 (getpoint "Pick diem"))
        (setq pleft (polar p1 pi (+ (* 0.5 dia) disadd)))
        (setq pright (polar p1 0 (+ (* 0.5 dia) disadd)))
        (setq pup (polar p1 (/ pi 2) (+ (* 0.5 dia) disadd)))
        (setq pdown (polar p1 (/ pi -2) (+ (* 0.5 dia) disadd)))
        (entmake (list (cons 0 "CIRCLE") (cons 10 p1) (cons 40 (/ dia 2.0))))
        (entmake (list (cons 0 "LINE") (cons 10 pleft) (cons 11 pright)))
        (entmake (list (cons 0 "LINE") (cons 10 pup) (cons 11 pdown)))
        (MakeText p1 (strcat "D" (rtos dia 2 0)) (/ dia 3.0) 0.7 0 "BC" nil nil nil nil)
    )
    (princ "Viet boi hochoaivandot-Cadviet.com")
)

 

Bạn thử có đúng ý không nhé.

Tên lệnh TTT

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tue_NV    3.841

Cái này sử dụng Block Dynamic thì ngon. 

Tạo 1 cái hình tròn có đường kính = 1, thêm action scale (parameter Dimlinear), vẽ trục cho block dynamic

Còn cái chữ thì tạo bằng Block ATT có field 

Tạo ra được 1 cái rồi thì copy, muốn sửa thì Ctrol+1, để sửa

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
nguyenbd1    13

đúng như ý của em rồi bác ơi. kam ơn bác hohoaivandot nhieu.. nhưng bác ơi em có vài điều thắc mắc như sau

1. em mún đường tâm là đường center, màu đỏ (tỷ lệ đường này thay đổi theo đường tròn to nhỏ khác nhau)

2. thay vì gõ lệnh ttt => nhập đường kính => chon điểm ta có thể gộp lại 1...

ví dụ: bây giờ vẽ đường tròn d30: thao tác như sau. gõ ttt30 sau dó là chọn 1 điểm để đặt đường tròn đó

3. bề rộng(lineweight của đường tâm là 0.09 bề rộng duong(lineweight) là 0.2 _ đúng như ý của bác pham duy

4. lúc nhập dường kính là số lẻ thì không hiện phần lẻ mà nó làm tròn số.

ví dụ khi em nhập là 4.5  thì nó làm tròn lên là 5 (ý em là giá trị mtext ghi ra màn hình)

dó là những cái em còn thắc mắc..  thế thì đòi hỏi quá đáng nhung thật sụ em adng cần vây xin bác chỉ dùm em cách sửa. thành thật cảm ơn bác

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
nguyenbd1    13

 về vấn đề ở mục 2 .đây là đoạn mã lisp rút ngắn thao tác( trong việc offset) nhờ bác xem dùm**

************ofset thong minh**********************

(if (null ostd) (setq ostd (vlr-command-reactor nil '((:vlr-unknownCommand . offsettudong)))))
;;*********************************************************************
(defun offsettudong (calling-reactor endcommandInfo / Layer_Key ss ang1 ang2 dist en pt0 pt1 vobj)
(setq Layer_Key (strcase (car endcommandInfo)))
(if (wcmatch Layer_Key "0*")
(if (setq dist (atof (vl-string-left-trim "0" Layer_Key)))
(while (setq en (car (entsel "Chon doi tuong offset\n")))
(setq vobj (vlax-ename->vla-object En))
(if (setq pt1 (getpoint "Chon phia offset,[enter] de offset sang 2 ben\n"))
(progn
(setq ang1 (angle (Vlax-curve-getfirstderiv en (vlax-curve-getParamAtPoint en (setq Pt0 (vlax-curve-getClosestPointTo en pt1)))) '(0 0)) ang2 (angle pt0 pt1))
(setq dist (if(or(equal(/(- ang1 ang2)(/ pi 2))1 0.001)(equal(/(- ang1 ang2)(/ pi 2))-3 0.001)) (- dist) dist))
(if (vlax-method-applicable-p vobj 'Offset) (vla-offset vObj dist)))
(and (vlax-method-applicable-p vobj 'Offset) (vla-offset vObj dist) (vla-offset vObj (- dist))))
(setq dist (abs dist)))))
(princ))

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
tien2005    97

đúng như ý của em rồi bác ơi. kam ơn bác hohoaivandot nhieu.. nhưng bác ơi em có vài điều thắc mắc như sau

1. em mún đường tâm là đường center, màu đỏ (tỷ lệ đường này thay đổi theo đường tròn to nhỏ khác nhau)

2. thay vì gõ lệnh ttt => nhập đường kính => chon điểm ta có thể gộp lại 1...

ví dụ: bây giờ vẽ đường tròn d30: thao tác như sau. gõ ttt30 sau dó là chọn 1 điểm để đặt đường tròn đó

3. bề rộng(lineweight của đường tâm là 0.09 bề rộng duong(lineweight) là 0.2 _ đúng như ý của bác pham duy

4. lúc nhập dường kính là số lẻ thì không hiện phần lẻ mà nó làm tròn số.

ví dụ khi em nhập là 4.5  thì nó làm tròn lên là 5 (ý em là giá trị mtext ghi ra màn hình)

dó là những cái em còn thắc mắc..  thế thì đòi hỏi quá đáng nhung thật sụ em adng cần vây xin bác chỉ dùm em cách sửa. thành thật cảm ơn bác

1. tỷ lệ đường (LTSCALE) thay đổi như thế nào, qui luật?

2. không được: làm như vậy sẽ thay đổi tên lệnh, lần sau vẽ đường đương đk khác phải sửa lại lisp

3. Nên tạo 2 layer, trên layer chọn linestyle cho đường tâm, định màu cho layer để in lineweight theo màu hoặc layer => cho biết tên 2 layer

4. OK

 

ps: Bạn nên đưa đề bài rõ ràng và đầy đủ, cahs thực hiện ra sao, .... thì mọi người giúp mới nhanh được, còn không thì mất rất nhiều thời gian

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
nguyenbd1    13

cảm ơn bác đã chỉ  giáo. em xin trình bày rõ như sau ạ:

1.về vấn đề LTSCALE. thì đây chỉ liên quan tới tỉ lệ của đường tâm(dang đường center). yêu cầu đường tròn to thì tỉ lệ này to. còn đường tròn nhỏ thì ngươc lại. tức là tỷ lệ LTSCALE của đường center này luôn tỷ lệ thuận với kích thước đường tròn, sao cho lúc in ra tất cả đường đường tâm đều có dạng center)

2. em nghĩ không phải không làm được mà là hơi khó tý.. với trình độ của các anh em thì không đến nỗi quá khó.. con em thì bó cả 2 tay..

3. không nhất thiết phải tạo 2 layer làm gì chỉ cần dùng lệnh. -ch là có thể làm đươc

4. vấn đề này em cũng đã cố sữa tai dòng (MakeText p1 (strcat "%%c" (rtos dia 2 0)) và sửa thành (MakeText p1 (strcat "%%c" (rtos dia 2 2)). nó lại xuất hiện them 1 chữ số 0 đằng sau khi đường tròn đó là số nguyen. có hàm nào xoá chữ số 0 vô nghĩa sau dấu phay không. và cách lồng vào trường hợp này là ntn a. ai biết chỉ dùm với

sau là lisp mình đã sửa. anh em cho mình ý kiến. và trợ giúp mình với

cụ thể là 3 vấn đề

a."thay vì gõ lệnh ttt => nhập đường kính => chon điểm ta có thể gộp lại 1...

ví dụ: bây giờ vẽ đường tròn d30: thao tác như sau. gõ ttt30 sau dó là chọn 1 điểm để đặt đường tròn đó"

b. vấn đề ở mục 1

c.vấn đề ở mục 4

 

lisp sửa:

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/topic/90791-help-lisp-ve-duong-tron-chi-1-cai-pick/
<P></P>
<P>(defun MakeText (point string Height Wid Ang justify Style Layer Color xdata / Lst); Ang: Radial

    (setq Lst (list '(0 . "TEXT")

                                    (cons 8 (if Layer Layer (getvar "Clayer")))

                                    (cons 62 (if Color Color 7))

                                    (cons 10 point)

                                    (cons 40 Height)

                                    (cons 41 Wid)                                    

                                    (cons 1 string)

                                    (if Ang (cons 50 Ang))

                                    (cons 7 (if Style Style (getvar "Textstyle")))

                                    (cons -3 (if xdata (list xdata) nil)))

                justify (strcase justify))

    (cond ((= justify "C") (setq Lst (append Lst (list (cons 72 1) (cons 11 point)))))

                ((= justify "R") (setq Lst (append Lst (list (cons 72 2) (cons 11 point)))))

                ((= justify "M") (setq Lst (append Lst (list (cons 72 4) (cons 11 point)))))

                ((= justify "TL") (setq Lst (append Lst (list (cons 72 0) (cons 11 point) (cons 73 3)))))

                ((= justify "TC") (setq Lst (append Lst (list (cons 72 1) (cons 11 point) (cons 73 3)))))

                ((= justify "TR") (setq Lst (append Lst (list (cons 72 2) (cons 11 point) (cons 73 3)))))    

                ((= justify "ML") (setq Lst (append Lst (list (cons 72 0) (cons 11 point) (cons 73 2)))))

                ((= justify "MC") (setq Lst (append Lst (list (cons 72 1) (cons 11 point) (cons 73 2)))))

                ((= justify "MR") (setq Lst (append Lst (list (cons 72 2) (cons 11 point) (cons 73 2)))))

                ((= justify "BL") (setq Lst (append Lst (list (cons 72 0) (cons 11 point) (cons 73 1)))))

                ((= justify "BC") (setq Lst (append Lst (list (cons 72 1) (cons 11 point) (cons 73 1)))))

                ((= justify "BR") (setq Lst (append Lst (list (cons 72 2) (cons 11 point) (cons 73 1))))))

    (entmakex Lst));end

;=================================

(defun C:tt(/ dia disadd pleft pright pup pdown p1)

    (if (not dia0) (setq dia0 30.0))

    (setq dia (getdist (strcat "\nNhap duong kinh: <" (rtos dia0 2 2) ">:")))

    (if (not dia)

        (setq dia dia0)

        (setq dia0 dia)

    )

    (setq disadd (/ dia 10.0))

    (while (setq p1 (getpoint "Pick diem"))

        (setq pleft (polar p1 pi (+ (* 0.5 dia) disadd)))

        (setq pright (polar p1 0 (+ (* 0.5 dia) disadd)))

        (setq pup (polar p1 (/ pi 2) (+ (* 0.5 dia) disadd)))

        (setq pdown (polar p1 (/ pi -2) (+ (* 0.5 dia) disadd)))

        (entmake (list (cons 0 "CIRCLE") (cons 10 p1) (cons 40 (/ dia 2.0))))

 (command "CHANGE" "L" "" "Properties"  "Color"  "7" "LW"  "0.2" "" "")
        (entmake (list (cons 0 "LINE") (cons 10 pleft) (cons 11 pright)))
 (command "CHANGE" "L" "" "Properties"  "Color"  "10" "LW"  "0.09" "LT" "CENTERX2" "" "")

        (entmake (list (cons 0 "LINE") (cons 10 pup) (cons 11 pdown)))
 (command "CHANGE" "L" "" "Properties"  "Color"  "10" "LW"  "0.09" "LT" "CENTERX2" "" "")

        (MakeText p1 (strcat "%%c" (rtos dia 2 2)) (/ dia 3.0) 0.6 0 "BC" nil nil nil nil)

    )

    (princ "Viet boi hochoaivandot-Cadviet.com")

)</P>
<P>
</P>

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
tien2005    97

Bạn xem được chưa. LTSCALE = ĐK/100

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/topic/90791-help-lisp-ve-duong-tron-chi-1-cai-pick/

(defun MakeText (point string Height Wid Ang justify Style Layer Color xdata / Lst); Ang: Radial

    (setq Lst (list '(0 . "TEXT")

                                    (cons 8 (if Layer Layer (getvar "Clayer")))

                                    (cons 62 (if Color Color 256))

                                    (cons 10 point)

                                    (cons 40 Height)

                                    (cons 41 Wid)                                    

                                    (cons 1 string)

                                    (if Ang (cons 50 Ang))

                                    (cons 7 (if Style Style (getvar "Textstyle")))

                                    (cons -3 (if xdata (list xdata) nil)))

                justify (strcase justify))

    (cond ((= justify "C") (setq Lst (append Lst (list (cons 72 1) (cons 11 point)))))

                ((= justify "R") (setq Lst (append Lst (list (cons 72 2) (cons 11 point)))))

                ((= justify "M") (setq Lst (append Lst (list (cons 72 4) (cons 11 point)))))

                ((= justify "TL") (setq Lst (append Lst (list (cons 72 0) (cons 11 point) (cons 73 3)))))

                ((= justify "TC") (setq Lst (append Lst (list (cons 72 1) (cons 11 point) (cons 73 3)))))

                ((= justify "TR") (setq Lst (append Lst (list (cons 72 2) (cons 11 point) (cons 73 3)))))    

                ((= justify "ML") (setq Lst (append Lst (list (cons 72 0) (cons 11 point) (cons 73 2)))))

                ((= justify "MC") (setq Lst (append Lst (list (cons 72 1) (cons 11 point) (cons 73 2)))))

                ((= justify "MR") (setq Lst (append Lst (list (cons 72 2) (cons 11 point) (cons 73 2)))))

                ((= justify "BL") (setq Lst (append Lst (list (cons 72 0) (cons 11 point) (cons 73 1)))))

                ((= justify "BC") (setq Lst (append Lst (list (cons 72 1) (cons 11 point) (cons 73 1)))))

                ((= justify "BR") (setq Lst (append Lst (list (cons 72 2) (cons 11 point) (cons 73 1))))))

    (entmakex Lst));end

;=================================

(defun C:ttt(/ dia disadd pleft pright pup pdown p1 dimz ltsc)
  (setq dimz (getvar "dimzin"))

    (if (not dia0) (setq dia0 30.0))

    (setq dia (getdist (strcat "\nNhap duong kinh <" (rtos dia0 2 2) ">:")))

    (if (not dia)

        (setq dia dia0)

        (setq dia0 dia)

    )

    (setq disadd (/ dia 10.0)
	  ltsc (/ dia 100.0);ltscale bang dk/100
	   )
	(setvar "dimzin" 9)
    (while (setq p1 (getpoint "\nPick diem"))

        (setq pleft (polar p1 pi (+ (* 0.5 dia) disadd)))

        (setq pright (polar p1 0 (+ (* 0.5 dia) disadd)))

        (setq pup (polar p1 (/ pi 2) (+ (* 0.5 dia) disadd)))

        (setq pdown (polar p1 (/ pi -2) (+ (* 0.5 dia) disadd)))

        (entmake (list (cons 0 "CIRCLE") (cons 10 p1) (cons 40 (/ dia 2.0))(cons 62 7)(cons 370 20)))

        (entmake (list (cons 0 "LINE") (cons 10 pleft) (cons 11 pright)(cons 6 "CENTER2")(cons 48 ltsc)(cons 62 10)(cons 370 9)))

        (entmake (list (cons 0 "LINE") (cons 10 pup) (cons 11 pdown)(cons 6 "CENTER2")(cons 48 ltsc)(cons 62 10)(cons 370 9)))

        (MakeText p1 (strcat "D" (rtos dia 2 2)) (/ dia 3.0) 0.7 0 "BC" nil nil nil nil)

    )
	(setvar "dimzin" dimz)
    (princ "\nViet boi hochoaivandot-Cadviet.com")
  (princ)

)


 

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Doan Van Ha    2.678

bạn xem lai dùm nó co vẽ đường tâm đâu bạn ơi

Bạn cần vẽ bao nhiêu cái đường tròn như thế? Sao không dùng cách mà anh Tue_NV đề xuất, hay bạn chỉ khoái lisp thôi?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
tien2005    97

bạn xem lai dùm nó co vẽ đường tâm đâu bạn ơi

Bạn tìm đến đoạn (cons 6 "CENTER2") rồi thay tên của linestyle cho đúng với bản vẽ của Bạn thì nó sẽ vẽ đường tâm

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

Đăng nhập để thực hiện theo  

×