[Visual Lisp] - obiekt TABLE


Rekomendowane odpowiedzi

Witam,

proszę o potwierdzenie błędu, czy braku możliwości edycji obiektu TABLE w ZwCAD2012+ (vernum = "2012.08.30(5622)"), z poziomu Visual Lispa.

Przykładowy kod dodający nowy rekord w ZwCAD:

Command: (cd:ACX_SetProp (car(entsel)) '(("Rows" . 4)))
(("Rows" . #<%catch-all-apply-error%>))

AutoCAD:

Command: (cd:ACX_SetProp (car(entsel)) '(("Rows" . 4)))
(("Rows" . :vlax-true))

Funkcja biblioteczna:

; =========================================================================================== ;
; Zmienia cechy obiektu VLA / Sets the property of VLA-Object
; Obj [ENAME/VLA-Object] - entycja lub obiekt VLA / entity name or VLA-Object
; Lst [list] - lista cech par kropkowych / list of dotted pairs properties
; ------------------------------------------------------------------------------------------- ;
; (cd:ACX_SetProp (entlast) '(("LineType" . "BLA")("Color" . 1)("Layer" . "0")))
; =========================================================================================== ;
(defun cd:ACX_SetProp (Obj Lst)
(if (= (type Obj) (quote ENAME))
(setq Obj (vlax-ename->vla-object Obj))
)
(if (vlax-write-enabled-p Obj)
(mapcar
 (function
 (lambda (% / %1)
	 (cons
	 (car %)
	 (if (vlax-property-available-p Obj (car %) T)
		 (if
		 (setq %1
			 (vl-catch-all-apply
			 (quote vlax-put-property)
			 (list Obj (car %)
				 (if (vl-symbolp (cdr %))
				 (eval (cdr %))
				 (cdr %)
				 )
			 )
			 )
		 )
		 %1
		 :vlax-true
		 )
		 :vlax-null
	 )
	 )
 )
 )
 Lst
)
)
)

Sprawdzając istnienie właściwości "Rows" dla obiektu TABLE, otrzymujemy odpowiedź pozytywną, więc powinno działać:

Command: (vlax-property-available-p (vlax-ename->vla-object (car(entsel))) "Rows" nil)
T

Pozdrawiam,

Assgarth

Odnośnik do komentarza
Udostępnij na innych stronach

Witam

Z ostatniego kontaktu z ZWSOFT, który pamiętam a dotyczył Tabel i dostępu przez LISP wynika, że nie było możliwości pracy na tabelach. Z pewnością było to jeszcze przed wydaniem wersji ZWCAD+. Postaram się ustalić jak sytuacja ma się na chwilę obecną i dlaczego nie działa Pana przykład. Może uda się ustalić jakieś rozwiązanie zastępcze np przez (entmod).

Przy drugim rzucie oka na Pański kod myślę, że lepszym sposobem wstawiania wiersza do Tabeli będzie użycie metody InsertRows. Przykładowy kod, który u mnie zadziałał jest taki:

(setq Tabela (vlax-ename->vla-object (car(entsel)) ) )

(vlax-invoke-method Tabela 'InsertRows 3 2.5 2)

parametry metody są:

  1. Indeks wstawianego wiersza. (tutaj 3)
  2. Wysokość wiersza. (tutaj 2.5)
  3. Ilość wstawionych wierszy. (tutaj 2)

Pozdrawiam

Odnośnik do komentarza
Udostępnij na innych stronach

Dziękuję za podpowiedź.

Teraz inna sprawa - samo tworzenie obiektu TABLE za pomocą VLisp'a.

(vla-Addtable
(vla-get-ModelSpace
(vla-get-ActiveDocument
 (vlax-get-acad-object)
)
)
(vlax-3d-point '(0.0 0.0 0.0))
4
3
20.0
100.0
)
; error: Automation Error. Description was not provided.

Nie rozumiem, dlaczego nie można utworzyć tego obiektu za pomocą Active-X.

Poniżej za pomocą entmakex:

(defun c:addTable (insPt numRows numColumns rowHeight columnWidth)
(entmakex
(append
 (list
 '(0 . "ACAD_TABLE")
 '(100 . "AcDbEntity")
 '(100 . "AcDbBlockReference")
 (cons 10 insPt)
 '(100 . "AcDbTable")
 (cons 91 numRows)
 (cons 92 numColumns)
 )
 ((lambda (l)
	 (repeat numRows (setq l (cons (cons 141 rowHeight) l)))
 )
 nil
 )
 ((lambda (l)
	 (repeat numColumns (setq l (cons (cons 142 columnWidth) l)))
 )
 nil
 )
)
)
)

np.

(c:addTable (getpoint) 12 12 22 22)

i wszystko działa.

Rozumiem, że Active-X jeszcze nie jest dopracowany?

pozdrawiam

Odnośnik do komentarza
Udostępnij na innych stronach

Witam

Sprawdziłem to i rzeczywiście tworzenie tabeli przez VLISP jeszcze w tej wersji nie jest obsługiwane. Tymczasowo pozostaje korzystać z entmakex. Ale mam też dobrą wiadomość: próbowałem utworzyć tabelę przez VLisp na najnowszej wersji ZWCADa i próba zakończyła się powodzeniem. Wersja, która pozwala na tworzenie tabel nie jest jeszcze oficjalnie dostępna.

Pozdrawiam

Odnośnik do komentarza
Udostępnij na innych stronach

Witam,

jeszcze jedna sprawa:

jak utworzyć nowy styl dla Tabeli za pomocą VLispa?

Command:(vl-catch-all-apply 'vla-AddObject (list (vla-Item (vla-get-Dictionaries (vla-get-ActiveDocument (vlax-get-acad-object))) "ACAD_TABLESTYLE") "MyStyle" "AcDbTableStyle"))
#<%catch-all-apply-error%>

a powinno być:

Command: (vl-catch-all-apply 'vla-AddObject (list (vla-Item (vla-get-Dictionaries (vla-get-ActiveDocument (vlax-get-acad-object))) "ACAD_TABLESTYLE") "MyStyle" "AcDbTableStyle"))
#<VLA-OBJECT IAcadTableStyle 0000000038ff21a8>

pozdrawiam

Odnośnik do komentarza
Udostępnij na innych stronach

...

a powinno być:

Command: (vl-catch-all-apply 'vla-AddObject (list (vla-Item (vla-get-Dictionaries (vla-get-ActiveDocument (vlax-get-acad-object))) "ACAD_TABLESTYLE") "MyStyle" "AcDbTableStyle"))
#<VLA-OBJECT IAcadTableStyle 0000000038ff21a8>

Myślę, że raczej

(vl-catch-all-apply 'vla-AddObject (list (vla-item (vla-get-Dictionaries (vla-get-ActiveDocument (vlax-get-acad-object))) "ACAD_TABLESTYLE") "MyStyle" "ZcDbTableStyle"))

Ten sposób działa. prawdopodobnie tutaj jeszcze jest niezgodność

Odnośnik do komentarza
Udostępnij na innych stronach

U mnie nadal występuje błąd:

Command: (vl-catch-all-apply 'vla-AddObject (list (vla-item (vla-get-Dictionaries (vla-get-ActiveDocument (vlax-get-acad-object))) "ACAD_TABLESTYLE") "MyStyle" "ZcDbTableStyle"))
#<%catch-all-apply-error%>

Obstawiam, że sprawdzane było na tej najnowszej wersji, bo na mojej vernum = "2012.08.30(5622)" (read only), nie działa.

pozdrawiam

Odnośnik do komentarza
Udostępnij na innych stronach

  • 2 tygodnie później...

Kiedy można spodziewać się wersji 2013.01.27(9513) do testów?

Sprawdziłem działanie ACAD_TABLE pod wersją 2012.12.14(8707) i stabilność pracy pozostawia wiele do życzenia...

Albo nie działa w ogóle, albo wywala całego ZwCADa w kosmos bez ostrzeżenia o błędach... wrrrr :???:

Odnośnik do komentarza
Udostępnij na innych stronach

  • 1 miesiąc temu...

Witam,

sprawdziłem działanie ACAD_TABLESTYLE w najnowszej wersji ZwCAD2012+ SP2:

(vl-catch-all-apply 'vla-AddObject (list (vla-item (vla-get-Dictionaries (vla-get-ActiveDocument (vlax-get-acad-object))) "ACAD_TABLESTYLE") "MyStyle" "ZcDbTableStyle"))

i wygląda, że ta część działa prawidłowo.

Pytanie zatem następujące:

- jak nadać styl tekstom zawartym w tak utworzonym stylu tabeli?

; tName [sTR] - nazwa Stylu Nagłówka
; fTxtT [REAL] - wysokość tekstu nagłówka
; fTxtD [REAL] - wysokość tekstu danych


;; Set the text height for the Title, Header and Data rows
(vla-SetTextHeight custObj acTitleRow fTxtT)
(vla-SetTextHeight custObj (+ acDataRow acHeaderRow) fTxtD)

;; Set the text height and style for the Title row
(vla-SetTextStyle custObj (+ acDataRow acHeaderRow acTitleRow) tName)

Powyższe nie działa.

Jak zatem dostać się do tych ustawień z poziomu VLISPa?

post-94-0-72942200-1366186420_thumb.jpg

Odnośnik do komentarza
Udostępnij na innych stronach

Potwierdzam takie działanie programu, jest to powiązane z błędem, który kiedyś Pan zgłaszał. Nr nadany temu błędowi to T6727. Wówczas po użyciu funkcji nadającej szerokość tabeli i uruchomieniu funkcji stylu tabeli ZWCAD się wieszał. Teraz program jest stabilny, ale problem nie został jeszcze rozwiązany, rozwiązanie jest opracowywane. Na LISPowy dostęp do stylu tabel będziemy musieli jeszcze poczekać

Odnośnik do komentarza
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie