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

Chỉnh sửa code Autolisp

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

Mình có viết một đoạn code vẽ đường dòng Polyline nhưng hiện tại chạy bị báo lỗi. Nhờ các Anh chị trên diễn đàn có thể kiểm tra và chỉnh sửa giúp với ạ!

(defun c:VePLL2()
(vl-load-com)
;;;(setq acdoc (vla-get-activedocument (vlax-get-acad-object)))
(setq os (getvar "osmode"))
(setvar "osmode" 0)
(prompt "\nChon 2 duong dong va mot text mau")
(setq ssl (acet-ss-to-list (ssget (list (cons 0 "line,text")))))
(setq ssl (vl-sort ssl '(lambda (x y) (< (cadr (assoc 10 (entget x))) (cadr (assoc 10 (entget y)))))))
(setq LineDong1 (vlax-ename->vla-object (nth 0 ssl)))
(setq TMau1 (vla-get-layer LineDong1))
(setq Y1 (cadr (vlax-curve-getStartPoint Linedong1)));;;Diem cuoi duong dong 1
(setq Y2 (cadr (vlax-curve-getEndPoint Linedong1)));;;;;Diem dau duong dong 1
(setq Y12 (/ (+ Y1 Y2) 2))
(setq LineDong2 (vlax-ename->vla-object (nth 2 SSLISTY)))
(setq TMau2 (vla-get-layer LineDong2))
(setq Y3 (cadr (vlax-curve-getStartPoint Linedong2)));;Diem dau duong dong 2
(setq Y4 (cadr (vlax-curve-getEndPoint Linedong2)));;;Diem cuoi duong dong 2
(setq Y34 (/ (+ Y3 Y4) 2))
(setq TMAU (vlax-ename->vla-object (nth 1 SSLISTY))) 
(setq Z4 (distof (vla-get-textstring TMAU) 2));;;;chuyen chuoi sang so
(setq LMAUTEXT (vla-get-layer TMAU));;;;ma mau cua text
(setq HTMAU (DXFCN 40 (entget (nth 1 SSLISTY))));;;;chieu cao text
(setq ROTATION (DXFCN 50 (entget (nth 1 SSLISTY))));;;goc quay cua text
(setq Y5 (cadr (DXFCN 11 (entget (nth 1 SSLISTY)))));;tung do cua text
(prompt "\nCh\U+1ECDn polyline c\U+1EA7n \U+0111i\U+1EC1n \U+0111\U+01B0\U+1E55ng dóng")
(setq SSPL (ssget (list (cons 0 "*LINE"))))
(setq SSEPL (ssname  SSPL 0))
;;;ACET-GEOM-VERTEX-LIST(setq e (ssname ssg i))(setq L (ACET-GEOM-VERTEX-LIST? e)
(setq PL (ACET-GEOM-VERTEX-LIST SSEPL))
(setq LEN (length PL))
  (setq i 0)
(progn
(repeat LEN
(setq PT0 (nth i PL))
(setq PT6 (NTH (1+ i) PL))
;;;(setq PT0 (nth (setq LEN (1- LEN)) PL))
(setq X0 (car PT0))
(setq Y0 (cadr PT0))
(setq PT1 (list X0 Y1 0))
(setq PT2 (list X0 Y2 0))
(setq PT3 (list X0 Y4 0))
 (setq PT4 (LIST X0 Y5 0))
(setq CD (+ Z4 (- Y0 Y3)));;;;(setq L (+ cdd (- (cadr p2) (cadr p1))))
(command "layer" "set" TMau1 "")
(command "line" PT1 PT2 "")
;;;(command "copy" TMAU "" (list XM Y1 0) PT1)
(command "layer"  "set" TMau2 "")
(command "line" PT3 PT0 "")
(command "Text" "J" "MR" PT4 HTMAU 90 (Rtos CD 2 2) "")
(setq XTB (/ (+ (Car PT0) (Car PT6)) 2))
            (setq PT7 (LIST XTB Y12 0))
              (setq KC (ABS (- (Car PT0) (Car PT6))))
            (command "layer" "set" LMAUTEXT "")
            (command "Text" "J" "MC" PT7 (getvar 'textsize) 0 (Rtos KC 2 2) "")
  (setq i (1+ i))

    );;;repeat 1

  )
  (setvar "osmode" 16383)
)

Quote

 

 

  • Vote giảm 2

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

Theo những gì tôi biết kết hợp với những gì tôi hiểu cộng thêm với kinh nghiệm của mình có tham khảo lời khuyên của những người khác thì rất khó có ai kiểm tra cho bạn là bạn sai ở đâu vì rất mất thời gian mất thời gian là vì không biết mục đích của bạn khi viết cái này cộng thêm nói dài thật dài nếu tìm lại dò từng code từng biến Với code thì các bác trên diễn đàn nhiều bác nhìn biết ngay sai cú pháp hay không nhưng biến thì khó vì lại phải dò dò để hiểu vì vậy theo tôi bạn nên chia từng đoạn ra mà kiểm tra xem lisp chạy đến đoạn nào thì lỗi từ đó kiểm tra dần dần tôi gà lisp nên thường gám thêm dòng lệnh Alert để hiện bảng thông báo nếu nó không chạy đến cái  alert nào thì nó sai từ đó trở đi

Mà theo kinh nghiệm mấy chục năm tuổi đời chơi game hư hỏng của tôi thì nhưng ai có cái tên pro ở đuôi thường chưa pro giống như cái tên

Tôi là 1 pro về Chính tả và ngữ pháp đó 

 

  • Like 2
  • Vote giảm 2

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

Không rõ ý nghĩa của lisp là gì nhưng cơ bản thì có 1 số lỗi cú pháp sau đây:

- Nhầm tên biến: ssl và SSLISTY, đồng nhất 2 cái thành 1 thôi

- Thiếu hàm con DXFCN. Bỏ luôn nó đi, thay bằng (cdr (assoc n lst))

- Lưu ý hàm: ACET-GEOM-VERTEX-LIST chỉ dùng cho Pline, lỗi với các đối tượng khác ví dụ: Line, Arc

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

×