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

whatcholingon

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

    222
  • Đã tham gia

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

  • Ngày trúng

    6

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


  1. Hình như các anh em đa hiểu nhầm ý của tui rồi. Ý tui muốn hỏi là làm cách nào để xóa các text đó đi 1 cách nhanh nhất với điều kiện nếu 2 hay 3 hay 4,.... text đè lên nhau thì sẽ tự chọn và giữ lại 1 text trong số các text đó mà thôi.

     

    Dĩ nhiên sẽ có anh em thắc mắc làm sao đảm bảo độ chính xác của bản vẽ. Xin trả lời đó chỉ làm cho bản vẽ đơn giản, và in ấn cho đẹp. Còn khi cấp text point cho khách hàng thì phải cấp points cho đầy đủ thì tính khối lượng đào đắp mới chính xác được.

     

    Nhờ anh em viết dùm 1 lisp có khả năng làm điều đó được.

     

    Thanks.

    Mọi người viết giùm mình lsp như trên với ah.

    Mình giải thích thêm:

    Trong bản vẽ có rất nhiều text ( dạng số là text cao độ):

    trong đó, có text nó nằm đè lên nhau (text này chồng lên text kia ,có chỗ 2,3 text nó đè lên một text khác) giờ mình có thể xóa đi chỉ để lại một tetxt ( text nào cũng được)

    a5bb550046de27d2cc07ca8c49646e6f_45339287.1.jpg

    Thanks


  2. Vấn đề bạn đặt ra Tue_NV thấy thiếu ý :

    Chọn đối tượng mẫu ( mọi đối tượng) sau đó chọn vùng -> để chọn ra đối tượng giống đối tượng mẫu" ->

    Tue_NV hỏi bạn giống chổ này hơi khó hiểu là giống cái gì -> Text thì giống nhau về nội dung hay Layer hay màu sắc...... và các đối tượng khác giống đối tượng mẫu về cái gì. Hay là giống nhau cả? (Chắc là không giống nhau hết được đâu bạn nhỉ?)

     

    Vấn đề đặt ra của bạn tương đối hay nhưng thiếu dữ kiện nên phải đầy đủ mới có thể giải quyết được bạn ạ

    Tue_NV hay sử dụng lệnh Fi để lọc các đối tượng có điều kiện khác nhau và viết Lisp có hay chăng nữa cũng không bằng lệnh Fi dược

    Vậy trong trường hợp này sao không sử dụng lệnh Fi?????

     

    Ở đây đối tượng mẫu cũng giống như nội dung như đối tượng TEXT.

    VD: khi ta chọn một block thì khi đó những block cùng tên (or cùng một kiểu) sẽ được chọn,

    Đối tượng line cùng màu thì cũng chọn hết.

    ...

    ở lệnh FI nó mất công hơn một chút là nếu muốn chọn đối tượng về điểm trung thì phải xóa hết thông số riêng của đối tượng đó.

    VD: mình muốn chọn hết TEXT trong bản vẽ thì chỉ để lại Objest là TEXT thui. còn lại là xóa layer, màu. linetype...

     

    ( Giờ mình cũng mới thấy phức tạp ở chỗ, Text thì nó chung một nội dung. còn các đối tượng khác. VD : khi chọn đối tượng LINE thì không biết nó lọc kiểu màu, layer., linetype or tọa độ nhỉ)

    Chắc sài lệnh FI là chuẩn nhất.


  3. Đây bạn ơi! Lisp chọn text cùng nội dung.

    (defun C:HA( / txt)
    (setq txt (cdr (assoc 1 (entget (car (entsel "\nChon Text mau: "))))))
    (princ "\nChon nhom Text...")
    (setq ss (ssget (list '(0 . "*TEXT") (cons 1 txt))))
    (sssetfirst nil ss))
    

    Mình thấy Lsp này cũng hay,

    Lsp này có thể chỉnh sửa: Thay vì chọn đối tượng TEXT, mà là chọn đối tượng mẫu ( mọi đối tượng) sau đó chọn vùng thì có được không ah.

    • Vote tăng 1

  4. Cảm ơn các bạn đồng nghiệp!

    Mình rất hay phải sử dụng file dữ liệu dạng này, nếu được xin nhờ các bạn sửa point thành vòng tròn. Nếu mà nhập được trực tiếp file từ excel hoặc từ word thì tốt quá

     

    Mình đoán bạn này nhầm giữa POINT và CIRCLE tại vì trên cad khi vào POINT STYLE.. có thể đưa các POINT về nhiều kiểu khác nhau. trong đó có cái giống hình tròn.

    Còn nếu mà bạn muốn chuyển các POINT thành các đường tròn thì có thể dùng LSP trong 4rum này:

    http://www.cadviet.com/forum/index.php?showtopic=64067&pid=200214&st=0&&do=findComment&comment=200214


  5. Command: flatten

     

    Initializing...

    Select objects to convert to 2d...

    Select objects: Specify opposite corner: 18 found, 1 group

     

    Select objects:

     

    Remove hidden lines? <No>:

    Command: textmask

    Initializing...

    Current settings: Offset factor = 3.0000, Mask type = 3dface

    Select text objects to mask or [Masktype/Offset]:

    Other corner: 18 found

     

    Select objects:

    17 found

    Current settings: Offset factor = 3.0000, Mask type = 3dface

    Select text objects to mask or [Masktype/Offset]: m

    Mask type currently set to 3dface

    Specify entity type to use for mask [Wipeout/3dface/Solid] <3dface>: w

    Loading WIPEOUT for use with TEXTMASK...

    Current settings: Offset factor = 3.0000, Mask type = Wipeout

    Select text objects to mask or [Masktype/Offset]:

     

    17 text items have been masked with a Wipeout.


  6. Sửa lại cho bạn đây :

    (defun c:test ( / e ss) (vl-load-com)
    (setq i -1)
    (if (setq ss (ssget '((0 . "*TEXT"))))
    (while (setq e (ssname ss (setq i (1+ i))))
    (entmakex
      (append
       (list
      	(cons 0 "LWPOLYLINE")
      	(cons 100 "AcDbEntity")
      	(cons 100 "AcDbPolyline")
      	(cons 90 4)
      	(cons 70 1))
       (mapcar '(lambda ( p ) (cons 10 p)) (LM:BoundingBox (vlax-ename->vla-object e)))))))
     (princ))
    (defun LM:BoundingBox ( object / lowerleft upperright )
     (if (vlax-method-applicable-p object 'GetBoundingBox)
    ((lambda ( boundingbox )
       (mapcar
      	(function
            (lambda ( _functionlist )
              (mapcar
             (function
     	         (lambda ( _function ) ((eval _function) boundingbox)))
             _functionlist)))
      '((caar   cadar) (caadr  cadar)
            (caadr cadadr) (caar  cadadr))))
      (mapcar 'vlax-safearray->list
       (progn
      	(vla-getBoundingBox object 'lowerleft 'upperright) (list lowerleft upperright))))))
    

     

    Thanks ban nhieu!


  7. Ở đây mình có lisp tạo đường viền cho text ( không biết tác giả)

    ở Lsp này khi đánh lệnh nó chỉ chọn được một text

    Mọi người chỉnh giúp mình là chọn được nhiều đối tượng text một lúc không ah.

    Đây là lisp đó:

    ;; free lisp from cadviet.com
    ;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=63121&pid=195690&st=0entry195690
    ;----- Example Calling Function: This example will create an LWPolyline describing the bounding box of the selected object.
    (defun c:test ( / e ) (vl-load-com)
     (if (setq e (car (entsel)))
    (entmakex
      (append
    (list
      	(cons 0 "LWPOLYLINE")
      	(cons 100 "AcDbEntity")
      	(cons 100 "AcDbPolyline")
      	(cons 90 4)
      	(cons 70 1))
    (mapcar '(lambda ( p ) (cons 10 p)) (LM:BoundingBox (vlax-ename->vla-object e))))))
     (princ))
    (defun LM:BoundingBox ( object / lowerleft upperright )
     (if (vlax-method-applicable-p object 'GetBoundingBox)
    ((lambda ( boundingbox )
    (mapcar
      	(function
    		(lambda ( _functionlist )
      		(mapcar
        		(function
          		(lambda ( _function ) ((eval _function) boundingbox)))
        		_functionlist)))
      '((caar   cadar) (caadr  cadar)
    		(caadr cadadr) (caar  cadadr))))
      (mapcar 'vlax-safearray->list
    (progn
      	(vla-getBoundingBox object 'lowerleft 'upperright) (list lowerleft upperright))))))
    
    

     

    Thanks!


  8. Nếu muốn làm mịn đi thì loại bỏ các điểm ở giữa, bạn sử dụng thằng này. Độ làm mịn càng lớn thì số đỉnh của Pline bị loại bỏ càng lớn. Ở máy của mình lấy ví dụ tầm 30 là đẹp :) Lần sau chịu khó trình bày kỹ hơn chút nữa hén, do mình hơi dốt nên dễ hiểu nhầm

    (defun c:p2s(/ ss lstPro MakeSPline ST:Geom-Vertext-List  lstPro)
    (command "undo" "be")
    (setq a (getint "\nDo lam min :"))
    (prompt "\nChon Pline(s) :")
    (cond ( (ssget (list (cons 0 "*POLYLINE")))
     (vl-load-com)
     (setq  lstPro '(Linetype LinetypeScale Layer Color))
     (defun lstRe (lst n / rt sublst);(1 2 3 4)
      (defun sublst(lst it)(repeat (1- it) (setq lst (cdr lst))))
      (while lst
    (setq rt (cons (car lst) rt) lst (sublst lst n))
      )  (reverse (vl-remove nil rt))
     )
     (defun MakeSPline (listpoint Linetype LTScale Layer Color  / Lst)
      (setq lst (list '(0 . "SPLINE")'(100 . "AcDbEntity")
    	(cons 8 (if Layer Layer (getvar "Clayer")))
    	(cons 6 (if Linetype Linetype "bylayer"))
    	(cons 48 (if LTScale LTScale 1))
    	(cons 62 (if Color Color 256))
    	'(100 . "AcDbSpline")
       	(cons 71 3)
    	(cons 74 (length listpoint))))
    (foreach PP listpoint (setq Lst (append Lst (list (cons 11 PP)))))  
      (entmakex Lst)
     );end
     (defun ST:Geom-Vertext-List (e / typ poly) ;vlaObject
      (setq typ (vlax-get e 'ObjectName))
      (cond ((wcmatch typ "AcDbLine")(list (vlax-get e 'StartPoint)(vlax-get e 'EndPoint)))
    (T
    (   (lambda ( f /)
     	(if (setq poly (vl-position typ '("AcDbPolyline" "AcDb2dPolyline" "AcDb3dPolyline")))    
      	(f (vlax-get e 'coordinates))
     	)
     	)
    (lambda ( l )
     	(cond
      	((and l (= poly 0)) (cons (list (car l) (cadr l)) (f (cddr l))))
      	((and l (= poly 1)) (cons (list (car l) (cadr l)) (f (cdddr l))))
      	((and l (= poly 2)) (cons (list (car l) (cadr l) (caddr l)) (f (cdddr l))))
     	)
    )
    )
    )
      )
     )
    (vlax-for x (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object)))
     (apply
      'MakeSPline
    (append
    (list (lstRe (ST:Geom-Vertext-List x) a))
    (mapcar '(lambda(a)(vlax-get x a)) lstPro)    
    )
     )
     (vla-erase x)
    )
    )
    )
    (command "undo" "en")
    )
    

     

    Thanhs!

    Bạn khiêm tốn quá ! mình muốn dốt như bạn mà còn chẳng được nữa là.

    Về diễn giải hay trình bày một cái gì đó thì mình kém lắm. (văn học mình học cực dốt mà)

    Mọi người thông cảm.


  9. Chẳng phải yêu cầu của bạn chính là chuyển Pline thành SPline đó sao ? Mà spline mới chỉ có thể tạo được trên cơ sở các điểm của Pline cũ :o

    Mình muốn giữ chân thực số lượng điểm, còn theo bản vẽ của bạn là lược bớt điểm đi ?

     

    Hiện tại trên bản vẽ của mình pl. giờ tạo một PL or SPL miễn sao là bám theo đường PL cũ không quan trọng nhiều điểm hoặc ít điểm.

    Miễn sao nhìn nó trơn đều là được, như ở hình vẽ là mình làm thủ công vẽ một SPL theo cái đường PL đó để nhìn nó được trơn và đẹp hơn. không bị gấp khúc nữa.

     

    Bạn nhìn kỹ ở hình or trong bản vẽ nhé. Hình Pl thì không trơn và đẹp bằng Spl mình mới vẽ.


  10. Mình Làm trên cad 2010 thì lisp chạy rùi bạn ah.

    Mà hình như lsp này là chuyển Pl thành Spl bạn ah.

    Bạn có thể viết lsp chạy như bản vẽ mình up lên được không.

    tại vì pl có nhiều chỗ gấp khúc giờ miễn sao chạy nhìn nó trơn đều. và nhìn không bị gấp khúc nữa.

    Bạn nhìn ở hình. nét đầu tiên có nhiều chỗ gấp khúc. nét thứ hai ( trắng) nhìn trơn đều hơn.

    chỉ cần bám theo pl cũ. những chỗ gấp khúc có thể cho chạy trơn đều có thể xê dịch 0.5m cũng được.

    Thanks.

×