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

ngokiet

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

    404
  • Đã tham gia

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

  • Ngày trúng

    43

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


  1. 2 giờ trước, ndtnv đã nói:

    Bạn test xem dòng code dễ hiểu

    (setq LtsZichZac ((read(strcat “SortPoint_” style)) LtsPoint kccum)) 

    có chạy được không?

    Cách lập trình của tôi là kết hợp 4 hàm SortPoint thay cho kết hợp 4 lệnh gọi,   trên đó chỉ là VD kết hợp 4 lệnh gọi

    Có thể có cách kết hợp khác hay hơn, nếu bạn nào biết xin chia sẻ.

    Thanks bác sửa dùm do quên test. 

    Nhưng mình thích 

    (setq LtsZichZac ((eval(read(strcat “SortPoint_” style))) LtsPoint kccum)) 

    hơn vì eval không phải chạy lệnh.


  2. 3 giờ trước, ngokiet đã nói:

    dxf 40 lỗi khúc này là do xuât kết quả ra text mà text high bị sai. 

    Sửa lỗi này thì phải có tác giả lisp mới biết chỗ nào.

     

    1 giờ trước, thanhmicco đã nói:

    Dẫu sao cung cảm ơn bạn nhiều

    Mình trả lòi như vậy cho bạn là để bạn hiểu với thông tin bạn hỏi như vậy thì chỉ trả lời được như vậy thôi.

    Bạn muốn nhiều hơn thì phải có file lisp và bản vẽ trường hợp lỗi đó. Người khác mới trả lời chính xác và hoàn thiện lại lisp trong trường hợp lỗi tương tự.


  3. 1 giờ} trướ}c, hoangmai1003 đã nói:

    anh giúp em với, em gửi file lên rùi đó anh

    Bạn nên tham chiếu field vào 1 đoạn thẳng hay là dim trong block luôn. Và đó là text chứ ko phải attdef thì nó mới được.

    Vì trong block mà field chỉ tới chính block thì nó chưa tồn tại làm sao mà tham chiếu được.

    Còn ko thì tạo att thường. Sau đó tạo field. Khi sử dụng thì copy chứ không insert được.

    • Like 1

  4. 29 phút trước, thanhmicco đã nói:

    Mọi người cho em hỏi chút, em load lisp (AE) tính diện tích một hình và ghi kết quả ra màn hình thì nó báo lỗi error: bad DXF group (40). Lỗi này do đâu và cách sửa như thế nào vậy ah852419978_loitinhdientichbangAE.PNG.a2eea9fb33d150eb2044a2b7196a00c3.PNG

    dxf 40 lỗi khúc này là do xuât kết quả ra text mà text high bị sai. 

    Sửa lỗi này thì phải có tác giả lisp mới biết chỗ nào.


  5. 1 giờ} trướ}c, Doan Nguyen Van đã nói:

    Tiện bác cho em hỏi, có Method nào cho phép chọn đối tượng khác bên trong block không bác, giả sử lấy ra tọa độ Polyline trong block 

    Bác dùng Vlax-dump-object sẽ biết có menthod nào mà.

     

    - Menthod có thễ dùng để lấy polyline là Explore

    Tuy nhiên nó như lệnh explore của Cad. Là tạo ra các object explore. Nhưng nó trả về danh sách object cho bạn kiểm tra cần lấy cái nào. Và xóa cái không cần thiết.

     

    Thật ra lấy các attributes thì bạn cũng có thể dùng entnext 

    Entnext block nó trả về att đầu tiên. entnext att dầu nó trả về att tiếp nếu không có thì nó tra về ent có tên là SEQEND.

    Vì các Att tồn tại là ent của CAD nên có thể chỉnh font, text, style ... như 1 text bình thường. Và khi getattributes thì nó trả về các vbaobject của các att đó. 

    Còn các thành phần khác thì không có obj tương ứng nên ko dc.

    • Vote tăng 1

  6. 26 phút trước, vitcum đã nói:

    Thanks bác lisp chạy tương đối ổn ạ, có một số chỗ thì không hiểu sao nó bị sai thứ tự

    2019-06-18_135209.thumb.png.1f9b4a0e2493f47c43593822c3dbdafb.png

     

     Vâng nó khác nhau ạ vì nguồn không phải từ cad mà do từ catia mà ra, đích thì thuần cad nên nó có sự sai khác

    Mỉnh sửa lại rồi đó. Do text lệch nhau nhiều hơn mình dự tính

    • Like 1

  7. 23 giờ trước, mr.thanh2610 đã nói:

    Cảm ơn bạn nhiều nhé....

    Mình sửa lại cho bạn theo phiên bản gốc nè. Bạn có thể bổ sung hay thêm bớt các kiểu tùy ý và dễ sửa hơn.

    (có thể chồng nhiều loại hatch như kiểu bêton)

     

    Nếu bạn sửa (command "hatch") Thành  (command "-hatch")

    Thì nó mặc định là pick điểm. Còn nhấn S sẽ là select.

     

     

     

    sf-hatchnhanh.lsp

    • Vote tăng 1

  8. 21 giờ trước, huunhantvxdts đã nói:

    Sửa lại cho bạn nhập góc theo độ nhé:

    
    (defun c:SF(/ p dt ans ten sc dt angrad)
    (setvar "cmdecho" 0)
    (initget "B B1 B2 BK G GD GD1 GL GL1 GL2 D D1 C K N N1 TO GO GO1")
    (setq ans (getkword "\n Chon kieu hatch < B/B1/B2/BK/G/GD/GD1/GL/GL1/GL2/D/D1/C/K/N/N1/TO/GO/GO1 > : "))
    (or (and ang (or (= (type ang) 'int) (= (type ang) 'real))) (setq ang 0.00))
    (setq ang (cond ((getreal (strcat "\nNhap goc theo do <" (rtos ang 2 2) ">: "))) (ang)))
    (setq angrad (*(/ ang 180) pi))
    (if (= ans "B") 
    (progn 
    (setq ten "AR-CONC" sc 20.0
    ten2 "ANSI32" sc2 200.0) 
    )
    )
    (if (= ans "B1") 
    (progn
    (setq ten "AR-CONC" sc 20.0)
    )
    )
    (if (= ans "B2") 
    (progn
    (setq ten "GRAVEL" sc 100.0)
    )
    )
    (if (= ans "BK") 
    (progn
    (setq ten "SOLID" sc 200.0)
    )
    )
    (if (= ans "G") 
    (progn
    (setq ten "ANSI31" sc 400.0)
    )
    )
    (if (= ans "GD") 
    (progn
    (setq ten "AR-B816" sc 10.0)
    )
    )
    (if (= ans "GD1") 
    (progn
    (setq ten "FLGSTONE" sc 500.0)
    )
    )
    (if (= ans "GL") 
    (progn
    (setq ten "NET" sc 1500.0)
    )
    )
    (if (= ans "GL1") 
    (progn
    (setq ten "ANGLE" sc 700.0)
    )
    )
    (if (= ans "GL2") 
    (progn
    (setq ten "AR-HBONE" sc 20.0)
    )
    )
    (if (= ans "D") 
    (progn
    (setq ten "HOUND" sc 500.0)
    )
    )
    (if (= ans "D1") 
    (progn
    (setq ten "EARTH" sc 500.0)
    )
    )
    (if (= ans "C") 
    (progn
    (setq ten "AR-SAND" sc 20.0)
    )
    )
    (if (= ans "K") 
    (progn
    (setq ten "AR-RROOF" sc 500.0)
    )
    )
    (if (= ans "N") 
    (progn
    (setq ten "AR-RSHKE" sc 30.0)
    )
    )
    (if (= ans "N1") 
    (progn
    (setq ten "SPANTILE" sc 400.0)
    )
    )
    (if (= ans "TO") 
    (progn
    (setq ten "ANSI32" sc 200.0)
    )
    )
    (if (= ans "GO") 
    (progn
    (setq ten "WOOD8" sc 700.0)
    )
    )
    (if (= ans "GO1") 
    (progn
    (setq ten "WOOD2" sc 500.0)
    )
    )
     (setvar "hpname" ten)
     (setvar "hpscale" sc)
     (setvar "hpang" angrad)
    
    (initdia)
    (command "hatch")
    (while (< 0 (getvar "CMDACTIVE"))
    (command pause)
    ) 
    (princ)
    )

     

    Sao bạn không sửa getread thành getangle là được rồi mà.


  9. Thử lisp này xem

    (defun c:test2(/ s1 s2)
      (Princ "/nChon text nguon:")
      (setq s1 (acet-ss-to-list (ssget '((0 . "TEXT")))))
      (Princ "/nChon text dich: ")
      (setq s2 (acet-ss-to-list (ssget '((0 . "TEXT")))))
      (or (and s1 s2) (exit))
      (mapcar '(lambda(a b)
    	     (vla-put-textstring (cdr b) (cdr a)))
    	  (vl-sort
    	    (mapcar '(lambda(x / en)
    		       (cons (cdr (assoc 10 (setq en (entget x))))
    			     (cdr (assoc 1 en)))) s1)
    	    '(lambda (x y) (if (equal (cadar x) (cadar y) 3.)
    			     (> (caar x) (caar y))
    			     (< (cadar x) (cadar y)))))
    	  (vl-sort
    	    (mapcar '(lambda(x)
    		       (cons (cdr (assoc 11 (entget x)))
    			     (vlax-ename->vla-object x))) s2)
    	    '(lambda (x y) (if (equal (cadar x) (cadar y) 3.)
    			     (> (caar x) (caar y))
    			     (> (cadar x) (cadar y)))))))

     

    • Like 1

  10. 1 giờ} trướ}c, Doan Nguyen Van đã nói:
    
    (defun c:dc (/ ent ent2 p1 p2)
      (if (setq ent (car (entsel "\nCh\U+1ECDn \U+0111\U+1ED1i t\U+01B0\U+1EE3ng \U+0111\U+1EA7u ti\U+00EAn!"))) (progn
    	  (if (wcmatch (cdr (assoc 0 (entget ent))) "INSERT,CIRCLE")
        (progn 
      (while (setq ent2 (car (entsel "\nCh\U+1ECDn \U+0111\U+1ED1i t\U+01B0\U+1EE3ng ti\U+1EBFp theo!")))
        (if (wcmatch (cdr (assoc 0 (entget ent2))) "INSERT,CIRCLE") (progn
        (setq p1 (cdr (assoc 10 (entget ent)))
    	  p2 (cdr (assoc 10 (entget ent2))) )
        (command "DIMLINEAR" "_non" p1 "_non" p2 pause)
        (setq ent ent2)
        ) (alert "\n\U+0110\U+1ED1i t\U+01B0\U+1EE3ng kh\U+00F4ng ph\U+1EA3i Block, Circle!")
          )
        )
      ) (alert "\n\U+0110\U+1ED1i t\U+01B0\U+1EE3ng kh\U+00F4ng ph\U+1EA3i Block, Circle!")
      ))))

    Chọn nhiều đối tượng thì mình chịu, sort thế nào cho vừa ý đc 

    Chọn nhiều đối tượng cùng phương thì làm cái như qdim ấy.

    Cón nếu pl đó liền nhau thì sort theo pline được như lệnh dim pline.

     

    Còn dim như vậy thì bắt điểm được rồi chứ viết lisp ko hiệu quả lắm.

    Bắt điểm tuỳ đối tượng INS/CEN/MID .Extend thì dùng dimcontinuos.

    Viết lisp cũng đâu nhanh hơn bao nhiêu.

     

×