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

  • Ðề: Visual Lisp

    Nguyên văn bởi tien2005
    Cám ơn Anh Lam đã chỉ cách lấy các điểm tạo nên 1 polyline. Trong thời gian đó Tôi cũng đã tìm được cách lấy các điểm đó (đoạn code bên dưới), mong Anh Lam xem và cho ý kiến về đoạn code này.
    Làm như thế này bạn ơi!

    (defun c:coord ( / e r)

        (setq e (entget (car (entsel))))
        ;get the parent entity list

        (setq r 1)
        ;set loop control number to 1

        (while r
        ;while loop control is not nil, carry on looping

            (setq e (entget (entnext (cdr (car e)))))
            ;get the vertex entity list

            (if (/= (cdr (assoc 0 e)) "SEQEND")
            ;if it is not "end-of-sequence

            (progn
            ;do the following
                (princ (cdr (assoc 10 e)))
                ;print the co-ordinates

             );progn

            (setq r nil)
            ;if end of sequence, stop looping

             );if

         );while

    );

    entnext cho phép bạn lấy đoạn thẳng tiếp theo trong Polyline
    Last edited by haivt; 05-11-2006, 08:31 PM.
    Eng. Võ Triều Hải
    Đến từ: Bachkhoadanang.net

    Ghi chú


    • Ðề: Visual Lisp

      Vì tọa độ các điểm trong LWPOLYLINE kiểu mới được đánh dấu là (10 x y) nên tôi xin trình bày phương pháp lấy tọa độ điểm trong LWPOLYLINE như sau:
      1. Chọn PLINE bằng entsel (setq ent (entsel))
      2. Lấy mã DXF bằng entget (setq ent1 (entget (car ent)))
      3. Lấy chiều dài list DXF đó bằng hàm length (setq n (length ent1))
      4. Tạo 1 list trống (setq elst (list))
      5. Dùng hàm while (< i n) để nhặt các list con có mã 10 ở đầu (if (= (car (nth i ent1)) 10) thì append (cdr (nth i ent1)) vào elst
      Như vậy bạn đã có 1 lst chứa danh sách các điểm trong PLINE rồi.

      Ghi chú


      • Ðề: Visual Lisp

        có ai có Visual Lisp nào có thể vẽ khung nhà có bố trí thép và các mặt cắt ko cho tui xin với vẽ thủ công mệt quá

        Ghi chú


        • Ðề: Visual Lisp

          Bạn xin vậy không biết đâu mà cho cả.

          Ghi chú


          • Ðề: Visual Lisp

            co goi nao dung duoc thi cho

            Ghi chú


            • Ðề: Visual Lisp

              cac anh co the chi cho em cach lay ra dien tich cua doi tuong vua duoc hatch in ra man hinh. lay du lieu dien tich dua vai hatch

              Ghi chú


              • Ðề: Visual Lisp

                Anh Lam ơi, cho Mình hỏi Anh Lam có biết thuật toán lấy cao độ 1 điểm bất kỳ của lưới tam giác mà chương trình nova xuất ra không. Nếu Anh Lam biết chỉ mình với nha, cảm ơn nhiều.

                Ghi chú


                • Ðề: Visual Lisp

                  Nguyên văn bởi Honey
                  Anh Lam ơi, cho Mình hỏi Anh Lam có biết thuật toán lấy cao độ 1 điểm bất kỳ của lưới tam giác mà chương trình nova xuất ra không. Nếu Anh Lam biết chỉ mình với nha, cảm ơn nhiều.
                  Thật ra thì mình không sử dụng nova nên không biết dữ liệu của nó như thế nào. Nếu Bạn muốn lấy cao độ 1 điểm bất kỳ thuộc mặt phẳng tạo bởi lưới tam giác thì Bạn có thể làm như sau:
                  - Viết phương trình mặt phẳng của lưới tam giác
                  - Lấy tọa độ của điểm cần xác định rồi thay vào phương trình mp sẽ tính được cao độ
                  Cách xác định phương trình mp chủ yếu là dùng định thức cấp 2. Sau đây là đoạn code mẫu của Tôi để tính toán san nền Bạn có thể tham khảo:


                  ;************dinh thuc cap 2******
                  (defun DTC2 (A1 A2 B1 B2) (- (* A1 B2) (* A2 B1)))


                  ;;***LAP CAC HE SO A B C D CUAA PHUONG TRINH MAT PHANG*****
                  (setq HSA (DTC2 (- #Y2 #Y1) (- #Y3 #Y1) (- #Z2 #Z1) (- #Z3 #Z1)))
                  (setq HSB (* (DTC2 (- #X2 #X1) (- #X3 #X1) (- #Z2 #Z1) (- #Z3 #Z1)) -1))
                  (setq HSC (DTC2 (- #X2 #X1) (- #X3 #X1) (- #Y2 #Y1) (- #Y3 #Y1)))
                  (setq HSD (* (+ (* HSA #X1) (* HSB #Y1) (* HSC #Z1)) -1))

                  (setq CDi (* (/ (+ (* HSA Xi) (* HSB Yi) HSD) HSC) -1))

                  Trong đó #x1, #y1, ...., #y3, #z3 là tọa độ của các điểm khống chế lưới tam giác, xi, yi là tọa độ mặt phẳng của điểm cần xác định. CDi là cao độ cần xác định.
                  Chúc Bạn thành công

                  Ghi chú


                  • Ðề: Visual Lisp

                    Xin lỗi bạn nha, vì mình chưa nói rõ nên bạn không hiệu Lưới không gian tam giác trong nova là lưới gồm các tam giác vẽ bằng pline. Cái minh không biết là làm thế nào để nhận biết diểm mình chọn nằm trong tam giác nào và cách chọn tam giác đó để lấy cao độ các điểm chuẩn nội sụy Nếu bạn biết chỉ mình giụp Cảm ơn nhiều, chúc bạn thành cộng

                    Ghi chú


                    • Ðề: Visual Lisp

                      Nguyên văn bởi tien2005
                      Thật ra thì mình không sử dụng nova nên không biết dữ liệu của nó như thế nào. Nếu Bạn muốn lấy cao độ 1 điểm bất kỳ thuộc mặt phẳng tạo bởi lưới tam giác thì Bạn có thể làm như sau:
                      - Viết phương trình mặt phẳng của lưới tam giác
                      - Lấy tọa độ của điểm cần xác định rồi thay vào phương trình mp sẽ tính được cao độ
                      Cách xác định phương trình mp chủ yếu là dùng định thức cấp 2. Sau đây là đoạn code mẫu của Tôi để tính toán san nền Bạn có thể tham khảo:


                      ;************dinh thuc cap 2******
                      (defun DTC2 (A1 A2 B1 B2) (- (* A1 B2) (* A2 B1)))


                      ;;***LAP CAC HE SO A B C D CUAA PHUONG TRINH MAT PHANG*****
                      (setq HSA (DTC2 (- #Y2 #Y1) (- #Y3 #Y1) (- #Z2 #Z1) (- #Z3 #Z1)))
                      (setq HSB (* (DTC2 (- #X2 #X1) (- #X3 #X1) (- #Z2 #Z1) (- #Z3 #Z1)) -1))
                      (setq HSC (DTC2 (- #X2 #X1) (- #X3 #X1) (- #Y2 #Y1) (- #Y3 #Y1)))
                      (setq HSD (* (+ (* HSA #X1) (* HSB #Y1) (* HSC #Z1)) -1))

                      (setq CDi (* (/ (+ (* HSA Xi) (* HSB Yi) HSD) HSC) -1))

                      Trong đó #x1, #y1, ...., #y3, #z3 là tọa độ của các điểm khống chế lưới tam giác, xi, yi là tọa độ mặt phẳng của điểm cần xác định. CDi là cao độ cần xác định.
                      Chúc Bạn thành công
                      Bạn làm ơn cho tôi hỏi đoạn mã lisp để vẽ mạng lưới tam giác từ tệp số liệu XYZ như thế nào nhỉ?

                      Ghi chú


                      • Ðề: Visual Lisp

                        trong cad 06 07 có lệnh dtexted để sửa text rất nhanh.Nhưng với cad 04 thì sửa text rất vất vả.Vậy có anh nào có lips để sửa text cho cad 2004 ko vậy,Em cảm ơn nhiều.
                        http://www.ketcau.com

                        Ghi chú


                        • Ðề: Visual Lisp

                          Chào các cao thủ trong diễn đàn! Em đang tập toẹ viết mấy cái lisp mà vất vả quá, tìm mấy cuốn sách đọc thì thấy nội dung cư na ná nhau, sách dịch nên đọc nhiều lúc tức như bò đá, đọc 1 câu dài dằng dặc đọc xong chẳng hiểu nó viết cái gì?? .
                          Em có một vài thắc mắc mong được các anh giải đáp dùm em:
                          1. Em viết đoạn mã sau:
                          (defun c:tinh()
                          (setq pd (getpoint "\nPls pick a point:"))
                          (Setq a (getreal "\nPl enter a:"))
                          (Setq b (getreal "\nPl enter b:"))
                          (setq c (+ a b))
                          (command "text" "j" "C" pd "2" "" c)
                          )
                          không hiểu sao đến khi in ra màn hình được một đống toàn số không đằng sau for Ex: a=3, b=5 Kq in trên màn hình "8.00000000" có cách nào khắc phục không ạ? (không muốn dùng biến integer)
                          2. Một câu liên quan: cấu trúc hàm Round (trong lisp) như thế nào? và có hàm roundup, rounddown như trong EXCEL không ạ?
                          Mong các bác giải đáp giúp, em xin cảm ơn!
                          Last edited by thanhnhan_kt; 03-01-2008, 12:06 AM.

                          Ghi chú


                          • Ðề: Visual Lisp

                            Nguyên văn bởi thanhnhan_kt
                            Chào các cao thủ trong diễn đàn! Em đang tập toẹ viết mấy cái lisp mà vất vả quá, tìm mấy cuốn sách đọc thì thấy nội dung cư na ná nhau, sách dịch nên đọc nhiều lúc tức như bò đá, đọc 1 câu dài dằng dặc đọc xong chẳng hiểu nó viết cái gì?? .
                            Em có một vài thắc mắc mong được các anh giải đáp dùm em:
                            1. Em viết đoạn mã sau:
                            (defun c:tinh()
                            (setq pd (getpoint "\nPls pick a point:"))
                            (Setq a (getreal "\nPl enter a:"))
                            (Setq b (getreal "\nPl enter b:"))
                            (setq c (+ a b))
                            (command "text" "j" "C" pd "2" "" c)
                            )
                            không hiểu sao đến khi in ra màn hình được một đống toàn số không đằng sau for Ex: a=3, b=5 Kq in trên màn hình "8.00000000" có cách nào khắc phục không ạ? (không muốn dùng biến integer)
                            2. Một câu liên quan: cấu trúc hàm Round (trong lisp) như thế nào? và có hàm roundup, rounddown như trong EXCEL không ạ?
                            Mong các bác giải đáp giúp, em xin cảm ơn!
                            Chào ban sau khi nghien cứu mình đã sửa lại như thế này
                            (defun c:tinh()
                            (setq pd (getpoint "\nPls pick a point:"))
                            (Setq a (getreal "\nPl enter a:"))
                            (Setq b (getreal "\nPl enter b:"))
                            (setq c (+ a b))
                            (setq c (strcat (rtos c 2 1)))
                            (command "text" "j" "C" pd "2" "" c))

                            Bạn tham khảo trong help của visualisp
                            (rtos, value [, mode, precision])
                            Edits the given value as a real number in the format specified by the mode and precision as defined by the analogous AutoLISP function. If mode and precision are omitted, it uses the current values selected with the UNITS command.

                            Thân ái chào bạn chúc vui vẻ
                            Last edited by Autocad2008; 04-01-2008, 08:10 PM.

                            Ghi chú


                            • Ðề: Visual Lisp

                              Thật ra vấn đề của bạn kô thể giải quyết triệt để bằng hàm rtos được. Lỗi trên là do biến hệ thống dimzin trong AutoCAD. Bạn tham khảo thêm trong phần Help của AutoCAD sẽ hiểu cơ chế và tính năng của biến này. LISP và AutoCAD system variable có liên hệ mật thiết nhau.

                              Thân.

                              Ghi chú


                              • Ðề: Visual Lisp

                                Nguyên văn bởi Autocad2008
                                Chào ban sau khi nghien cứu mình đã sửa lại như thế này
                                (defun c:tinh()
                                (setq pd (getpoint "\nPls pick a point:"))
                                (Setq a (getreal "\nPl enter a:"))
                                (Setq b (getreal "\nPl enter b:"))
                                (setq c (+ a b))
                                (setq c (strcat (rtos c 2 1)))
                                (command "text" "j" "C" pd "2" "" c))

                                Bạn tham khảo trong help của visualisp
                                (rtos, value [, mode, precision])
                                Edits the given value as a real number in the format specified by the mode and precision as defined by the analogous AutoLISP function. If mode and precision are omitted, it uses the current values selected with the UNITS command.

                                Thân ái chào bạn chúc vui vẻ
                                Cảm ơn bác! đây là vấn đề đang làm em đau đầu mấy hôm nay! bác cho em hoi thêm 1 câu là có cách nào để làm tròn lên (roundup) 1 biến không, em đang rất cần,
                                Chúc bác vui khỏe!
                                Last edited by thanhnhan_kt; 04-01-2008, 09:24 PM.

                                Ghi chú

                                Working...
                                X