Chuyển đến nội dung
Diễn đàn CADViet

bktec84

Thành viên
  • Số lượng nội dung

    45
  • Đã tham gia

  • Lần ghé thăm cuối

Bài đăng được đăng bởi bktec84


  1. Khi bạn đang quen sử dụng lệnh 3DSOUT ở các phiên bản trước của AutoCAD, bạn sẽ ngỡ ngàng vì đến phiên bản 2007 và 2008 nó không còn nữa.

     

    Nhưng không sao, hãy download file dưới đây về (trong file nén có 2 file là Ac3DSOUTRes.dll và Ac3DSOUT.arx), bung nén ra. dùng lệnh appload để load file Ac3DSOUT.arx lên và sử dụng lệnh 3DSOUT như bình thường.

     

    <a href="http://www.cadviet.com/upfiles/3dsout.zip" target="_blank"><a href="http://www.cadviet.com/upfiles/3dsout.zip" target="_blank"><a href="http://www.cadviet.com/upfiles/3dsout.zip" target="_blank">http://www.cadviet.com/upfiles/3dsout.zip</a></a></a>

    a ơi anh gửi lại cái đường link khác đi đường link này đứt rồi, và có cái dùng cho ban 2010 không vậy anh?


  2. Bạn xem đoạn code dưới đây, những phần tô màu đỏ là những đoạn mã lưu thông số giữa các lần sử dụng lệnh. Mỗi khi dùng lệnh, chương trình sẽ yêu cầu người sử dụng nhập vào giá trị của biến tyledong. Nếu nhấn enter, giá trị mặc định sẽ được chọn (giữ nguyên giá trị cũ). Bạn chạy thử chương trình rồi rút kinh nghiệm cho trường hợp cụ thể của mình. Cách sử dụng đoạn mã dưới đây bạn đọc thêm ở: http://www.cadviet.com/forum/index.php?sho...mp;st=260

    Em không dành về lisp lắm lên ko hiểu và sửa được mong các bác sửa hộ em lisp sau với tỷ lệ nhập lưu lại từ lần nhập trước.

    (defun c:maaa()
    (setvar "cmdecho" 0)
    (setq p1 nil p2 nil gmd nil)
    (command "style" "Dientich" "Vntime.shx,vn1.shx" 0 "0.8" 0.0 "" "" "")
    (command "layer" "make" "Text" "c" "3" "" "")
     (setq p1 (getpoint"\Diem dau cua mai doc: "))
     (setq p2 (getpoint"\Diem thu 2 cua mai doc: "))
    (setvar "OSMODE" 0)
     (setq gmd (angle p1 p2))
     (setq sm (sin gmd))
     (setq cm (cos gmd))
     (setq hsm (abs (/ cm sm)))
    (initget 1 "Yes No")
    (if (= "Yes" (getkword "\nCo ghi mai doc khong? : "))
    (progn
    (setq tl (getreal"\nNhap ty le <1>: "))
    (if tl null (setq tl 1))
    (setq diem (list (- (car p1) (* 2 tl sm)) (+ (cadr p1) (* 2 tl cm))))
    (setq ch (* 2 tl))
    (setq nghieng (* gmd 57.29577951))
    (cond 
    ((> hsm 1)
    (setq inm (strcat "m=" (rtos hsm 2 2) ""))
    (command "text" "j" "MC" diem ch nghieng inm "")  
    )
    ((< hsm 1)
    (setq inm (strcat "m=" (rtos hsm 2 2) ""))
    (command "text" "j" "MC" diem ch nghieng inm "")
    )
    )
    )
    (progn
    (cond 
    ((> hsm 1)
    (setq inm (strcat "m=" (rtos hsm 2 4) ""))
    (princ "\nHe so mai doc la: ")(princ inm)
    )
    ((< hsm 1)
    (setq inm (strcat "m=" (rtos hsm 2 4) ""))
    (princ "\nHe so mai doc la: ")(princ inm)
    )
    )
    )
    )
    (command "-osnap" "end,mid,nod,int,per,app,nea")
    (command "ucs" "w" "")
    (command "-layer" "s" "0" "")
    )
    


  3. Jin vừa hoàn thành xong phiên bản 4.0 chạy ổn định hơn bản 3.1, điểm khác biệt là dùng VBA nên bạn phải upload cả 2 file CTK.lsp và DRAS.dvb

     

    Link: CTK 4.0

    Xin lỗi bác vì sự bất tiện này: Lúc trước viết mải quá lên viết nhầm công thức tính số thép đai, công thức tính của nó như sau:

    số thép đai=1+(L-2a)/@.

    Trong đó: L- chiều dài dầm

    a- chiều dầy lớp bê tông bảo vệ.

    @- Khoảng cách giữa các thép đai, thường @=200mm.

    Chúc bác vui khoẻ, hoàn thành tốt cái CTK này để anh em dân kỹ thuật có 1 công cụ làm việc hiệu quả.


  4. Jin vừa hoàn thành xong phiên bản 4.0 chạy ổn định hơn bản 3.1, điểm khác biệt là dùng VBA nên bạn phải upload cả 2 file CTK.lsp và DRAS.dvb

     

    Link: CTK 4.0

    Sau một thời gian tìm hiểu em có 1 nhận xét như thế này:

    - Tất cả các chức năng trong tool không hoạt động.

    - Phần dầm đơn: Cái này quả thật rất hay, nhưng em phát hiện ra 1 lỗi đó là khi nhập @=200 chẳng hạn thì số lượng thép đai tính ra sai, do công thức anh đưa vào em nghĩ có vấn đề. Bên em thiết kế thì: số thép đai = 1+ L/200 và làm tròn lên, dù đó là 0.1 hay 0.2. Ví dụ: số thép đai tính ra là 45.1 hay 45.9 thì đều lấy tròn thành 46. Mong anh sửa lại cái này.

    - Theo em phần trình bày loại thanh thép thì lên đổi thứ tự của 3 thanh: 3,4,5 thành 3,5,4 hoặc 4,5,3 do như vậy thì chiều dài thanh trừ đi sẽ lần lượt là 3a, 2a, a hoặc cách 2 là a, 2a ,3a. Như vậy xẽ thuật tiện hơn.

    Và cũng trong trình bày thanh thép anh lên làm sáng tỏ chiều dài các đoạn của thanh lên thanh mô hình lúc lựa chọn loại thanh.

    Đó là các ý kiến của em. Mong anh tiếp thu và chỉnh sửa lại cho hoàn thiện. Thank!


  5. Jin vừa hoàn thành xong phiên bản 4.0 chạy ổn định hơn bản 3.1, điểm khác biệt là dùng VBA nên bạn phải upload cả 2 file CTK.lsp và DRAS.dvb

     

    Link: CTK 4.0

    Anh kiểm tra giúp, và giải thích hộ em 4 điểm sau:

    1- Trong phiên bản này tại sao trong Tool: mất chức năng: xoa cau kien, Copy cau kien tu file khac, option.

    2-chức năng Joint: Khi có 1 bảng thống kê muốn joint với 1 bảng khác vào Joint/ tìm đến đường dẫn file muốn nối/ Chỉ hiện file muốn nối, file gốc biến mất.

    3- Sự khác nhau của các thanh thép (1;2); (4;5;6); (8;9;10).

    4- Lớp bảo vệ ở đây có tác dụng gì?


  6. Em nghi anh nhầm khái niệm HÀM và LỆNH rồi. em nói là lệnh GETSEL trong Express cơ chứ không fải là hàm trong Lisp. còn líp mà anh chỉnh sửa như trên là ok rồi nhưng ý em nói là nó không chạy được. nó chạy đúng đến lúc phân biệt xong đối tượng nhưng không hiên thị được ở kết quả hàm Prin. Mong anh test lại hộ.


  7. Thôi phần đếm block thì bác cứ để em dựa vào code của bác rồi phát triển lên.Thank bác!

    Nhưng còn ý 3 của em là em hỏi cái lệnh GETSEL trong cad( mặc định có rồi). chứ không phải hàm SSGET trong code của anh anh đâu. Em muốn anh phát triển lệnh GETSEL trong cad lên vì lệnh này trong cad mặc định là chọn tất cả các đối tượng trong bản vẽ với điều kiện là cùng layer và cùng loại đối tượng. Tuy nhiên nó không cho chọn đối tượng theo vùng, Mong anh phát triên lên hộ em với.


  8. Chào anh!

    Thực ra lisp của anh đã đáp ứng được nhu cầu của em rồi nhưng qua kiểm tra em nhận thấy một vài ý như sau:

    - Lisp thật ra chỉ dựa vào tên của block để nhận dạng chứ không dựa vào các đặc tính khác như: block đã bị quay, hay đã scale lên x lần nào đó... như lúc đầu nói em muốn đếm những đối tượng GIỐNG HỆT như đối tượng mẫu.

    - anh có thể mở rộng đếm số đối tượng với yêu cầu trên nhưng đối tượng là line, pline, spline, c, acr được không ah? (ý này theo em hơi khó).

    - Anh có thể phát triển dùm em cái lệnh GETSEL trong cad được không? lệnh này chọn toàn bộ đối tượng trong bản vẽ, trong khi em chỉ cần chọn đối tượng trong 1 vùng.

    Mong anh sửa dùm cài lisp này và hộ em cái ý thứ 3 nhé. Thank bác lần nữa!


  9. Sau khi tìm kiếm trên diễn đàn về việc thống kê và đếm số đối tượng, cũng như đã từng sử dụng nhiều lần các lệnh qselect lệnh filter; getsel; nhận thấy mỗi phương pháp đều có cái hay của nó, tìm hoài không thấy cái gì có thể làm giúp mình vấn đề sau, lên nhờ các bác viết dùm cái lisp thực hiện yêu cầu: Đếm số đối thượng.

    Lisp làm theo trình tự sau:

    - Đánh lệnh.

    - Chọn đối tượng mẫu: block.

    - Xóa block trùng nhau.

    - Chọn vùng tìm kiếm.

    - hiện thị kết quả: "Số lượng block là: x"

    Chú ý: không cần hiển thị trên màn hình dòng kết quả là "Số luợng block là:x" mà chỉ cần hiện thị ở phần trên dòng command thôi. Cảm ơn các anh.

    Nếu bác nào có thuật toán hay thì có thể tổng quát lên như sau:

    - Chọn đối tượng mẫu.

    - Chọn vùng tìm kiếm.

    - Xóa đối tượng trùng nhau.

    - hiện thị kết quả: "số lượg là:x"

    Với điều kiện tìm kiếm là các đối tượng phải giống nhau y hệt. tức là các đối tượng sinh ra từ lệnh copy.

    • Vote tăng 1

  10. Đây là đoạn code em đã sửa, chạy với điểm chỉ mũi tên là điểm thì chạy Ok. Nhưng với đối tượng là block thì lúc được lúc không. em thấy nó không ổn định, như trình độ của em có hạn không biết sao nó lại như vậy. Mong các anh xem xét và sửa lại dùm em. Chân thành cảm ơn!

    (defun c:tday ()

    (setq Pt0 (getpoint "\nChon diem chen: ")

    I -1 J -1)

    (initget 1 "T D")

    (setq KeyW (getkword "Hay chon doi tuong hoac diem (doiTuong hoac Diem) "))

    (if (= KeyW "T")

    (progn

    (prompt "\nChon cac thanh thep can chu thich: ")

    (setq ss (ssget '((-4 . "")(0 . "INSERT") (-4 . "OR>")))

    SSLen (sslength ss))

    (while (setq Ent (ssname ss (setq I (1+ I))))

    (if (= (cdr (assoc 0 (entget ent))) "BLOCK")

    (progn

    (setq Pt1 (cdr (nth 14 (entget Ent)))

    Pt2 (cdr (nth 18 (entget Ent)))

    Dis (distance Pt1 Pt2)

    Ang (angle Pt1 Pt2)

    Center (polar Pt1 Ang (/ Dis 2))

    )

    )

    (setq Center (cdr (assoc 10 (entget ent))))

    )

    (command "qleader" Center Pt0)

    )

    )

    (progn

    (setq LstPoint '())

    (while (setq Pt (getpoint Pt0 "\nChon diem dau: "))

    (command "qleader" Pt Pt0)

    )

    )

    )

    )


  11. Cảm ơn Bạn nhiều, bây giờ mới tỉnh ra và nhìn lại, lúc đó tư duy chỉ nghi như khi chọn nhiều đối tượng.

    Sửa lại như bạn nhìn rất chuyên nghiệp vì ta sẽ có cái "dây chun" khi chọn điểm.

    0k cảm ơn các anh trên diễn đàn đã giúp em. Em đã chỉnh sửa lại theo ý của anh TueNV và cũng đã đổi đổi tượng là LWPOLYLINE sang BLOCK và đã thành công.

    Một lần nữa xin chân thành cảm ơn.


  12. Anh ơi em đã test với kiểu nhập là chọn Điểm thì kết quả ok.

    Khi kiểm tra với đối tượng là thanh thép tròn là block thì kết quả không đúng anh ah. Theo em thì hình như đối tượng của anh là LWPOLYLINE thì lisp chạy mới đúng, mà thực tế việc em cần đối tượng là BLOCK với điểm trèn là điểm chèn của BLOCK.

    Mong anh sửa lại giúp.

    Cảm ơn anh rất nhiều.


  13. Em đã chỉnh như anh nói như nó báo nỗi như trên đấy, anh xem lại giúp em nhé. Và anh sửa như yêu cầu trên hộ em. Và nếu được thì theo em là anh để song song cả 2 cách đấy là:

    cho người sử dụng 2 sự lựa chọn: sau khi báo cho người sử dụng biết, là chọn đối tượng, thi thêm vào 1 dòng nữa:

    Chọn theo kiểu đối tượng hoặc là theo điểm(D,P)

    người sử dụng đáp là kiểu đối tượng thì lại hỏi tiếp:

    - chọn đối tượng mẫu (là block hoặc donut) (điểm chọn là điểm chèn của block hoặc là tâm donut).

    Nếu đáp là P thì cho người dùng tự tích các điểm.

    Chân thành cảm ơn anh. Mong anh sửa dùm.


  14. Không biết bạn vẽ các thanh thép bằng đối tượng gì, tôi hay vẽ bằng Donut nên đã làm theo cách này.

    - Chọn điểm chèn

    - Chọn các Donut có cùng ký hiệu

    - Chèn Leader.

    (defun c:ChuThichThep()
     (setq Pt0 (getpoint "\nChon diem chen: "))
     (prompt "\nChon cac thanh thep can chu thich: ")
     (setq ss (ssget '((-4 . "")))
    SSLen (sslength ss)
    I -1
    J -1)
     (while (setq DoNut (ssname ss (setq I (1+ I))))
    (setq Pt1 (cdr (nth 14 (entget donut)))
      Pt2 (cdr (nth 18 (entget donut)))
      Dis (distance Pt1 Pt2)
      Ang (angle Pt1 Pt2)
      Center (polar Pt1 Ang (/ Dis 2))
      PtIns (polar Center (angle Center Pt0) Dis))
    (command "qleader" PtIns Pt0)
     )
    )

    Lưu ý, setting của qleader có Number of points = 2, Annotation = none

    Cảm ơn anh nhé. Nhưng ý em là điểm đầu mình chọn là điểm gốc, sau đó chọn các điểm tiếp theo là điểm muốn chỉ đến vị trí thanh thép, vì có khi đối tượng là Line, polyline, block chẩng hạn.

    ah mà cai lisp của anh em đã chạy thử rồi nó báo lỗi anh ah. như sau:

    Command: CHUTHICHTHEP

    Chon diem chen:

    Chon cac thanh thep can chu thich:

    Select objects: 1 found

    Select objects: 1 found, 2 total

    Select objects: 1 found, 3 total

    Select objects: 1 found, 4 total

    Select objects: 1 found, 5 total

    Select objects:

    ; error: bad argument type: 2D/3D point: 0

    đây là quá trình em thực hiện như lỗi đúng không anh.

    Mong anh giup em theo yêu câu trên của em nhé.


  15. Chào bạn bktec84,

    Chưa hiểu bạn muốn yêu cầu gì thì làm sao mà giúp. Bạn hãy trình bày cụ thể hơn cái kết quả mà bạn muốn có, Bản vẽ bạn gửi chả nói lên điều gì cả.

    Cảm ơn các anh đã quan tâm. Ý của em muốn như thế này: có rất nhiều thanh thép có cùng 1 ký hiệu. Nếu dùng lệnh Leader bình thường thì khi nhập phải nhập điểm đầu điểm cuối, như vậy có n thanh thép thì ta phải nhập 2n điểm đầu( vị trí thanh thép) và điểm cuối (điểm ghi tên thanh thép). Nhưng điểm cuối luôn trùng nhau, lên như vậy ta phí mất (n-1) lần nhập điểm đó.

    Vì vậy em muốn các anh viết giúp em cái lisp làm việc như sau:

    - đánh tên lệnh.

    - Chọn điểm điểm cuối (điểm ghi tên thanh thép).

    - chọn các điểm đầu ( vị trí các thanh thép).

    - ấn phím cách hoặc enter để kết thúc lệnh.

    (Chú ý là các đường leader chỉ cần có 2 điểm là điểm đầu điểm cuối, không cần ghi Mtext hay text vì ký hiệu thép em đã có block.)

    Cảm ơn các anh!


  16. Nhờ các bác viết hộ lisp thực hiện yêu cầu sau:

    Bản vẽ đã có các thanh thép. Giờ viết ghi chú cho các thanh thép. Em muốn các bác viết hộ em để thực hiện như sau:

    - Nhập tên lệnh.

    - Chọn điểm đầu để viết chỉ dẫn.

    - Chọn các điểm tiếp theo.

    - Enter hoặc ấn cách để kết thúc lệnh.

    - Hình vẽ minh họa như sau:

    http://www.cadviet.com/upfiles/2/diemtam.jpg

    Các cao thủ của diễn đàn mình đâu hết rồi. Giúp em chút đi, em đang cần giấp.


  17. Nhờ các bác viết hộ lisp thực hiện yêu cầu sau:

    Bản vẽ đã có các thanh thép. Giờ viết ghi chú cho các thanh thép. Em muốn các bác viết hộ em để thực hiện như sau:

    - Nhập tên lệnh.

    - Chọn điểm đầu để viết chỉ dẫn.

    - Chọn các điểm tiếp theo.

    - Enter hoặc ấn cách để kết thúc lệnh.

    - Hình vẽ minh họa như sau:

    http://www.cadviet.com/upfiles/2/diemtam.jpg

×