12.11.2013 13:15    

ismailasi
Arkadaşlar çizimde seçeceğimiz, açısı olan Line'ları yatay yapacak bir Lisp örneği verebilir miydiniz lütfen? Teşekkürler.

ProhibiT (12.12.2013 20:32 GMT)

12.11.2013 14:42    

ehya
Hangi noktasına göre??

12.11.2013 14:53    

ismailasi
Alıntı
ehya :
Hangi noktasına göre??


Aslında soruyu yanlış sordum. Yapmak istediğim şuydu: seçilen line ların start point ve end point lerinin Y değerlerini eşitlemek. Bunu yaparsam line lar yatay olacak. Açıyla falan uğraşmaya gerek yok. Yardımlarınız için teşekkürler.

13.11.2013 12:16    

ehya
o zaman çizgi uzunluğu değişecek. Farkındasın dimi?

13.11.2013 12:40    

ismailasi
çizgi uzunluğu değişiyor haklısın. bunu çizgi uzunluğu değişmeden yapmanın yolu vardır muhakkak. sonuçta bu işte uzman olan sizlersiniz. teşekkürler.

13.11.2013 15:26    

ehya
işte ilk mesajımda bunu söylüyyorum.. rotate işlemi yaparken referans bir nokta gerekli.. ya başlangıcı olacak ya bitişi. yada bu iki noktaya göre referans belirlenecek bir yer..

14.11.2013 12:07    

ismailasi
rotate için başlangıç noktası referans alınabilir. sorun yok ehya.

14.11.2013 12:31    

ehya
Komut adı LNRT

Kod:

(defun c:lnrt ()
(setq lnsec (ssget (list (cons 0 "LINE"))))
  (if (= lnsec nil)
    (progn)
    (progn
      (setq c 0 lnsay (sslength lnsec))
      (while (< c lnsay)
(setq lntek (ssname lnsec c)
      lnbas (cdr (assoc 10 (entget lntek)))
      lnson (cdr (assoc 11 (entget lntek))))
(command "_.rotate" lntek "" lnbas "r" lnbas lnson "0")
(setq c (+ c 1)))))(princ))

14.11.2013 14:51    

ismailasi
çok teşekkürler ehya kardeş sorunsuz çalışıyor. eline ve aklına sağlık.

12.12.2013 16:29    

earthworm
Bu Lispe eğik TEXT lerıde eklıyebılırmısınız hocam

12.12.2013 16:44    

Travaci
earthworm


Kod:

(defun c:ytr (/ txt dat n)
   (setq txt (ssget (list (cons 0 "*text"))) n 0) 
   (setvar "cmdecho" 0) (vl-load-com) (vl-cmdf "_.undo" "begin")
   (if txt (repeat (sslength txt)
      (setq dat (vlax-ename->vla-object (ssname txt n)) n (1+ n))
      (vla-put-Rotation dat 0.0)))
   (vl-cmdf "_.undo" "end") (setvar "cmdecho" 1) (princ))

Travaci (22.05.2014 11:37 GMT)

12.12.2013 20:29    

ProhibiT
Kodları teknik olarak incelediğimizde;
Seçim setinin hem genel hem de filtreli oluşturulması :yes
Önce sayaca başlangıç değeri atanıp sonra döngüye girilmesi :yes
Döngünün kuruluşu ve sayacın işleyişi :yes
Sayacın üst sınırı için gereksiz yere değişken tutulmaması :yes
Assoc list değiştirmek yerine vla- kullanmak :yes
Temiz çıkış için princ ile bitirmek :yes
Local değişkenleri defun başında tanımlayarak ortalıkta dolaştırmamak :yes
Gereksiz değişken tutmadan mantık çerçevesinde en kısa kodlama :yes
Eline sağlık Erkan Travacı, çok beğendim.

12.12.2013 20:31    

Travaci
(vl-load-com) 'u unutmuşum hocam teşekkürler : )

12.12.2013 20:45    

ProhibiT
Kendi bilgisayarlarımızda vl-load-com işlevini yüklemeyi otomatiğe aldığımızdan hepimiz unutuyoruz. :) onu ekler bir de undo grubu oluşturursan eksiksiz olacak.

12.12.2013 20:56    

Travaci
Haklısınız yüklü olduğundan unutuyoruz, undo grubu neden koymadım çünkü bazı işlemlerde undo ya gerek kalmıyor, bunlar hangilerinde daha tam idrakına varamadım, uğraşa uğraşa ezberimde kalmışlar. Buda o işlemlerden biri, undo yaptığımda her text'e uyguluyor.

18.12.2013 11:24    

earthworm
teşekkürler

18.12.2013 11:41    

waytooraider
Hocam;
Çizgileri yatay değilde dikey olacak şekilde ayarlayabilirmiyiz?
Saygılarımla.

18.12.2013 11:55    

Travaci
waytooraider


0 yerine 90 yazıcaksın.

Kod:

(command "_.rotate" lntek "" lnbas "r" lnbas lnson "90")

18.12.2013 12:04    

ProhibiT
Kod:

;;; 0 - 90 - 180 ve 270 dereceye çeviren fonksiyon.
(defun c:LnOrt (/ Aci c Ln Ln1 Rtt StP)
  (setvar "cmdecho" "0") (command "undo" "group")
  (if (setq Ln (ssget (list (cons 0 "LINE"))))
    (progn (setq c (sslength Ln))
      (while (> (setq c (1- c)) -1)
        (setq Ln1  (ssname Ln c)
              StP (cdr (assoc 10 (entget Ln1)))
              Aci  (angle StrP (cdr (assoc 11 (entget Ln1)))))
        (cond ((and (> Aci 0) (< Aci (/ pi 4)))
               (setq Rtt (- 0 Aci)))
              ((and (> Aci (/ pi 4)) (< Aci (* pi 0.75)))
               (setq Rtt (- (/ pi 2) Aci)))
              ((and (> Aci (* pi 0.75)) (< Aci (* pi 1.25)))
               (setq Rtt (- pi Aci)))
              ((and (> Aci (* pi 1.25)) (< Aci (* pi 1.75)))
               (setq Rtt (- (* pi 1.5) Aci)))
              ((and (> aci (* pi 1.75))) (setq Rtt (- (* pi 2) Aci))))
        (setq Rtt (/ (* Rtt 180) pi))
        (if (= (getvar "AngDir") 1) (setq Rtt (- 0 Rtt)))
        (command "_.rotate" Ln1 "" StP Rtt))))
  (command "undo" "e") (princ))

;;; 0 ve 180 dereceye çeviren fonksiyon.
(defun c:LnYat (/ Aci c Ln Ln1 Rtt StP)
  (setvar "cmdecho" "0") (command "undo" "group")
  (if (setq Ln (ssget (list (cons 0 "LINE"))))
    (progn (setq c (sslength Ln))
      (while (> (setq c (1- c)) -1)
        (setq Ln1  (ssname Ln c)
              StP (cdr (assoc 10 (entget Ln1)))
              Aci  (angle StP (cdr (assoc 11 (entget Ln1)))))
        (cond ((and (> Aci 0) (< Aci (/ pi 2)))
               (setq Rtt (- 0 Aci)))
              ((and (> Aci (/ pi 2)) (< Aci (* pi 1.5)))
               (setq Rtt (- pi Aci)))
              ((> Aci (* pi 1.5)) (setq Rtt (- (* pi 2) Aci))))
        (setq Rtt (/ (* Rtt 180) pi))
        (if (= (getvar "AngDir") 1) (setq Rtt (- 0 Rtt)))
        (command "_.rotate" Ln1 "" StP Rtt))))
  (command "undo" "e") (princ))

;;; 90 ve 270 dereceye çeviren fonksiyon
(defun c:LnDik (/ Aci c Ln Ln1 Rtt StP)
  (setvar "cmdecho" "0") (command "undo" "group")
  (if (setq Ln (ssget (list (cons 0 "LINE"))))
    (progn (setq c (sslength Ln))
      (while (> (setq c (1- c)) -1)
        (setq Ln1  (ssname Ln c)
              StP (cdr (assoc 10 (entget Ln1)))
              Aci  (angle StP (cdr (assoc 11 (entget Ln1)))))
        (if (and (>= Aci 0) (< Aci pi))
          (setq Rtt (- (/ pi 2) Aci))
          (setq Rtt (- (* pi 1.5) Aci)))
        (setq Rtt (/ (* Rtt 180) pi))
        (if (= (getvar "AngDir") 1) (setq Rtt (- 0 Rtt)))
        (command "_.rotate" Ln1 "" StP Rtt))))
  (command "undo" "e") (princ))
;;; 90 ve 270 dereceye çeviren fonksiyon işinizi görür.
İlk fonksiyonu "Ortogonal Yap", ikinciyi "Yataya Çevir", üçüncüye de "Dikeye Çevir" diye düşünebilirsiniz. Rotate işlemi için kullanılacak Base point noktası hedeflenen açıya göre doğrunun uygun ucu olarak alınır.

28.07.2019 18:42    

okimkio
merhaba bu kod kapalı polyline için revize edilebilrmi

> 1 <
Copyright © 2004-2022 SQL: 2.111 saniye - Sorgu: 99 - Ortalama: 0.02132 saniye