프로그램
캐드 분류

폴리라인 끝에 위치한 블록 반대편 끝으로 이동

컨텐츠 정보

  • 55 조회
  • 4 댓글
  • 0 추천
  • 0 비추천
  • 목록

본문

  • 캐드 작업중인데, 블록 종류가 여러가지고 그블록들에 각각 폴리라인이 그어져 있습니다.
  • 여기서 문제인데, 그 블록들을 폴리라인의 반대편 끝으로 한번에 이동시키는 리습이나 방법이 있을까요??
  • 블록종류 다양함
  • 폴리라인길이 각각 다름

관련자료

댓글 4 / 1 페이지

dhL님의 댓글

;블록을 선택한다. ;블록안에 있는 폴리선을 찾고 반대편으로 이동한다. (defun C:blockMove() (vl-load-com) (princ "이동할 블럭을 선택하세요:") (setq ss (ssget '((0 . "INSERT")))) (repeat (setq n (sslength ss)) (setq blk (ssname ss (setq n (1- n)))) (vla-getboundingbox (vlax-ename->vla-object blk) 'minpt 'maxpt)

(setq minP (vlax-safearray->list MinPt)) (setq maxP (vlax-safearray->list MaxPt)) (setq midP (list (/ (+ (car minP) (car maxP)) 2) (/ (+ (cadr minP) (cadr maxP)) 2) (/ (+ (caddr minP) (caddr maxP)) 2)) )

(setq ssPL (ssget "_C" minP maxP '((0 . "LWPOLYLINE")))) (if (> (sslength ssPL) 0) (progn (setq ent (ssname ssPL 0)) (setq entData (entget ent)) (setq ptlist (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) entData))) (setq startPt (car ptlist)) (setq endPt (nth (-(length ptlist) 1) ptlist))

(if (< (distance midP startPt) (distance midP endPt)) (vla-move (vlax-ename->vla-object blk) (vlax-3d-point startPt) (vlax-3d-point endPt)) (vla-move (vlax-ename->vla-object blk) (vlax-3d-point endPt) (vlax-3d-point startPt)) ) );progn ) ) )

dhL님의 댓글

답변이 늦었습니다.

제가 만들었던 프로그램의 설정은 -> 블록 있고 블록 내부에서 시작하는 폴리라인이 있는 경우 그 폴리라인의 다른 끝으로 블록을 이동한다는 가정입니다.

그래서 프로그램을 보면 1. 블럭을 선택 2. 블럭의 영역값을 넣는다. 3. 영역안에 있는 폴리라인(“LWPOLYLINE”만)을 찾는다. 4. 만약 여러개의 폴리라인을 찾았다면 첫번째 폴리라인을 기준으로 5. 찾은 폴리라인의 반대편으로 이동한다.

만약 문제가 있다면 폴라라인이 예전 프로그램에서 작성됐다면 LwPolyLine 이 아닌 polyline 이고 이 폴리라인은 선택이 안되겠죠… 선택이 안되면 프로그램도 안되고…

(setq ssPL (ssget ‘((0 . “LWPOLYLINE”)))) (setq ssl (sslength ssPL)) 이 리습으로 폴리라인이 선택이 되는지 확인을 해보면 좋겠네요. 설마, 폴리라인도 블록으로 된 것은 아니겠죠?

전체 6,913 / 1 페이지
번호
제목
이름
알림 0