FastFiber

lagen bevriezen in viewports (opgelost)

Gestart door marcelmaas, di 09 02 2010, 16:08:57

Vorige topic - Volgende topic

marcelmaas

Nou werkt hij zoals ik wilde, superrrrrr.
Bedankt voor de snelle hulp Roy_043 !!!

Groeten Marcel...

marcelmaas

#16
Hi,

Ik zit nog met een probleem aangaande deze lisp routine.
De routine bevriest de lagen in de viewport, maar als er in een laag een blok staat, dan bevriest hij die laag niet.
Dat telt ook voor Mtext, die laag bevriest hij ook niet!
Heeft iemand een idee hoe dit komt?

Dit is mijn code:



(defun c:Layer-VP-Freeze-Leidingwerk ( / ss laag laagnaam)
 (setvar "cmdecho" 0)
 (setq ss (ssget "_X" (list '(0 . "VIEWPORT") (cons 410 (getvar "ctab")))))
 (command "_.vplayer" "_thaw" "*" "_select" ss "" "")
 (while (setq laag (tblnext "layer" (not laag))) ; bij eerste keer is (not laag) gelijk aan T
   (setq laagnaam (cdr (assoc 2 laag)))
   (if
     (or
   (= (substr (strcase laagnaam) 1 13) "HCKP_AANSLUIT")
   (= (substr (strcase laagnaam) 1 11) "HCKP_KOPPEL")
   (= (substr (strcase laagnaam) 1 9) "HCKP_CODE")
   (= (substr (strcase laagnaam) 1 10) "HCKP_KOPER")
   (= (substr (strcase laagnaam) 1 12) "HCKP_LEIDING")
   (= (substr (strcase laagnaam) 1 10) "HCKP_TEKST")
   (= (substr (strcase laagnaam) 1 17) "HCKP_TEKST_TOTAAL")
   (= (substr (strcase laagnaam) 1 13) "HH_R_AANSLUIT")
   (= (substr (strcase laagnaam) 1 11) "HH_R_KOPPEL")
   (= (substr (strcase laagnaam) 1 9) "HH_R_CODE")
   (= (substr (strcase laagnaam) 1 10) "HH_R_KOPER")
   (= (substr (strcase laagnaam) 1 12) "HH_R_LEIDING")
   (= (substr (strcase laagnaam) 1 10) "HH_R_TEKST")
   (= (substr (strcase laagnaam) 1 9) "HHR_TEKST")
   (= (substr (strcase laagnaam) 1 17) "HH_R_TEKST_TOTAAL")
   (= (substr (strcase laagnaam) 1 16) "HHR_TEKST_totaal")
   (= (substr (strcase laagnaam) 1 17) "HH_R_TEKST_totaal")
   (= (substr (strcase laagnaam) 1 22) "HCKP_PANEELNUMMERTEKST")
   (= (substr (strcase laagnaam) 1 7) "HH_R_PLAFOND")
     )
     (command "_.vplayer" "_freeze" laagnaam "_select" ss "" "")
   )
 )
)

(defun c:Alt-VP-F ()
 (setvar "cmdecho" 0)
 (command
   "_.vplayer"
   "_thaw" "*" "_select" (ssget "_X" (list '(0 . "VIEWPORT") (cons 410 (getvar "ctab")))) ""
   "_freeze" "kop*,aan*" "_select" "_previous" ""
   ""
 )
)

roy_043

#17
Jouw aangepaste lisp werkt in principe. De code bevat wel een aantal onnodige regels. En ook wat onzin. Ik raad jou het volgende aan:
1.
Sorteer de regels met laagnamen alfabetisch op laagnaam. Hierdoor krijg je meer overzicht.
2.
Verwijder alle doublures.
3.
Als je eerst test op "HCKP_TEKST" dan is het vanzelfsprekend overbodig om daarna te testen op "HCKP_TEKST_TOTAAL"
4.
(strcase...) zet de laagnaam om in alleen hoofdletters. Het is dus onzin om daarna te vergelijken met een tekst met kleine letters.
5.
Voer nu zelf een uitgebreidere test uit. Plaats blocks en mtexten op een aantal lagen. Je zult net als ik kunnen vaststellen dat de aanwezigheid van deze elementen het bevriezen van de lagen niet verhindert. Ga vervolgens na waarom je in een bepaald geval een probleem ondervindt. Kan het zijn dat het begin van de betreffende laagnaam niet correspondeert met een regel in de lisp...?

Succes!

marcelmaas

Hi,

Ik heb ze op alfabetische volgorde gezet, is inderdaad duidelijker en netter.  :vreegoe:

Jij zei:
Verwijder alle doublures. (Bedoel je verwijder alle dubbele?)

Jij zei:
Als je eerst test op "HCKP_TEKST" dan is het vanzelfsprekend overbodig om daarna te testen op "HCKP_TEKST_TOTAAL"

Dit zijn 2 verschillende lagen, en HCKP_TEKST moet bevroren worden, en HCKP_TEKST_TOTAAL dus niet.
Dus ik snap niet helemaal wat je hiermee bedoeld?

Jij zei:
(strcase...) zet de laagnaam om in alleen hoofdletters.
Ik zou dat weg willen laten maar dan werkt het niet goed, waarschijnlijk haal ik dan teveel of te weinig weg.
Zou ik dit weg kunnen halen?: (strcase laagnaam)



roy_043

De antwoorden op jouw vragen
1.
Ja.
2.
HCKP_TEKST_TOTAAL moet niet bevroren worden??? Dat is vreemd. Op 2 plaatsen geef je aan dat deze laag wel bevroren moet worden.
   (= (substr (strcase laagnaam) 1 10) "HCKP_TEKST")
   (= (substr (strcase laagnaam) 1 17) "HCKP_TEKST_TOTAAL")

Conclusie: jij snapt de werking van de lisp niet. Zie hieronder.
3.
Als je hoofdletterongevoelig wilt controleren dan moet je bijv.:
   (= (substr (strcase laagnaam) 1 10) "HCKP_TEKST")
Vervangen door:
   (= (substr laagnaam 1 10) "HCKP_TEKST")

Een korte omschrijving van de werking van de huidige lisp:

  • Selecteer alle viewports op de huidige tab
  • Ontdooi alle lagen in deze viewports
  • Loop alle lagen in de tekening af
  • Neem een deel van de naam van elke laag en zet dit om in alleen hoofdletters
  • Vergelijk dit deel met een bepaald tekstsegment
  • Klopt de vergelijking bevries dan de betreffende laag in de geselecteerde viewports
  • Klopt de vergelijking niet voer dan de volgende vergelijking uit, enz.

Volgens mij zoek jij deze lisp (zie code hieronder):

  • Selecteer alle viewports op de huidige tab
  • Ontdooi alle lagen in deze viewports
  • Loop alle lagen in de tekening af
  • Vergelijk de volledige laagnaam (hoofdlettergevoelig) met een bepaald tekstsegment
  • Klopt de vergelijking bevries dan de betreffende laag in de geselecteerde viewports
  • Klopt de vergelijking niet voer dan de volgende vergelijking uit, enz.

(defun c:Layer-VP-Freeze ( / ss laag laagnaam)
  (setvar "cmdecho" 0)
  (setq ss (ssget "_X" (list '(0 . "VIEWPORT") (cons 410 (getvar "ctab")))))
  (command "_.vplayer" "_thaw" "*" "_select" ss "" "")
  (while (setq laag (tblnext "layer" (not laag))) ; bij eerste keer is (not laag) gelijk aan T
    (setq laagnaam (cdr (assoc 2 laag)))
    (if
      (or
        (= laagnaam "Kop")
        (= laagnaam "Aan")
      )
      (command "_.vplayer" "_freeze" laagnaam "_select" ss "" "")
    )
  )
)

marcelmaas

Ja je hebt gelijk over de code die hier boven genoemd stond, alleen ben ik hier met drie code's bezig voor verschillende layouts.
Ik zat net in een van de layouts waarin wel HCKP_TEKST_TOTAAL  zichtbaar moet zijn, en HCKP_TEKST niet!
Vandaar onze miscommunicatie, sorry.

Ik wil inderdaad liever hoofdletter ongevoelig controleren, dus ga ik die andere code proberen.

Ik ga ervan uit dat het dan goed komt.

Alvast bedankt..!!!

groeten Marcel..

marcelmaas

Hi Roy,

Met jou laatste code lukt het inderdaad wel om lettergevoelig te selecteren, dat werkt voor ons een stuk makkelijker.
Verder werkt de code zo perfect.

Bedankt voor de hulp.

Groeten Marcel..

sschevers

Mocht je toch nog geinteresserd zijn in de vba code zie bijgaande links
http://www.contractcaddgroup.com/articles/vport.htm Code for freezing layer(s) in a PaperSpace Viewport (mview)
http://www.contractcaddgroup.com/articles/pvLayerOn.htmTHAW a layer in a PaperSpace ViewPort!

stephan

marcelmaas

Bedankt voor die linkjes.


Omdat volgend jaar VBA niet meer in autocad zou werken, ben ik benieuwd of er iemand dit al met VB.Net zou kunnen?
Ikzelf nog niet in ieder geval, en moet me daar eigenlijk mee bezig gaan houden, zoals waarschijnlijk heel veel andere met mij ook.

Dus heeft er iemand iets in VB.Net voor die code, of misschien interessante websites gezien waar je veel kunt lezen over VB.Net?

groeten Marcel..

sschevers

Marcel,

check de volgende sites:
http://discussion.autodesk.com/forums/forum.jspa?forumID=152 autocad discussie forum
http://through-the-interface.typepad.com/through_the_interface/ blog van Kean Wamsley
http://docs.autodesk.com/ACD/2010/ENU/AutoCAD%20.NET%20Developer's%20Guide/index.html Devellopers guide 2010
http://docs.autodesk.com/ACD/2011/ENU/filesMDG/WS1a9193826455f5ff2566ffd511ff6f8c7ca-4875.htm Devolppers guide 2011

punt is wel dat veel voorbeelden en code samples in C# zijn. Misschien een idee om je daar in te gaan verdiepen.
Anders even googlen op c# to vb.net

greetz stephan


FastFiber