QUẢNG CÁO ĐẦU TRANG

Collapse

Thông báo

Collapse
No announcement yet.

Visual Lisp

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • #91
    Ðề: Visual Lisp

    Nguyên văn bởi HOÀNG TRUNG HẬU-00X3C
    Em dùng hàm ssget để chọn một đường thẳng, sau đó em muốn lấy điểm đầu và cuối đoạn thẳng đó. Em đã dùng kết hợp các hàm như sau: (card (assoc '10 (entget (ssget)))): lấy ra tọa độ x nhưng không được , hình như nó chỉ áp dụng cho loại enname là entnext.
    Mong các bác giúp em, lấy ra tọa độ theo kiểu này. Em xin cám ơn!
    Bạn thử sử dụng hàm này xem có giải quyết được vấn đề của bạn chưa?
    (DEFUN C:tdo()
    ;chỉ chọn các đối tượng LINE
    (SETQ ALIST (entget (ssname (SSGET) 0))
    x0 (CADR (ASSOC 10 ALIST))
    y0 (car(CddR (ASSOC 10 ALIST)))
    x1 (CADR (ASSOC 11 ALIST))
    y1 (car(CddR (ASSOC 11 ALIST)))
    )
    (princ (strcat "\nx0 : " (rtos x0 2 3)))
    (princ (strcat "\ny0 : " (rtos y0 2 3)))
    (princ (strcat "\nx1 : " (rtos x1 2 3)))
    (princ (strcat "\ny1 : " (rtos y1 2 3)))
    (princ)
    )

    Ghi chú


    • #92
      Ðề: Visual Lisp

      Nguyên văn bởi HOÀNG TRUNG HẬU-00X3C
      Hơi rườm rà vì em mới học (ko tải file được nên copy thể này, các bác thông cảm):
      ;Ve chan khay va gia co mai ta luy
      (defun c:taluy (/ ss Alist x0 y0 x1 y1 b1 b2 b3 h1 h2 htl mid donvi ble le Alist1 xx yy xx1 yy1 goc gle a b c d x2 y2 pt1 pt2 pt3 pt4 pt5 pt6 pt7 pt8 pt9 pt10 pt11 pt12 pt13 pt14 pt15 pt16 pt17 pt18 pt19 pt20 pt21)
      (setvar "cmdecho" 0)
      .......
      Để việc kiểm tra việc thực hiện đoạn code Auto Lisp dể dàng Bạn nên (setvar "cmdecho" 1) mục đích là sau khi chương trình chạy bị lổi và dừng lại Bạn bấm F2 (text window) để biết chương trình bị lổi ở đoạn lệnh nào, sau khi chương trình hoàn chỉnh thì (setvar "cmdecho" 0)

      Ghi chú


      • #93
        Ðề: Visual Lisp

        Các bác cho em hỏi tý.
        em viết 1 đoạn lisp nhỏ phục vụ cho công việc.
        Em có dùng vòng lặp để vẽ đường đen và đường đỏ theo kiểu :
        1.Nhập cự ly
        2.Nhập cao độ
        3.quay lại 1.
        Nếu cự ly không nhập thì kết thúc lặp
        Nhưng có cái dở là em chưa biết cài undo mark vào đâu cho nó đỡ khổ nếu trót nhập cự ly (khoảng cách lẻ) hoặc cao độ sai
        Mong các bác chỉ giáo.
        Em gửi kèm file mời các bác xài thử.
        (viết trong rừng Cúc Phương)
        Tuổi nhỏ làm việc nhỏ
        Tùy theo sức của mình

        Ghi chú


        • #94
          Ðề: Visual Lisp

          file đính kèm
          Attached Files
          Tuổi nhỏ làm việc nhỏ
          Tùy theo sức của mình

          Ghi chú


          • #95
            Ðề: Visual Lisp

            Gửi anh Nguyễn Lâm:
            Đầu tiên xin cảm ơn anh Lâm đã tận tình giúp đỡ anh em trong diễn đàn.
            Em có một đoạn lisp với mục đích là: Lấy text của một dim rối trừ đi số của tổng các dim khác rối lấy kết quả này gán cho cho một dim thứ 3. Nhưng em viết ra chay không cho ra kết quả. Anh Lâm kiểm tra dùm em thử.
            ";------------------------------------------------------------------------------------------------;
            (defun bocchu (ss1 c) (setq ob (entget (ssname ss1 c))) (setq ts (assoc 1 ob)) (setq a (cdr ts)))
            (defun bocchudt (ob) (setq ts (assoc 1 ob)) (setq a (cdr ts)))
            (defun bocdt (ss1 c) (entget (ssname ss1 c)))
            (defun sothanhchu (num) (if (< num 1) (strcat "0" (rtos num 2 2)) (rtos num 2 2)))
            (defun thaychu (Ob newstr) (setq txtstr (assoc 1 Ob)) (setq newstr (cons 1 newstr)) (entmod (subst newstr txtstr Ob)))
            (defun chonchu (dongnhac) (prompt dongnhac) (ssget '((-4 . "<OR") (0 . "text") (0 . "mtext") (-4 . "OR>"))))
            (defun chon (str) (ssget '((cons(0 str)))))
            (defun bamchon(st) (entget (car (entsel st))))

            ; TRUDIM.LSP (TRU DIM TRONG BAN VE ACAD) ;
            ;;;----------------------------------------------------------------;
            (DEFUN C:TRUDIM()
            (setq a1 (ssget '((0 . "DIMENSION"))))
            (setq n1 (sslength a1))
            (SETQ TONG 0)
            (setq i1 -1)
            (while ( > (- n1 1) i1)
            (setq i1 (+ i1 1))
            (setq at1 (ssname a1 i1))(setq et1 (entget at1))
            (setq TONG (+ TONG ATOF(CDR(assoc 1 et1)) ))
            )
            (setq a2 (ssget '((0 . "DIMENSION"))))
            (setq n2 (sslength a2))
            (SETQ HIEU 0)
            (setq i2 -1)
            (while ( > (- n2 1) i2)
            (setq i2 (+ i2 1))
            (setq at2 (ssname a2 i2))(setq et2 (entget at2))
            (setq HIEU ( ATOF (CDR(assoc 1 et2)) ))
            )
            (SETQ KQ (- TONG HIEU))
            (PRINC "KET QUA TINH RA LA:" TONG)
            (setq A3 (ssget ))
            (THAYCHU A3 (SOTHANHCHU(KQ)))
            )
            ;;;--------------------------------------------------------------------------;"
            Và đây là đoạn lisp dùng để tạo ra lớp có tên là : “hatch”. Rồi khi thực hiện lệnh BH (HS, HT, …) các đối tượng hatch tạo ra tự động được gán cho lớp hatch. Sau khi thực hiện hatch xong thì trả lại lớp cũ. Kết quả chạy của em tạo ra được lớp “hatch” nhưng hoặc đối tượng tạo ra không nằm ở lớp “hatch” hoặc đối tượng nằm ở lớp “hatch” nhưng lệnh không trả về lớp trước đó.
            “;;;--------------------------------------------------------------------------;
            (defun nlh_error (s)
            (cond ((= s "quit / exit abort")(princ))((/= s "Function cancelled")(princ (strcat "\nError: " s))))
            (command "undo" "e")
            (setvar "CMDECHO" nlh_cmdecho)
            (setvar "OSMODE" nlh_osmode)
            (setvar "TEXTSTYLE" nlh_textstyle)
            (setvar "CLAYER" nlh_clayer)
            (setvar "CELTYPE" nlh_celtype)
            (setvar "CECOLOR" nlh_cecolor)
            (setvar "HIGHLIGHT" nlh_highlight)
            (setvar "REGENMODE" nlh_regenmode)
            (setq *error* olderr)
            (princ)
            )
            ;*---------------------------------------------------------------------------;
            (defun nlh_save ()
            (setq olderr *error* *error* nlh_error
            nlh_highlight (getvar "HIGHLIGHT")
            nlh_cecolor (getvar "CECOLOR")
            nlh_celtype (getvar "CELTYPE")
            nlh_clayer (getvar "CLAYER")
            nlh_textstyle (getvar "TEXTSTYLE")
            nlh_osmode (getvar "OSMODE")
            nlh_cmdecho (getvar "CMDECHO")
            nlh_regenmode (getvar "REGENMODE")
            )
            (setvar "CMDECHO" 0)
            (command "undo" "g")
            )
            ;*---------------------------------------------------------------------------;
            (defun nlh_hatchlayer ()
            (setq slist (list (cdr (assoc 2 (tblnext "LAYER" T)))))
            (while (setq sname (cdr (assoc 2 (tblnext "LAYER"))))
            (if (/= sname "")(setq slist (cons sname slist)))
            )
            (if (not (member "hatch" slist))
            (command "LAYER" "M" "hatch" "C" "252" "" "")
            (command "LAYER" "S" "hatch" "")
            )
            )
            ;*---------------------------------------------------------------------------;
            (defun nlh_restoreh ()
            (setvar "CMDECHO" nlh_cmdecho)
            (setvar "OSMODE" nlh_osmode)
            (setvar "TEXTSTYLE" nlh_textstyle)
            (setvar "CLAYER" nlh_clayer)
            (setvar "CELTYPE" nlh_celtype)
            (setvar "CECOLOR" nlh_cecolor)
            (setvar "HIGHLIGHT" nlh_highlight)
            (setvar "REGENMODE" nlh_regenmode)
            (setq *error* olderr olderr nil)
            )
            ; HACTH ;
            ;;;--------------------------------------------------------------------------;
            (defun c:bh () (nlh_save)(nlh_hatchlayer)(command "bhatch")(nlh_restoreh)(princ))
            (defun c:hs() (nlh_save)(nlh_hatchlayer)(command "-bhatch" "p" "s") (nlh_restoreh)(princ))
            (defun c:ht() (nlh_save)(nlh_hatchlayer)(command "-bhatch" "p" "u" "45" "100" "n")(nlh_restoreh) (princ))
            (defun c:hG() (nlh_save)(nlh_hatchlayer)(command "-bhatch" "p" "brick" "500" "0")(nlh_restoreh)(princ))
            (defun c:ha() (nlh_save)(nlh_hatchlayer)(command "-bhatch" "p" "ansi32" "100" "0" )(nlh_restoreh)(princ))
            (defun c:hr() (nlh_save)(nlh_hatchlayer)(command "-bhatch" "p" "ar-conc" "50" "0" )(nlh_restoreh)(princ))
            (defun c:hc() (nlh_save)(nlh_hatchlayer)(command "-bhatch" "p" "ar-sand" "100" "0" ) (nlh_restoreh)(princ))
            (defun c:hB() (nlh_save)(nlh_hatchlayer)(command "-bhatch" "p" "CONC-REINF" "50" "0" ) (nlh_restoreh)(princ))

            ;;;--------------------------------------------------------------------------;
            Xin cảm ơn anh Lâm

            Ghi chú


            • #96
              Ðề: Visual Lisp

              Chào anh Ng Lam !
              Em mới học Lisp và đã thử viết 1 số ứng dụng nho nhỏ, có 1 số điều em muốn nhờ anh chỉ dẫn :
              Em muốn vẽ hatch, sử dụng nentselp để chọn đường bao, nhưng mặt cắt vẽ ra lại chồng lên 1 số đối tượng khác (text, dim..)làm bản vẽ ko đc đẹp lắm. Vậy có cách nào khắc phục điểm này ko anh?
              Trong ứng dụng, em có sử dụng hai vòng lặp ***g nhau để tìm ra phương án theo yêu cầu, nhưng thỉnh thoảng chạy lệnh không ra được kết quả, có phải do số lần lặp quá lớn hay bộ nhớ ko đủ?
              Mong anh giải đáp giúp em. Thks !

              Ghi chú


              • #97
                Ðề: Visual Lisp

                Anh Lam ơi!
                Em cũng đang tự học lập trình autolisp ,em cũng tìm những sách anh nêu ở trên.Em tìm quyển "Ngôn ngữ lập trình AutoLisp (Nguyễn hữu Lộc - Nguyễn Thanh Trung)" nhưng hiện giờ ở những cửa hàng sách chuyên về xây dựng em tìm đều ko có.Em cũng cần tìm sách về VBA in autoCad.
                Vậy anh hay bạn nào có thể biết mua sách này ở đâu tại Hà Nội thì chỉ cho em được ko.
                Anh cho em hỏi thêm Autolisp ,Visual lisp ,và VBA in autoCad khác nhau ở điểm gì.Hiện này cái nào được dùng phổ biến nhất.
                Em xin cảm ơn!
                Last edited by duong2000; 25-07-2006, 04:30 PM.
                ­

                Ghi chú


                • #98
                  Ðề: Visual Lisp

                  Autolisp ,Visual lisp , là 1 còn VBA in autoCad giong như VB vây

                  Ghi chú


                  • #99
                    Ðề: Visual Lisp

                    Anh Lam ơi cho xin hỏi
                    Lúc trước thư viện này mở lên thì có hình trong đó còn bây giờ sử dụng CAD 2007 thì nó ko sử dụng được và hình được gởi kèm theo? Có cách nào khắc phục ko anh Lam? thư viện này Share ko co sourse? Cám ơn
                    Attached Files
                    Last edited by thanhtamct; 12-08-2006, 12:02 AM.

                    Ghi chú


                    • Ðề: Visual Lisp

                      Nguyên văn bởi nglam_adg
                      Nếu muốn TKXD30 cùng lúc chạy trên nhiều phiên bản AutoCAD khác nhau (trên cùng 1 máy) bạn cần cài TKXD30 cho 1 phiên bản CAD bất kỳ đang có. Đăng ký sử dụng chính thức (bằng mã 19741979). Sau khi TKXD30 đã chạy bình thường, bạn vào thư mục C:\TKXD30 và chạy file: Menu_set.exe, chọn thư mục AutoCAD cần cài thêm TKXD30 vào và chọn phần Support Update (trong mục Setup type).
                      Nếu muốn dùng cho AutoCAD 2007, bạn có thể download file cập nhật support tại: http://www.ketcau.com/forum/showthre...?t=1774&page=7
                      Chúc thành công !
                      Anh Lam hiểu lầm ý của em rồi, TKXD 3.0 của anh chạy rất la ok như đây là thu viện khác của người bạn cài cho. Nó chạy trên CAD 2006 được như khi qua CAD 2007 thì chạy được 1 hay la 2 bước là bị như hình trên em đã gởi. ( Nó chạy được trên CAD 2007 được vài bước là hư). Vậy theo anh nó bị vấn đề gì? Cám ơn

                      Ghi chú


                      • Ðề: Visual Lisp

                        Cám ơn Anh Lam nhé.

                        Ghi chú


                        • Ðề: Visual Lisp

                          Tôi Thấy đa Số Các Lisp Mà Các Bạn Giới Thiệu Rất Hay , Nhưng Gần Như Tất Cả đều Có Trong Phần Mềm Của đại Ca Nglam Rồi.các Bạn Tham Khảo Nhé. Nếu Bác Nglam Có Thời Gian Phát Triển Thêm Phần Vẽ Nước Và Vẽ Sơ đồ Nguyên Lý điện Nữa Thì Càng Tốt.về Cách Thức Xây Dựng ý Tưởng Phần Này Thì Em Chưa Nghĩ Ra Nhưng đại Ca Nglam Nếu Có Time Thì Anh Em Cùng Bàn.

                          Ghi chú


                          • Ðề: Visual Lisp

                            Có bác nào có sách điện tử về Visual lisp không ạ? Bản tiếng Việt hoặc tiếng anh đều tốt cả. Nếu bác nào có thì tải lên mạng cho anh em sinh viên, em cảm ơn các bác nhiều!
                            không chỉ biết ước mơ, mà hãy biến ước mơ thành sự thật!

                            Ghi chú


                            • Ðề: Visual Lisp

                              Nguyên văn bởi nglam_adg
                              Tình trạng trên có thể do 2 nguyên nhân:
                              1. Đường dẫn đến chương trình không chính xác. Mặc định, các bản AutoCAD đều nằm trong thư mục Program Files nhưng có tên khác nhau (AutoCAD 2004....2007). Khi viết, có thể người viết đã đặt sẵn đường dẫn cho CAD2006 vì thế khi dùng cho bản 2007 nó không tìm thấy các files liên kết (files hình ảnh *.sld hoặc *.slb).
                              2. Do thiết lập hoặc sử dụng trùng biến ("môi trường" hoặc "toàn cục") với 1 chương trình hay 1 file Lisp nào đó đang sử dụng. Lỗi này thường có hiện tượng chương trình chạy được 1 vài bước hoặc 1 vài lần thì sinh lỗi do các biến nhận sai kiểu giá trị. Kiểm tra và chỉnh sửa lỗi này là ngại nhất !
                              Anh Lam ơi, e mò hoài mà chẳng thấy có hiệu quả gì hết, theo kinh nghiệm của anh thì nên tập trung vào những files này? Anh có thể chỉ giúp em ko? E nghĩ là bị trường hợp 2, có thể bị trùng biến. Cám ơn

                              Ghi chú


                              • Ðề: Chuyên nghiệp

                                Nguyên văn bởi taotao395
                                He he he... anh là dân chuyên nghiệp mà anh đã so sánh tốc độ với một đồng chí làm theo một số chương trình thống kê phổ biến => kết quả anh ăn đứt Nói chung là dân chuyên nghiệp thì cần xác lập phong cách riêng, không nên thay đổi chương trình làm nhiều, anh đánh giá cao tính kế thừa của các bộ hồ sơ, nó tiết kiệm đáng kể công sức. .
                                Còn các đồng chí lập trình cho cái vụ thống kê nên xem thêm mảng excel ứng dụng mạnh hơn nhiều (và không phải dùng máy tính tay hỗ trợ khi thống kê bằng CAD - cho các phép tính phụ : cộng các nhịp cho chiều dài tổng chẳng hạn)
                                DF9úng thế tôi cũng đã từng dùng thử nhưng thực ra chẳng hơn gì nhau vì mỗi ông khi thiết kế có ý tưởng uốn thép khác nhau và phức tạp nên thêm bớt là chuyện bình thường nên khi so sánh tôi thầy Ex của tôi vẫn nhanh hơn và dan năng hơn còn mấy cái nhỏ lẽ kia chuyện nhỏ xin thua font thì lại xấu không đẹp chút nào

                                Ghi chú

                                Working...
                                X