OpenDCL Forums

OpenDCL => Show and Tell => Topic started by: jb on August 09, 2007, 06:56:07 AM

Title: Gooey Design
Post by: jb on August 09, 2007, 06:56:07 AM
So I've been working on a feasibility study for the last couple of weeks using Adobe Indesign CS3 - what a wonderful product.  The software uses these really nice, minimal palettes: the text is small, the buttons are tiny, but it works really well.  If you think about it, once you've learned what buttons do what, a form really doesn't need highly descriptive controls.  Microsoft type forms, including AutoCAD really take up too much space: they really could be made more "minimal".

OK, so after working in CS3 I wanted to create a form for AutoCAD that used the same minimal approach.  This is a quick little "LayerWalk" routine that uses a very minimal OpenDCL modeless form:

(http://www.studio2405.com/jdb/jbLayerWalk.jpg)

So copy the code into VLIDE and check it out:


(vl-load-com)

(if (not (vl-bb-ref 'jbLwalk))
  (vl-bb-set
    'jbLwalk
    (dcl_project_import
      (strcat
"YWt6A8EpAADwQIP7BuKTJqMRZTtu4c2duhP9dG+uKDYeOt6fn9oNgmvZdtczP7wXFORqbizbDECR"
"pxDQQEvPpNQ8nHF+d4/8+nqBfpzdNgJBK0L76dQRA5/TbGzcYcLeXMCipY3QCcPtRMC4EPbH72Ib"
"AOCn5ePnoZLgub/tr5nwxAuMApIqVxfaS3HGTHhu3aEuG0zlsSZHTRGXZ00Tlxccm4ost1wErMiz"
"wic06TNFfbOYGrRONqDOEwNE5TGXlyrslofnDDAxMBnY8yJU4+NXs657uV6wqQCdXE4Hpv1/gP8v"
"2BXAgN/c4SuKdTyhGbOEj+FK8u27hB+pRBZLFBmzeFctveFquQ08oa2fhizDqNbnMJN83xgBVxCZ"
"ayP9dqE+uk5WzHhtzv8uzWH73dFRvHYpS3gzhoGHzLTeEXq6Y8G8rqmmjzV/g7/ewbttx50tXNam"
"9ZC0l1p72UQjg6wvsQmwOmcShrCdlRmq0wU34w0UqAzVbuFVZ4Iqr0EtijFqoxf504/O6U8KxGPK"
"CMWnEiyWRR+7TZIcuS1mBMU1s6OEWBRgF1vt1RH3OoG4HFCcnPBU9SK6G4J8iawwcoOuHMZyq7uk"
"HdHs68wnSVeCw/aceHUylLOjsocDgvY5+qsreMNS3llniuaBqel0/UBubqGqT59Gv95moL9zW0WB"
"nJKiuq7RvBWK3p1a9AAr0Z1eWOubEZ+EQlPeTP3wnBqzHbldfJzFJ74oexLLYVkA1I33E7DQF6LK"
"VRlTGeZHFUeJ9c3Cf8hXGQF4uicwQ/fNegSfEmp4uaem4p3Q7MAu6D1sG4dvpHG0DFZ+G9lcQh/2"
"zIzz2S9LsXNPFzmWgLzdaATfk2RepGT+FiX7IBa1sZY/rkgAotUXvArigbcfVcsNCvumn196g8VG"
"jDMQo7sPAu+mVRrL5N5RML0LaFe5sCCXpo+EBuYw40Z5Zc3CBrHUoqNPKVuojF+JAhB1sd2wXnzt"
"CgIfV88qW6DVsB/ZrFHYjE5b2IyhZFpwgHxlbPDRo+MOxfHF6/Q9wunL+uBWpIio4FxilJNqB3iR"
"Uk5zYekWppD4MExAzicMu2eqQQyTikARGAfrcL4EH6CJZ8yXE8DYOt6gGiEpinn7gPoquF3Lq/gp"
"O9H2Nbrn1eSLNNXwWZAAT2AdQH3nOwHML05c+Df6J2sPEbB0FmH9DMbXeQqTdkavIP/FMMppQuxX"
"fzQ98CU3PZBI/WD7I9SdSqASZEEv5PBCw1fCp3IgFa1NaoRMSgd9Nj3tsa8H4seQPe0lGw+ilaIj"
"jAa9o5mWkax8Sr0PaNV4RR4aj6TQiaDDgq45qZ4d5oGI5q2OvPZ8YiS2zCHEzYAc6sDT8XgFJSE6"
"f7fbLoBNLFZq/KR5DFcOdxRhSs4TWuonWhoogTsQ5WAllmCEEw6DAnGP+Vx1GyhLGiiBm37sc5PF"
"1qW8QK4A+SBWzVRfzQTrPhNd5XuTmnMjeBMBVx6CE83uKFPfssw9GItU/wRYVnO9/0EyDHk0gPnl"
""))))

(defun jb104:GetLayers ( / llist ret)
     (vlax-for x(vla-get-layers(vla-get-ActiveDocument(vlax-get-acad-object)))
       (setq llist(append llist(list(vla-get-name x)))))
  (setq ret(ACAD_STRLSORT llist))
  ret
)
(defun c:jb104_00_OnDocActivated ( /)
  (dcl_ListBox_Clear jb104_00_ListBox)
  (dcl_ListBox_AddList jb104_00_ListBox (jb104:GetLayers))
 
)
(defun c:jb104_00_OnInitialize ( /)    
  (dcl_ListBox_AddList jb104_00_ListBox (jb104:GetLayers))
)

(defun c:jb104_00_cl_OnClicked ( /)
     (dcl_form_close jb104_00)
)

(defun c:jb104_00_thaw_OnClicked ( /)
  (dcl_ListBox_SelItemRange jb104_00_ListBox 0 (dcl_ListBox_GetCount jb104_00_ListBox)0)
  (command "-layer" "_thaw" "*" "")
)

(defun c:jb104_00_on_OnClicked ( /)
  (dcl_ListBox_SelItemRange jb104_00_ListBox 0 (dcl_ListBox_GetCount jb104_00_ListBox)0)
  (command "-layer" "_on" "*" "")
)

(defun c:jb104_00_CheckBox7_OnClicked (nValue /)
     (c:jb104_00_OnDocActivated)
)

(defun c:jb104_00_ref_OnClicked ( /)
     (c:jb104_00_OnDocActivated)
)


(defun c:jb104_00_ListBox_OnSelChanged (nSelection sSelText / rValue layers)
     (Setq rValue (dcl_ListBox_GetSelectedItems jb104_00_ListBox)
   layers(vla-get-layers(vla-get-ActiveDocument(vlax-get-acad-object)))
   Value (dcl_Control_GetValue jb104_00_CheckBox7))
  (if Value
  (foreach x rValue
    (vla-put-layeron(vla-item layers x):vlax-true))
    (foreach x rValue
    (vla-put-layeron(vla-item layers x):vlax-false)))
)

(defun c:jb104_00_CheckBox7_OnClicked (nValue /)
     (dcl_ListBox_SelItemRange jb104_00_ListBox 0 (dcl_ListBox_GetCount jb104_00_ListBox)0)
)

;;; ;
;;; Command Interface ;
;;; ;

(defun c:jbLayerWalk  (/ )
  (defun EnsureProjectLoaded  (project / project-path)
    (if (not (setq project-path (dcl_Project_Load project)))
      (progn
(alert (strcat "ODCL project \"" project "\" failed to load!"))
(exit)
)))
  (EnsureProjectLoaded "jb104")
  (if (not (dcl_Form_IsActive jb104_00))
    (dcl_Form_Show jb104_00))
  (princ))


;;; ;
;;; Floating Form ;
;;; Document Opened ;
;;; ;

(defun jb:Laywalk_IsFloating  (/ )
  (defun EnsureProjectLoaded  (project / project-path)
    (if (not (setq project-path (dcl_Project_Load project)))
      (progn
(alert (strcat "ODCL project \"" project "\" failed to load!"))
(exit)
)))
  (EnsureProjectLoaded "jb104")
  (if (dcl_Form_IsActive jb104_00)
    (c:jb104_00_OnDocActivated))
  (princ))

(jb:Laywalk_IsFloating)
Title: Re: Gooey Design
Post by: tlindell on August 14, 2007, 07:07:05 PM
That's a really good observation.  Modeless/dockable forms should always make the most of the space they use.  That's been a big pet peeve for me and hope to make many forms like this.  I think you took it to an even higher level than I've attempted, so there's something to strive for :)

I was also trying to figure out how to store and load the dialog code within the defun code today.  Looks like I've found the answer by your example code!
Title: Re: Gooey Design
Post by: jb on August 15, 2007, 04:47:44 AM
Glad to be of help.  I'm going to start uploading more examples as time allows - so stay tuned!
Title: Re: Gooey Design
Post by: owenwengerd on August 15, 2007, 09:18:21 AM
Quote from: jb on August 09, 2007, 06:56:07 AM
(if (not (vl-bb-ref 'jbLwalk))
  (vl-bb-set
    'jbLwalk
    (dcl_project_import
      (strcat
   "YWt6A8EpAADwQIP7BuKTJqMRZTtu4c2duhP9dG+uKDYeOt6fn9oNgmvZdtczP7wXFORqbizbDECR"
"pxDQQEvPpNQ8nHF+d4/8+nqBfpzdNgJBK0L76dQRA5/TbGzcYcLeXMCipY3QCcPtRMC4EPbH72Ib"
"AOCn5ePnoZLgub/tr5nwxAuMApIqVxfaS3HGTHhu3aEuG0zlsSZHTRGXZ00Tlxccm4ost1wErMiz"
...

James, I just want to point out that it is no longer necessary to concatenate the strings with (strcat).  The (dcl_project_import) function will accept multiple string arguments and concatenate them itself, thus saving a lot of time and memory consumption over the "(strcat) into one single string" method.
Title: Re: Gooey Design
Post by: jb on August 15, 2007, 09:37:16 AM
So we just loose the (strcat . . . ) and call


(dcl_project_import
"YWt6A8EpAADwQIP7BuKTJqMRZTtu4c2duhP9dG+uKDYeOt6fn9oNgmvZdtczP7wXFORqbizbDECR"
"pxDQQEvPpNQ8nHF+d4/8+nqBfpzdNgJBK0L76dQRA5/TbGzcYcLeXMCipY3QCcPtRMC4EPbH72Ib"
"AOCn5ePnoZLgub/tr5nwxAuMApIqVxfaS3HGTHhu3aEuG0zlsSZHTRGXZ00Tlxccm4ost1wErMiz"
. . . )


Cool! Thanks Owen.
Title: Re: Gooey Design
Post by: owenwengerd on August 15, 2007, 11:55:24 PM
Quote from: jb on August 15, 2007, 09:37:16 AM
So we just loose the (strcat . . . ) and call ...

Close. The argument needs to be a list of strings like this:
(dcl_project_import '(
"string1"
"string2"
))

See DistSample2.lsp in the examples folder for a sample.
Title: Re: Gooey Design
Post by: jb on August 16, 2007, 04:26:16 AM
Even better: so I can just copy and past the OpenDCLForm.LSP contents into the (dcl_Project_import . . .) function!

Thankyou Owen!
Title: Re: Gooey Design
Post by: tlindell on August 17, 2007, 05:30:39 PM
I didn't get a chance to say this on the sourceforge forums, but I really appreciate being able to do this for distributting purposes rather than relying on a second file like DCL does.
Title: Re: Gooey Design
Post by: jb on August 19, 2007, 06:47:40 AM
Owen, do we even need the .odcl file?  Can we just use the .lsp file??  If I'm going to wrap it in a VLX or FAS then there in lies the security . . ..
Title: Re: Gooey Design
Post by: owenwengerd on August 19, 2007, 07:28:53 AM
Quote from: jb on August 19, 2007, 06:47:40 AM
Owen, do we even need the .odcl file?

James, you can use only the .lsp file if you prefer. The only advantage of using an .odcl file is that it's smaller.